Python 使用scikit learn'预测缺失值;s输入模块

Python 使用scikit learn'预测缺失值;s输入模块,python,numpy,scikit-learn,prediction,imputation,Python,Numpy,Scikit Learn,Prediction,Imputation,我正在编写一个非常基本的程序,使用scikit learn的插补器类来预测数据集中的缺失值 我制作了一个NumPy数组,创建了一个带有strategy='mean'的插补器对象,并对NumPy数组执行了fit_transform() 当我在执行fit_transform()后打印数组时,“Nan”仍然存在,我没有得到任何预测 我做错了什么?我如何预测缺失的值 import numpy as np from sklearn.preprocessing import Imputer X = np.

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

我制作了一个NumPy数组,创建了一个带有strategy='mean'的插补器对象,并对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
根据,
sklearn.preprocessing.inputer.fit_transform
返回一个新数组,它不会改变参数数组。因此,最基本的解决方案是:

X = imp.fit_transform(X)

注:由于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])

scikit学习版本0.20之后,插补模块的使用发生了变化。现在,我们可以使用插补器

from sklearn.impute import SimpleImputer
impute = SimpleImputer(missing_values=np.nan, strategy='mean')
impute.fit(X)
X=impute.transform(X)
注意:

使用np.NaN代替'NaN'

不需要使用轴参数


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

,谢谢。然而,所有缺失值的预测值都是相同的。我也使用了更大的数据集,但所有的“NaN”都被相同的值所取代。我需要在程序中更改什么?这些不是“预测”值,它们只是缺少数据的替换。您的策略是
“平均值”
,因此它将“使用沿轴的平均值替换缺少的值”。好的。那么,我应该使用哪种算法来预测缺失的值?此外,您可以在构造函数中设置
copy=False
,以便在适当的位置进行插补,并尽可能避免创建副本。@Rayu您可能希望使用多重插补来正确执行此操作。请参阅此处,了解更多有关使用大熊猫和Frank Cheng的“非常好的老鼠港”进行预测的信息:这通常不称为预测,而是称为插补。除非丢失的值都是将来的。