如何在管道中使用具有关联提取器的多个输入特征?

Rob*_*oon 5 scikit-learn

我正在使用 Scikit-learn 处理分类任务。我有一个数据集,其中每个观察都包含两个单独的文本字段。我想设置一个管道,其中每个文本字段都通过它自己的 TfidfVectorizer 并行传递,并且 TfidfVectorizer 对象的输出被传递给一个分类器。我的目标是能够使用 GridSearchCV 优化两个 TfidfVectorizer 对象的参数以及分类器的参数。

管道可能被描述如下:

Text 1 -> TfidfVectorizer 1 --------|
                                    +---> Classifier
Text 2 -> TfidfVectorizer 2 --------|
Run Code Online (Sandbox Code Playgroud)

我了解如何在不使用管道的情况下执行此操作(只需创建 TfidfVectorizer 对象并从那里开始工作),但是如何在管道中进行设置?

谢谢你的帮助,

抢。

Dan*_*kov 3

使用PipelineFeatureUnion类。您的案例的代码如下所示:

pipeline = Pipeline([
  ('features', FeatureUnion([
    ('c1', Pipeline([
      ('text1', ExtractText1()),
      ('tf_idf1', TfidfVectorizer())
    ])),
    ('c2', Pipeline([
      ('text2', ExtractText2()),
      ('tf_idf2', TfidfVectorizer())
    ]))
  ])),
  ('classifier', MultinomialNB())
])
Run Code Online (Sandbox Code Playgroud)

您可以通过使用语法引用参数来对整个结构进行网格搜索<estimator1>__<estimator2>__<parameter>。例如,features__c1__tf_idf1__min_df指的是图表中min_df的参数。TfidfVectorizer 1

  • 实际上,我想我已经找到了相关的示例:http://scikit-learn.org/dev/auto_examples/hetero_feature_union.html#example-hetero-feature-union-py (3认同)