scikit学习除NaN以外的插补值

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了scikit学习除NaN以外的插补值相关的知识,希望对你有一定的参考价值。

我正在尝试为代表矩阵中空值的不同占位符插值。例如,我想在“?”时插入一个值存在于numpy 2darray中。

为此,我创建了一个Imputer,如下所示:

from sklearn import preprocessing
imputer = preprocessing.Imputer(missing_values="?", strategy='mean', axis=0, copy=False)
data = imputer.fit_transform(data)  

但我收到此错误:

/usr/local/lib/python2.7/dist-packages/sklearn/preprocessing/imputation.pyc in _get_mask(X, value_to_mask)
     27 def _get_mask(X, value_to_mask):
     28     """Compute the boolean mask X == missing_values."""
---> 29     if value_to_mask == "NaN" or np.isnan(value_to_mask):
     30         return np.isnan(X)
     31     else:

NotImplementedError: Not implemented for this type

我误解了missing_values可以设置为什么?

我印象很深,它可以是任何字符串,而不仅仅是“ NaN”,这是scikit-learn来源所建议的。

答案

类型"integer or string"的实际含义是“整数或字符串'NaN'”。fit/ fit_transform的输入仍应为数字。 (将"NaN"作为字符串传递的唯一原因是,传递np.nan可能会导致混乱的情况,因为它不等于自身,即np.nan == np.nan的值为False。)

另一答案

您正在使用哪个版本的sklearn?自0.20起,不推荐使用Imputer,而可以使用-SimpleImputer

from sklearn.impute import SimpleImputer
imputer = SimpleImputer(missing_values=np.nan, strategy='mean', verbose=0)

imputer = imputer.fit(X[:, 1:3])           # assume you want to impute 2 columns
X[:, 1:3] = imputer.transform(X[:, 1:3])

以上是关于scikit学习除NaN以外的插补值的主要内容,如果未能解决你的问题,请参考以下文章

python笔记:fancyimpute

scikits 机器学习中的缺失值

分类变量差值处理的方法

有没有办法在机器学习中估算缺失值?

棘手的条件插补,理想情况下使用 Tidyverse

如何处理插补没有意义的 NaN 值? (对于 PCA)