scikit learn 填补非 NaN 的值
我正在尝试为一个矩阵中的不同占位符填充值,这些占位符表示空值。比如说,我想在一个numpy的二维数组中,每当出现“?”时就填充一个值。
为此,我创建了一个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
你在用哪个版本的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])
3
这里说的类型 "integer or string"
实际上是指“可以是一个整数,或者是字符串 'NaN'
”。传给 fit
/fit_transform
的输入应该还是数字。(之所以把 "NaN"
作为字符串传入,是因为如果直接用 np.nan
,可能会让人困惑,因为 np.nan
和它自己不相等,也就是说 np.nan == np.nan
的结果是 False
。)