2012-11-10 31 views
8

Trong khi libsvm cung cấp các công cụ để chia tỷ lệ dữ liệu, với Scikit-Learn (dựa trên libSVM cho trình phân loại SVC), tôi không tìm cách chia tỷ lệ dữ liệu của mình.Chia nhỏ dữ liệu trong scikit-learning SVM

Về cơ bản tôi muốn sử dụng 4 tính năng, trong đó 3 phạm vi từ 0 đến 1 và số cuối cùng là số có số lượng lớn "lớn".

Nếu tôi bao gồm tính năng thứ tư trong libSVM (sử dụng kịch bản easy.py tự động chia tỷ lệ dữ liệu của tôi), tôi nhận được một số kết quả rất tốt (độ chính xác 96%). Nếu tôi bao gồm biến thứ tư trong Scikit-Tìm hiểu độ chính xác giảm xuống ~ 78% - nhưng nếu tôi loại trừ nó, tôi nhận được cùng kết quả tôi nhận được trong libSVM khi loại trừ tính năng đó. Vì vậy, tôi khá chắc chắn đó là một vấn đề thiếu mất quy mô.

Làm cách nào để sao chép theo chương trình (tức là không gọi quy mô svm) quy trình chia tỷ lệ SVM?

Trả lời

6

Bạn có chức năng rằng trong sklearn.preprocessing:

>>> from sklearn import preprocessing 
>>> X = [[ 1., -1., 2.], 
...  [ 2., 0., 0.], 
...  [ 0., 1., -1.]] 
>>> X_scaled = preprocessing.scale(X) 

>>> X_scaled           
array([[ 0. ..., -1.22..., 1.33...], 
     [ 1.22..., 0. ..., -0.26...], 
     [-1.22..., 1.22..., -1.06...]]) 

Dữ liệu sau đó sẽ có không có ý nghĩa và đơn vị sai.

+0

Điều cần biết, cảm ơn. Tôi có nên chuẩn hóa dữ liệu thử nghiệm cùng với dữ liệu đào tạo và cắt chúng sau đó hay tôi chỉ nên thực hiện dữ liệu thử nghiệm? – luke14free

+3

Điều đó được đề cập trong [tài liệu] (http://scikit-learn.org/stable/modules/preprocessing.html#standardization-or-mean-removal-and-variance-scaling). Tôi đoán bạn nên làm điều đó một cách riêng biệt, nếu không dữ liệu đào tạo sẽ bị ảnh hưởng bởi các mẫu thử nghiệm. Với lớp 'Scaler' bạn có thể tính giá trị trung bình và độ lệch chuẩn của dữ liệu huấn luyện và sau đó áp dụng cùng một phép biến đổi cho dữ liệu thử nghiệm. – Maehler

+8

Bạn nên sử dụng một 'Scaler' cho điều này, không phải là hàm freestanding' scale'. Một 'Scaler' có thể được cắm vào một' Pipeline', ví dụ: 'scaling_svm = Đường ống ([(" scaler ", Scaler()), (" svm ", SVC (C = 1000))])'. –

Các vấn đề liên quan