首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何让支持向量机很好地处理scikit-learn中缺失的数据?

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

Stack Overflow用户
提问于 2012-07-12 05:26:25
回答 3查看 14.3K关注 0票数 26

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

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

代码语言:javascript
复制
    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很好地处理丢失的数据呢?请记住,丢失的数据适用于随机森林和其他分类器。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-07-12 23:34:30

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

编辑:在scikit-learn中,有一种非常简单的方法可以做到这一点,如this page所示。

(从页面复制并修改)

代码语言:javascript
复制
>>> 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)
票数 26
EN

Stack Overflow用户

发布于 2012-07-12 16:17:37

您可以删除缺少特征的样本,也可以用其列中值或均值替换缺少的特征。

票数 6
EN

Stack Overflow用户

发布于 2021-05-31 19:31:54

这里最流行的答案是过时的。"Imputer“现在是"SimpleImputer”。目前解决这个问题的方法是给出here。输入训练和测试数据对我的作用如下:

代码语言:javascript
复制
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)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11441751

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档