如何在 FeatureUnion 中使用 feature-select scikit 转换器

How to feature-select scikit transformers within FeatureUnion

我有一个机器学习分类任务,它从各种固定长度向量表示的串联中进行训练。我如何在 scikit-learn 中执行自动特征选择或网格搜索或任何其他已建立的技术来为我的数据找到最佳的转换器组合?

以此文本分类流程为例:

model = Pipeline([
   ('vectorizer', FeatureUnion(transformer_list=[
      ('word-freq', TfidfVectorizer()),        # vocab-size dimensional
      ('doc2vec', MyDoc2VecVectorizer()),      # 32 dimensional (custom transformer)
      ('doc-length', MyDocLengthVectorizer()), # 1 dimensional (custom transformer)
      ('sentiment', MySentimentVectorizer()),  # 3 dimensional (custom transformer)
      ...                                      # possibly many other transformers
   ])),
   ('classifier', SVC())
])

我怀疑这可能属于 scikit slep002 所请求的 dynamic-pipeline 功能。如果可以,中间如何处理?

虽然不太能够“选择最好的(全有或全无)特征变换器子集”,但我们可以使用 scikit 的 feature selectiondimensionality reduction模块到“choose/simplify 所有转换器的最佳特征子集”作为分类前的额外步骤:

model = Pipeline([
   ('vectorizer', FeatureUnion(transformer_list=[...])),
   ('feature_selector', GenericUnivariateSelect(
      mode='percentile',
      param=0.20,          # hyper-tunable parameter
   )),
   ('classifier', SVC())
])

在特征发现上下文中(即:找到最佳表达信号),这种技术比 cherry-picking transformers 更强大。然而,在架构发现上下文中(即:找到最佳管道布局和变压器的使用)这个问题似乎仍然悬而未决..