2012-07-11 36 views
21

Tôi đang sử dụng tính năng tìm hiểu scikit cho một số phân tích dữ liệu và tập dữ liệu của tôi có một số giá trị bị thiếu (được biểu thị bằng NA). Tôi tải dữ liệu với genfromtxt với dtype='f8' và tiếp tục đào tạo trình phân loại của tôi.Làm thế nào để SVM chơi độc đáo với dữ liệu bị thiếu trong scikit-learning?

Việc phân loại là tốt trên RandomForestClassifierGradientBoostingClassifier đối tượng, nhưng sử dụng SVC từ sklearn.svm gây lỗi sau:

probas = classifiers[i].fit(train[traincv], target[traincv]).predict_proba(train[testcv]) 
    File "C:\Python27\lib\site-packages\sklearn\svm\base.py", line 409, in predict_proba 
    X = self._validate_for_predict(X) 
    File "C:\Python27\lib\site-packages\sklearn\svm\base.py", line 534, in _validate_for_predict 
    X = atleast2d_or_csr(X, dtype=np.float64, order="C") 
    File "C:\Python27\lib\site-packages\sklearn\utils\validation.py", line 84, in atleast2d_or_csr 
    assert_all_finite(X) 
    File "C:\Python27\lib\site-packages\sklearn\utils\validation.py", line 20, in assert_all_finite 
    raise ValueError("array contains NaN or infinity") 
ValueError: array contains NaN or infinity 

gì cho? Làm thế nào tôi có thể làm cho SVM chơi độc đáo với dữ liệu bị thiếu? Lưu ý rằng dữ liệu bị thiếu hoạt động tốt đối với các khu rừng ngẫu nhiên và các loại phân loại khác ..

Trả lời

24

Bạn có thể thực hiện việc xử lý dữ liệu để xử lý các giá trị bị thiếu trước khi sử dụng SVM.

CHỈNH SỬA: Trong quá trình tìm hiểu, có một cách thực sự dễ dàng để thực hiện việc này, được minh họa trên this page.

(sao chép từ trang và sửa đổi)

>>> import numpy as np 
>>> from sklearn.preprocessing import Imputer 
>>> # missing_values is the value of your placeholder, strategy is if you'd like mean, median or mode, and axis=0 means it calculates the imputation based on the other feature values for that sample 
>>> imp = Imputer(missing_values='NaN', strategy='mean', axis=0) 
>>> imp.fit(train) 
Imputer(axis=0, copy=True, missing_values='NaN', strategy='mean', verbose=0) 
>>> train_imp = imp.transform(train) 
+1

gì về giá trị Infinite? Điều này cho thấy một chiến lược chỉ với NaN (tức là chia cho số không) – lefterav

+0

Tôi đã làm điều này nhưng việc chuyển đổi đã thay đổi dữ liệu thành một mảng không nguyên. Nếu tôi không impute phân loại svm hoạt động tốt, nhưng khi tôi impute dữ liệu tôi nhận được lỗi 'IndexError: chỉ số nguyên, lát (': '), ellipsis (' ... '), numpy.newaxis (' None ') và số nguyên hoặc mảng boolean là các chỉ số hợp lệ'. Có lời khuyên nào không? –

6

Bạn có thể xóa mẫu bằng các tính năng bị thiếu hoặc thay thế các tính năng bị thiếu bằng phương tiện hoặc phương tiện có cột.

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