【问题标题】:How to implement a sklearn transformer with sklearn.base.SimpleImputer but returns a pandas DataFrame如何使用 sklearn.base.SimpleImputer 实现 sklearn 转换器但返回 pandas DataFrame
【发布时间】:2020-01-02 05:32:39
【问题描述】:

我想用 sklearn imputer 实现一个客户转换器,例如 sklearn.base.SimpleImputer。

输出应该是一个数据框,

我有以下代码,但不确定是否正确

class DFSimpleImputer(TransformerMixin):

def __init__(self, *args, **kwargs):
    self.imp = SimpleImputer(*args, **kwargs)

def fit(self, X, y=None, **fit_params):
    self.imp.fit(X)
    return self

def transform(self, X):
    # assumes X is a DataFrame
    Ximp = self.imp.transform(X)
    Xfilled = pd.DataFrame(Ximp, index=X.index, columns=X.columns)
    return Xfilled

【问题讨论】:

  • 为什么你需要在你的 imputer 中有这个?如果您需要将其作为数据框,您也可以这样做 pd.DataFrame(imp_mean.transform(X)) ?
  • 任何自定义转换器也应该继承自BaseEstimator。
  • @rvf,谢谢解答,transformerMixin 对transformer(fit、transform 和fit_transform)来说已经足够了

标签: python-3.x scikit-learn imputation


【解决方案1】:

是的,上面的代码可以运行并返回一个数据框。您需要问的问题是为什么在构建转换器时需要 DataFrame(是的,它添加了标签以便于阅读)。也许 nparray 更好,因为您可能会遇到稀疏矩阵并且 DataFrame 会占用您所有的 RAM。

【讨论】:

    【解决方案2】:

    我上面的代码实际上每个测试都有效,它适合数据集,然后转换。最终结果将转换为 DataFrame。但缺点是,如果我们最终得到一个稀疏矩阵,SimpleImputer 的默认返回 nparray 会比 DataFrame 更好。因此将 nparray 转换为数据框有利于研究目的,但在生产中我可能会切换回 nparray

    【讨论】:

      猜你喜欢
      • 2015-06-13
      • 2016-07-27
      • 2020-06-22
      • 2019-06-07
      • 2017-09-20
      • 2020-12-06
      • 1970-01-01
      • 2020-02-16
      • 2013-05-25
      相关资源
      最近更新 更多