【问题标题】:Does SimpleImputer remove features?SimpleImputer 是否删除功能?
【发布时间】:2020-06-17 01:16:51
【问题描述】:

我有一个包含 284 个特征的数据集,我正在尝试使用 scikit-learn 进行估算,但是在特征数量变为 283 个时出现错误:

imputer = SimpleImputer(missing_values = np.nan, strategy = "mean")
imputer = imputer.fit(data.iloc[:,0:284])
df[:,0:284] = imputer.transform(df[:,0:284])
X = MinMaxScaler().fit_transform(df)

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-150-849be5be8fcb> in <module>
      1 imputer = SimpleImputer(missing_values = np.nan, strategy = "mean")
      2 imputer = imputer.fit(data.iloc[:,0:284])
----> 3 df[:,0:284] = imputer.transform(df[:,0:284])
      4 X = MinMaxScaler().fit_transform(df)

~\Anaconda3\envs\environment\lib\site-packages\sklearn\impute\_base.py in transform(self, X)
    411         if X.shape[1] != statistics.shape[0]:
    412             raise ValueError("X has %d features per sample, expected %d"
--> 413                              % (X.shape[1], self.statistics_.shape[0]))
    414 
    415         # Delete the invalid columns if strategy is not constant

ValueError: X has 283 features per sample, expected 284

我不明白这是如何达到 283 个功能的,我假设在拟合时会找到全为 0 或其他内容的功能并决定放弃它,但我找不到告诉我如何确保这些功能的文档仍然保留。我不是程序员,所以不确定我是否遗漏了其他明显的东西,或者我是否更好地研究另一种方法?

【问题讨论】:

  • 是否有任何分类(例如字符串)列?
  • 看起来你在 fit 和 transform 调用之间的矩阵索引出了点问题。你能尝试做一个fit_transform(拟合并返回转换后的数据)

标签: python pandas machine-learning scikit-learn


【解决方案1】:

我正在处理同样的情况,我通过在 SimpleImputer 均值策略之前添加这个转换得到了我的解决方案

imputer = SimpleImputer(strategy = 'constant', fill_value = 0)
df_prepared_to_mean_or_anything_else = imputer.fit_transform(previous_df)

它有什么作用?用参数fill_value上指定的值填充所有缺失的值

【讨论】:

    【解决方案2】:

    如果您有一个没有任何值的功能,则可能会发生这种情况,来自https://scikit-learn.org/stable/modules/generated/sklearn.impute.SimpleImputer.html: '如果策略不是“常量”,则在变换时丢弃仅包含合适缺失值的列'。 您可以通过在构建 imputer 时使用高“详细”值来判断这是否确实是问题:

    sklearn.impute.SimpleImputer(..., verbose=100,...)

    它会吐出这样的东西: 用户警告:删除没有观察值的特征:[ ... ]

    【讨论】:

      猜你喜欢
      • 2013-08-09
      • 1970-01-01
      • 1970-01-01
      • 2012-12-23
      • 2021-12-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-07
      • 2015-06-10
      相关资源
      最近更新 更多