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

18 投票
3 回答
45938 浏览
提问于 2025-04-18 15:11

我正在写一个非常简单的程序,目的是用 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)

撰写回答