使用scikit-learn的Imputer模块预测缺失值

xen*_*ato 17 python numpy prediction scikit-learn imputation

我正在编写一个非常基本的程序来使用scikit-learn的Imputer类来预测数据集中的缺失值.

我创建了一个NumPy数组,用strategy ='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
Run Code Online (Sandbox Code Playgroud)

jon*_*rpe 27

根据文档,sklearn.preprocessing.Imputer.fit_transform返回一个新数组,它不会改变参数数组.因此,最小的修复:

X = imp.fit_transform(X)
Run Code Online (Sandbox Code Playgroud)

  • 此外,您可以在构造函数中设置`copy = False`来就地进行插补,并尽可能避免创建副本. (7认同)
  • @Rayu您可能希望使用多重插补来正确执行此操作.有关使用pandas和Frank Cheng非常好的MICE端口的更多信息,请参见此处:http://gsocfrankcheng.blogspot.ca/ (2认同)

msk*_*klc 7

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)
Run Code Online (Sandbox Code Playgroud)

请注意:

而不是“男”np.nan使用

不需要使用axis参数

我们可以使用impimputer代替我的impute变量