SimpleImputer 会删除功能吗?

DN1*_*DN1 3 python machine-learning pandas scikit-learn

我有一个包含 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
Run Code Online (Sandbox Code Playgroud)

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

小智 6

如果您的特征没有任何值,则可能会发生这种情况,来自https://scikit-learn.org/stable/modules/ generated/sklearn.impute.SimpleImputer.html :\n\'仅包含拟合时缺失值的列是如果策略不是 \xe2\x80\x9cconstant\xe2\x80\x9d\',则在转换时丢弃。\n您可以在构造输入器时使用较高的 \'verbose\' 值来判断这是否确实是问题所在:

\n

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

\n

它会吐出类似的内容:\nUserWarning: 删除没有观察到的值的特征: [ ... ]

\n