2013-02-25 30 views
20

Tôi đang sử dụng tính năng tìm hiểu scikit trong chương trình Python của mình để thực hiện một số thao tác học máy. Vấn đề là bộ dữ liệu của tôi có vấn đề mất cân đối nghiêm trọng.Mất cân bằng trong việc tìm hiểu

Có ai quen thuộc với một giải pháp cho sự mất cân bằng trong scikit-tìm hiểu hoặc trong python nói chung? Trong Java có cơ chế SMOTE. Có điều gì đó song song trong python?

+1

Bạn có thể thử oversampling/undersampling để cân bằng tập dữ liệu. Tất nhiên đây là một phương pháp học máy chung và không cụ thể cho Python và scikit-learn. Trong thực tế, câu hỏi này có thể là tắt chủ đề ở đây. Có lẽ nó phù hợp hơn với số liệu thống kê. Họ thậm chí có một [thẻ không cân bằng lớp] (http://stats.stackexchange.com/questions/tagged/unbalanced-classes). – Junuxx

+0

Tôi biết chủ đề cũ nhưng tôi chỉ thêm một lời khuyên. Đối với các bộ dữ liệu không cân bằng, ngoài việc lấy chồng/lấy mẫu và sử dụng tham số class_weight, bạn cũng có thể hạ ngưỡng để phân loại các trường hợp của mình. Dự đoán xác suất (thay vì các lớp) và thử sử dụng các ngưỡng nhỏ hơn 0,5. Tất nhiên, điều này sẽ không làm tăng hiệu suất của trình phân loại, nó chỉ là sự cân bằng giữa độ chính xác và thu hồi. – Stergios

+0

Stergios, bạn có thể điều chỉnh ngưỡng chính xác như thế nào? Bất kỳ tham chiếu đến mã python nào? – KubiK888

Trả lời

4

SMOTE không phải là một công cụ tìm kiếm tích hợp, nhưng vẫn có những triển khai trực tuyến. Ví dụ:
Here.

+1

Chỉ cần nhìn vào mã, nó chứa 'TODO' s. Việc triển khai này có đúng không? – inspectorG4dget

+1

Mã đúng, tôi vừa kiểm tra. 'TODO' là một trường hợp đặc biệt và bỏ sót một cái gì đó như thế này:' T = T [np.random.choice (phạm vi (len (T)), N)] '. Nhưng giữ dòng 'N = 100'! –

24

Trong Scikit tìm hiểu có một số kỹ thuật điều chỉnh cân bằng, thay đổi tùy theo thuật toán học mà bạn đang sử dụng.

Một số trong số đó, như Svm hoặc logistic regression, có tham số class_weight. Nếu bạn khởi tạo một SVC với tham số này được đặt trên 'tự động', nó sẽ cân trọng lượng từng ví dụ lớp tương ứng với nghịch đảo của tần số của nó.

Thật không may, không có công cụ tiền xử lý nào có mục đích này.

+0

Tôi đã thử sử dụng trọng lượng lớp = 'tự động' trong dữ liệu cực kỳ mất cân bằng của mình, nhưng tôi không thấy sự khác biệt nhiều về hiệu suất, có bình thường không? – KubiK888

+0

@ KubiK888 bạn đang thử nghiệm và xác thực bằng cách sử dụng cùng một X? bạn đang sử dụng phép đo gì? –

+0

Không, các bộ kiểm tra và đào tạo được phân tách hoàn toàn. – KubiK888

51

Có một cái mới ở đây

https://github.com/scikit-learn-contrib/imbalanced-learn

Nó chứa nhiều thuật toán trong các danh mục sau, bao gồm SMOTE

  • Đang lấy mẫu các nhóm đa số.
  • Lấy mẫu quá mức lớp dân tộc thiểu số.
  • Kết hợp quá mức và không lấy mẫu.
  • Tạo bộ cân bằng tập hợp.
+3

Đây sẽ là câu trả lời đúng IMO – ChucK