2012-07-11 48 views
21

我使用scikit学习一些数据分析,和我的数据集有一定的缺失值(由NA表示)。我使用dtype='f8'将数据加载到genfromtxt并开始训练我的分类器。如何让支持向量机在scikit-learn中很好地与缺失的数据一起玩?

分类是RandomForestClassifierGradientBoostingClassifier对象精细,但使用SVCsklearn.svm导致以下错误:

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 

是怎么回事?我如何使SVM能够很好地处理缺失的数据?请记住,丢失的数据工作正常的随机森林和其他分类..

回答

24

你可以做数据归集使用SVM前处理缺失值。

编辑:scikit学习,有一个非常简单的方法来做到这一点,就说明this page

(从网页复制和修改)

>>> 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

什么无限值?这表明只有NaN的策略(即除以零) – lefterav 2014-10-10 17:11:02

+0

我这样做,但转换将数据更改为非整数数组。如果我不估算svm分类工作正常,但是当我将这些数据归为数据时,我得到错误“IndexError:只有整数,切片(':'),省略号('...'),numpy.newaxis('无')和整数或布尔数组是有效的索引。有小费吗 ? – 2017-06-14 11:41:27

6

您可以去除样品丢失的功能或与他们列分位值或平均值代替缺少的功能。

相关问题