sklearn - vấn đề quá mức


8

Tôi đang tìm kiếm các khuyến nghị về cách tốt nhất cho vấn đề học máy hiện tại của tôi

Phác thảo của vấn đề và những gì tôi đã làm như sau:

  • Tôi có hơn 900 thử nghiệm dữ liệu điện não đồ, trong đó mỗi thử nghiệm dài 1 giây. Sự thật nền tảng được biết đến cho mỗi và phân loại trạng thái 0 và trạng thái 1 (chia 40-60%)
  • Mỗi thử nghiệm đều trải qua quá trình tiền xử lý nơi tôi lọc và trích xuất sức mạnh của các dải tần số nhất định và chúng tạo thành một tập hợp các tính năng (ma trận tính năng: 913x32)
  • Sau đó, tôi sử dụng sklearn để đào tạo mô hình. cross_validation được sử dụng trong đó tôi sử dụng kích thước thử nghiệm là 0,2. Trình phân loại được đặt thành SVC với kernel rbf, C = 1, gamma = 1 (Tôi đã thử một số giá trị khác nhau)

Bạn có thể tìm thấy một phiên bản rút gọn của mã ở đây: http://pastebin.com/Xu13ciL4

Vấn đề của tôi:

  • Khi tôi sử dụng trình phân loại để dự đoán nhãn cho bộ thử nghiệm của mình, mọi dự đoán là 0
  • độ chính xác đào tạo là 1, trong khi độ chính xác của bộ kiểm tra là khoảng 0,56
  • cốt truyện đường cong học tập của tôi trông như thế này:

nhập mô tả hình ảnh ở đây

Bây giờ, đây có vẻ như là một trường hợp kinh điển của quá mức ở đây. Tuy nhiên, quá mức ở đây không chắc là do số lượng tính năng không tương xứng với các mẫu (32 tính năng, 900 mẫu). Tôi đã thử một số thứ để giảm bớt vấn đề này:

  • Tôi đã thử sử dụng giảm kích thước (PCA) trong trường hợp đó là do tôi có quá nhiều tính năng cho số lượng mẫu, nhưng điểm chính xác và biểu đồ đường cong học tập trông giống như trên. Trừ khi tôi đặt số lượng thành phần dưới 10, tại thời điểm đó độ chính xác của tàu bắt đầu giảm, nhưng điều này có phần nào không được mong đợi khi bạn bắt đầu mất thông tin?
  • Tôi đã cố gắng bình thường hóa và chuẩn hóa dữ liệu. Tiêu chuẩn hóa (SD = 1) không có gì thay đổi điểm số đào tạo hoặc độ chính xác. Bình thường hóa (0-1) giảm độ chính xác đào tạo của tôi xuống 0,6.
  • Tôi đã thử nhiều cài đặt C và gamma cho SVC, nhưng chúng không thay đổi điểm số
  • Đã thử sử dụng các công cụ ước tính khác như GaussianNB, thậm chí cả các phương thức tập hợp như adaboost. Không thay đổi
  • Đã thử thiết lập một phương pháp chính quy bằng linearSVC nhưng không cải thiện được tình hình
  • Tôi đã thử chạy các tính năng tương tự thông qua mạng lưới thần kinh bằng cách sử dụng theano và độ chính xác của tàu là khoảng 0,6, thử nghiệm là khoảng 0,5

Tôi rất vui khi tiếp tục suy nghĩ về vấn đề này nhưng tại thời điểm này tôi đang tìm kiếm một người thích đi đúng hướng. Vấn đề của tôi có thể ở đâu và tôi có thể làm gì để giải quyết nó?

Hoàn toàn có thể là tập hợp các tính năng của tôi không phân biệt giữa 2 loại, nhưng tôi muốn thử một số tùy chọn khác trước khi đi đến kết luận này. Hơn nữa, nếu các tính năng của tôi không phân biệt thì điều đó sẽ giải thích điểm số của bộ kiểm tra thấp, nhưng làm thế nào để bạn có được điểm số tập huấn hoàn hảo trong trường hợp đó? Điều đó có thể không?


1
Dữ liệu trông như thế nào trong 2 hoặc 3 chiều sau khi bạn áp dụng PCA, có các cụm đáng chú ý không? Những ví dụ nào đang bị phân loại sai, có một mô hình?
image_doctor

Quang phổ sức mạnh của dấu vết trông như thế nào? nếu bạn vẽ phổ trung bình cho mỗi lớp, chúng có khác nhau không, nếu vậy bạn có thể tối ưu hóa một bộ phân loại để nắm bắt sự khác biệt đó như thế nào không?
image_doctor

1) Bạn có thể chỉ cho chúng tôi sơ đồ cụm PCA không?, 2) Bạn đã thử cây quyết định chưa? Nếu các tính năng ban đầu có thể xem xét kỹ lưỡng về con người, bạn có thể hiểu được nơi nào nó sẽ sai. Mặt khác (loại bỏ một số lỗi ngớ ngẩn về phía bạn) có vẻ như các tính năng của bạn không đủ phân biệt đối xử.
lollercoaster

Rất có thể dữ liệu EEG không thể tách rời, nhưng bạn đã kiểm tra các bộ kiểm tra v đào tạo để đảm bảo chúng không bị sai lệch (ví dụ: chỉ có một ví dụ tích cực hoặc được chuẩn hóa khác nhau)?
jamesmf

1
Bạn có thể gửi dữ liệu ở đâu đó không? "AllData" hoặc "features_all" (không chuẩn hóa và PCA).
stmax

Câu trả lời:


1

Để xem liệu SVM có thể thu được bất kỳ tín hiệu nào không, hãy thử cân bằng dữ liệu của bạn: tạo các bộ kiểm tra và thử nghiệm bao gồm chính xác 50% mẫu dương tính và 50% âm tính (nghĩa là bằng cách lấy mẫu ngẫu nhiên từ bất kỳ mẫu nào lớn hơn). Cũng chuẩn hóa dữ liệu (trừ giá trị trung bình và chia cho độ lệch chuẩn).

(Đối với cân chỉnh, bạn có thể thử thay đổi class_weight tham số trong sklearn, nhưng chúng tôi thấy phương pháp thủ công (lấy mẫu con) để làm việc tốt hơn.)

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.