使用scikit-learn的Imputer模块预测缺失值
我正在写一个非常简单的程序,目的是用 scikit-learn 的 Imputer 类来预测数据集中缺失的值。
我创建了一个 NumPy 数组,然后用策略 'mean' 创建了一个 Imputer 对象,并对这个 NumPy 数组进行了 fit_transform() 操作。
但是,当我在执行 fit_transform() 后打印这个数组时,里面的 'Nan' 依然存在,我没有得到任何预测结果。
我在这里做错了什么呢?我该如何预测缺失的值呢?
import numpy as np
from sklearn.preprocessing import Imputer
X = np.array([[23.56],[53.45],['NaN'],[44.44],[77.78],['NaN'],[234.44],[11.33],[79.87]])
print X
imp = Imputer(missing_values='NaN', strategy='mean', axis=0)
imp.fit_transform(X)
print X
3 个回答
2
注意:因为sklearn库发生了变化,'NaN'需要用np.nan来替换,下面的代码就是这样做的。
from sklearn.preprocessing import Imputer
imputer = Imputer(missing_values= np.nan,strategy='mean',axis=0)
imputer = imputer.fit(X[:,1:3])
X[:,1:3]= imputer.transform(X[:,1:3])
8
在scikit-learn 0.20版本之后,impute模块的用法发生了变化。现在,我们可以这样使用imputer:
from sklearn.impute import SimpleImputer
impute = SimpleImputer(missing_values=np.nan, strategy='mean')
impute.fit(X)
X=impute.transform(X)
注意:
现在用np.nan来代替'NaN'
不需要再使用axis这个参数
我们可以用imp或者imputer来代替我之前的impute
变量
27
根据文档,sklearn.preprocessing.Imputer.fit_transform
会返回一个新的数组,而不会改变传入的数组。所以,最简单的解决办法是:
X = imp.fit_transform(X)