scikit学习除了NaN之外的其他值

时间:2014-03-18 07:20:22

标签: python numpy scikit-learn

我试图为表示矩阵中空值的不同占位符计算值。例如,我希望每当"?"存在于一个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来源似乎建议的内容。

2 个答案:

答案 0 :(得分:3)

类型"integer or string"实际上意味着"要么是整数,要么是字符串'NaN'"。 fit / fit_transform的输入仍应为数字。 ("NaN"作为字符串传递的唯一原因是传递np.nan会导致混乱的情况,因为它不等于它自己,即np.nan == np.nan计算为False }。)

答案 1 :(得分:0)

您正在使用哪个版本的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])