【问题标题】:Predicting missing values with scikit-learn's Imputer module使用 scikit-learn 的 Imputer 模块预测缺失值
【发布时间】:2014-07-29 14:16:35
【问题描述】:

我正在编写一个非常基本的程序来使用 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

【问题讨论】:

  • 一般不叫预测,叫插补。除非缺失的值都是未来的。

标签: python numpy scikit-learn prediction imputation


【解决方案1】:

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

X = imp.fit_transform(X)

【讨论】:

  • 工作正常,谢谢。但是,所有缺失值的预测值都是相同的。我也采用了更大的数据集,但所有“NaN”仍然被相同的值替换。我需要在我的程序中进行哪些更改?
  • 这些不是“预测”值,它们只是缺失数据的替换。您的策略是'mean',因此它将“使用沿轴的平均值替换缺失值”
  • 好的。那么我应该使用哪种算法来预测缺失值呢?
  • 此外,您可以在构造函数中设置copy=False 以就地进行插补,并尽可能避免创建副本。
  • @Rayu 您可能希望使用多重插补来正确执行此操作。有关使用 pandas 和 Frank Cheng 非常好的 MICE 端口的更多信息,请参阅此处:gsocfrankcheng.blogspot.ca
【解决方案2】:

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'

不需要使用参数

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 2018-03-18
      • 1970-01-01
      • 2016-12-18
      • 2018-11-21
      • 2015-03-11
      • 2020-07-01
      • 2019-12-02
      • 2018-05-03
      • 2019-03-30
      相关资源
      最近更新 更多