2012-08-31 48 views
5

Tôi đang sử dụng giao diện Python cho libsvm và những gì tôi nhận thấy là sau khi chọn các thông số Cgamma tốt nhất (RBF kernel) bằng tìm kiếm lưới, khi tôi đào tạo mô hình và chéo xác nhận nó (5 lần, nếu nó có liên quan), độ chính xác mà tôi nhận được giống như tỷ lệ nhãn trong tập dữ liệu huấn luyện của tôi.libsvm - Độ chính xác xác thực chéo giống như tỷ lệ nhãn

Tôi có 3947 mẫu và 2898 trong số đó có nhãn -1 và phần còn lại có nhãn 1. Vì vậy, đó là 73.4229% mẫu.

Và khi tôi đào tạo các mô hình và chéo xác nhận nó 5 nếp gấp, đây là những gì tôi nhận được -

optimization finished, #iter = 1529 
nu = 0.531517 obj = -209.738688, 
rho = 0.997250 nSV = 1847, nBSV = 1534 
Total nSV = 1847 
Cross Validation Accuracy = 73.4229% 

Điều này có nghĩa rằng SVM không tham gia các tính năng vào tài khoản? Hoặc đó là dữ liệu có lỗi ở đây? Cả hai đều có liên quan gì cả? Tôi không thể vượt qua số 73.4229. Ngoài ra, số lượng vectơ hỗ trợ được cho là ít hơn nhiều so với kích thước của tập dữ liệu, nhưng trong trường hợp này, nó không có vẻ như vậy.

Nói chung, ý nghĩa của độ chính xác xác thực chéo giống như tỷ lệ nhãn trong tập dữ liệu là gì?

Trả lời

6

Tập dữ liệu của bạn không cân bằng, có nghĩa là một tỷ lệ phần trăm lớn là cùng một lớp. Điều này dẫn đến cái được gọi là trình phân loại mặc định hoặc phần lớn, nơi có độ chính xác cao bằng cách phân loại mọi thứ như là một phần của lớp lớn. Vì vậy, bạn nói đúng là nó không tính đến các tính năng, vì dữ liệu.

libsvm README đề xuất thay đổi trọng số hình phạt để giải quyết vấn đề này. Và đây là câu hỏi có liên quan: https://stats.stackexchange.com/questions/20948/best-way-to-handle-unbalanced-multiclass-dataset-with-svm

Để biết thêm thông tin về dữ liệu không cân bằng, xem phần 7 của A User's Guide to Support Vector Machines.