2012-07-10 39 views
7

Tôi gặp vấn đề về ba lớp với dữ liệu không cân bằng (90%, 5%, 5%). Bây giờ tôi muốn đào tạo một trình phân loại bằng LIBSVM.Sử dụng LIBSVM grid.py cho dữ liệu không cân bằng?

Vấn đề là LIBSVM tối ưu hóa gamma tham số và Chi phí cho độ chính xác tối ưu, có nghĩa là 100% các ví dụ được phân loại là lớp 1, tất nhiên không phải là thứ tôi muốn.

Tôi đã thử sửa đổi thông số trọng số -w mà không thành công nhiều.

Vì vậy, những gì tôi muốn là, sửa đổi grid.py theo cách nó tối ưu hóa Chi phí và gamma cho độ chính xác và thu hồi được phân cách bởi các lớp thay vì cho độ chính xác tổng thể. Có cách nào để làm điều đó? Hay có những kịch bản khác ngoài kia có thể làm một cái gì đó như thế này?

Trả lời

8

Tham số -w là thứ bạn cần cho dữ liệu không cân bằng. Bạn đã thử những gì cho đến nay?

Nếu lớp học của bạn là:

  • lớp 0: 90%
  • lớp 1: 5%
  • lớp 2: 5%

Bạn nên vượt qua params sau để svm :

-w0 5 -w1 90 -w2 90 
+1

cảm ơn, nhưng tôi nghĩ rằng nó phải là cách khác vòng: -w0 5 -w1 90 -w2 90, vì lớp nhỏ hơn nên có thêm chi phí liên kết với chúng .. điều này đã giúp! – Damnum

+0

vâng, tôi nghĩ bạn nói đúng. Tôi vừa chỉnh sửa câu hỏi của mình. Cảm ơn! –

+0

Và khi bạn có nhiều hơn 3 lớp, bạn có thể tính giá trị của mỗi w như thế nào? – lilouch

4

Nếu bạn muốn thử thay thế, một trong các chương trình trong họ svmlight, http://www.cs.cornell.edu/people/tj/svm_light/svm_rank.html, trực tiếp giảm thiểu diện tích theo đường cong ROC.

Giảm thiểu AUC có thể cho kết quả tốt hơn so với ví dụ về đào tạo lại trọng số.

+1

svmlight là không thân thiện với thương mại; nó chỉ miễn phí cho việc sử dụng học tập. – JDonner

0

Bạn có thể tối ưu hóa bất kỳ độ chính xác, hồi tưởng, điểm F và AUC nào bằng cách sử dụng grid.py. Tinh chỉnh là bạn phải thay đổi biện pháp đánh giá xác thực chéo được sử dụng bởi svm-train trong LIBSVM. Theo dõi procedure given on LIBSVM website.

0

Nếu bạn có dữ liệu không cân bằng, có thể bạn không nên tối ưu hóa độ chính xác. Thay vào đó hãy tối ưu hóa f-score (hoặc nhớ lại, nếu điều đó quan trọng hơn đối với bạn). Bạn có thể thay đổi chức năng đánh giá như được mô tả here.

Tôi nghĩ bạn cũng nên tối ưu hóa gamma và Chi phí, trong khi sử dụng các cấu hình trọng lượng lớp khác nhau. Tôi đã sửa đổi hàm "get_cmd" trong hàm grid.py bằng cách chuyển các trọng số lớp khác nhau cho mục đích đó (trọng lượng -wi). Theo kinh nghiệm của tôi, trọng số của lớp học không phải lúc nào cũng hữu ích.