我正在使用Scikit-learn进行分类任务。我有一个数据集,其中每个观察都包含两个单独的文本字段。我想设置一个管道,其中每个文本字段通过其自己的 TfidfVectorizer 并行传递,并且 TfidfVectorizer 对象的输出传递给分类器。我的目标是能够使用 GridSearchCV 优化两个 TfidfVectorizer 对象的参数以及分类器的参数。
管道可能描述如下:
Text 1 -> TfidfVectorizer 1 --------|
+---> Classifier
Text 2 -> TfidfVectorizer 2 --------|
我了解如何在不使用管道的情况下执行此操作(只需创建到 TfidfVectorizer 对象并从那里工作),但是如何在管道中设置它?
感谢您的任何帮助,
抢。
使用 Pipeline
和 FeatureUnion
类。案例的代码如下所示:
pipeline = Pipeline([
('features', FeatureUnion([
('c1', Pipeline([
('text1', ExtractText1()),
('tf_idf1', TfidfVectorizer())
])),
('c2', Pipeline([
('text2', ExtractText2()),
('tf_idf2', TfidfVectorizer())
]))
])),
('classifier', MultinomialNB())
])
可以使用<estimator1>__<estimator2>__<parameter>
语法引用参数,对整个结构执行网格搜索。例如,features__c1__tf_idf1__min_df
引用图中TfidfVectorizer 1
的min_df
参数。