Python 如何让支持向量机很好地处理scikit learn中缺失的数据?

Python 如何让支持向量机很好地处理scikit learn中缺失的数据?,python,machine-learning,scikit-learn,Python,Machine Learning,Scikit Learn,我正在使用scikit learn进行一些数据分析,我的数据集缺少一些值(由NA表示)。我用genfromtxt和dtype='f8'加载数据,然后开始训练我的分类器 在RandomForestClassifier和GradientBoostingClassifier对象上分类很好,但使用sklearn.svm中的SVC会导致以下错误: probas = classifiers[i].fit(train[traincv], target[traincv]).predict_proba(t

我正在使用scikit learn进行一些数据分析,我的数据集缺少一些值(由
NA
表示)。我用
genfromtxt
dtype='f8'
加载数据,然后开始训练我的分类器

RandomForestClassifier
GradientBoostingClassifier
对象上分类很好,但使用
sklearn.svm
中的
SVC
会导致以下错误:

    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很好地处理丢失的数据?请记住,缺失的数据适用于随机林和其他分类器。

您可以删除缺失特征的样本,或者用其列式中间值或均值替换缺失特征。

您可以在使用SVM之前进行数据插补以处理缺失值

编辑:在scikit学习中,有一种非常简单的方法可以做到这一点,如图所示

(从第页复制并修改)


这里最流行的答案是过时的。“输入者”现在是“简单计算机”。给出了目前解决这一问题的方法。输入培训和测试数据对我的作用如下:

from sklearn import svm
import numpy as np
from sklearn.impute import SimpleImputer

imp = SimpleImputer(missing_values=np.nan, strategy='mean')
imp = imp.fit(x_train)

X_train_imp = imp.transform(x_train)
X_test_imp = imp.transform(x_test)
    
clf = svm.SVC()
clf = clf.fit(X_train_imp, y_train)
predictions = clf.predict(X_test_imp)

那么无限值呢?这表示仅使用NaN(即除以零)的策略。我这样做了,但转换将数据更改为非整数数组。如果我不插补svm分类工作正常,但是当我插补数据时,我会得到错误
索引器:只有整数、切片(
)、省略号(
)、numpy.newaxis(
)和整数或布尔数组是有效的索引
。有什么建议吗?这个答案似乎过时了。我总是以“importTerror:无法从'sklearn.preprocessing'导入名称'Imputer'”结束。
from sklearn import svm
import numpy as np
from sklearn.impute import SimpleImputer

imp = SimpleImputer(missing_values=np.nan, strategy='mean')
imp = imp.fit(x_train)

X_train_imp = imp.transform(x_train)
X_test_imp = imp.transform(x_test)
    
clf = svm.SVC()
clf = clf.fit(X_train_imp, y_train)
predictions = clf.predict(X_test_imp)