【问题标题】:featureUnion vs columnTransformer?featureUnion vs columnTransformer?
【发布时间】:2019-08-31 10:07:58
【问题描述】:

sklearn 中 FeatureUnion() 和 ColumnTransformer() 有什么区别?

如果我想构建一个具有包含混合数据类型(分类、数字、非结构化文本)的特征的监督模型,我需要组合单独的管道,我应该使用哪个?

来源:https://scikit-learn.org/stable/modules/generated/sklearn.pipeline.FeatureUnion.html

来源:https://scikit-learn.org/stable/modules/generated/sklearn.compose.ColumnTransformer.html

【问题讨论】:

    标签: scikit-learn


    【解决方案1】:

    根据 sklearn 文档:

    FeatureUnion:连接多个转换器对象的结果。此估算器将变压器对象列表并行应用于输入数据,然后将结果连接起来。这对于将多个特征提取机制组合到单个转换器中很有用。

    ColumnTransformer:将转换器应用于数组或 pandas DataFrame 的列。该估计器允许单独转换输入的不同列或列子集,并且每个转换器生成的特征将连接起来形成单个特征空间。这对于异构或列数据很有用,可以将多个特征提取机制或转换组合到单个转换器中。

    因此,FeatureUnion 将不同的转换器应用于整个输入数据,然后通过连接它们来组合结果。

    另一方面,ColumnTransformer 将不同的转换器应用于整个输入数据的不同子集,并再次连接结果。

    对于您建议的情况,ColumnTransformer 应该是第一步。然后,一旦所有列都转换为数字,使用 FeatureUnion 可以进一步转换它们,例如结合 PCA 和 SelectKBest

    最后,您当然可以将 FeatureUnion 用作 ColumnTransformer,但您必须在每个分支中包含一个列/类型选择器,而不是仅将感兴趣的列输入到管道下游的下一个转换器中,正如这里解释的那样:https://ramhiser.com/post/2018-04-16-building-scikit-learn-pipeline-with-pandas-dataframe/

    但是,ColumnTransformer 正是这样做的,而且方式更简单。

    【讨论】:

    【解决方案2】:

    这两种方法都用于将独立的变换(变换器)组合成一个变换器,独立的意思是不需要以定义的顺序执行的变换(变换器)。这是因为与常规管道不同,一个转换器不会应用于另一个转换器的输出。

    主要区别在于:特征联合对象中的每个转换器都将整个数据作为输入。在列转换器对象中,它们仅获取部分数据作为输入。最后,它们都将每个转换器的结果连接起来。两者都可以使用并行处理。

    【讨论】:

      猜你喜欢
      • 2019-09-29
      • 1970-01-01
      • 2020-03-18
      • 2020-04-21
      • 2021-06-17
      • 2020-06-30
      • 2021-07-29
      • 2021-03-05
      • 2015-04-28
      相关资源
      最近更新 更多