将VotingClassifier与Sklearn管道中的其他分类器一起使用

时间:2018-05-04 19:05:42

标签: python machine-learning scikit-learn imblearn

我想在>>> li = [] >>> a.li = li >>> a['li'] is li True 中使用VotingClassifier,我在其中定义了一组分类器。

我从这个问题得到了一些直觉:Using VotingClassifier in Sklearn Pipeline来构建下面的代码,但在这个问题中,每个分类器都是在一个独立的Pipeline中定义的。我不想以这种方式使用它,我之前准备了一系列功能,并且在使用不同类别的多个管道中重复生成这些功能并不是一个好主意(耗时的过程)!

我怎么能实现这个目标?!

sklearn Pipeline

但是我收到了这个错误:

model = Pipeline([
        ('feat', FeatureUnion([
            ('tfidf', TfidfVectorizer(analyzer='char', ngram_range=(3, 5), min_df=0.01, lowercase=True, tokenizer=tokenizeTfidf)),    
        ])),


        ('pip1', Pipeline([('clf1', GradientBoostingClassifier(n_estimators=1000, random_state=7))])),
        ('pip2', Pipeline([('clf2', SVC())])),
        ('pip3', Pipeline([('clf3', RandomForestClassifier())])),
        ('clf', VotingClassifier(estimators=["pip1", "pip2", "pip3"]))
    ])

clf = model.fit(X_train, y_train)

1 个答案:

答案 0 :(得分:1)

我假设你想做这样的事情:

1)使用TfidfVectorizer将文本数据转换为tfidf 2)将转换后的数据发送给3个估计器(GradientBoostingClassifier,SVC,RandomForestClassifier),然后使用投票来获得预测。

如果是这种情况,这就是您所需要的。

model = Pipeline([
        ('feat', FeatureUnion([
            ('tfidf', TfidfVectorizer(analyzer='char',  
                                      ngram_range=(3, 5), 
                                      min_df=0.01, 
                                      lowercase=True, 
                                      tokenizer=tokenizeTfidf)),    
        ])),
        ('clf', VotingClassifier(estimators=[("pip1", GradientBoostingClassifier(n_estimators=1000, 
                                                                                 random_state=7)), 
                                             ("pip2", SVC()), 
                                             ("pip3", RandomForestClassifier())]))
    ])

此外,如果您只使用单个TfidfVectorizer而未将任何其他功能与其结合使用,则您甚至不需要FeatureUnion

model = Pipeline([
        ('tfidf', TfidfVectorizer(analyzer='char',  
                                  ngram_range=(3, 5), 
                                  min_df=0.01, 
                                  lowercase=True, 
                                  tokenizer=tokenizeTfidf)),    
        ('clf', VotingClassifier(estimators=[("pip1", GradientBoostingClassifier(n_estimators=1000, 
                                                                                 random_state=7)), 
                                             ("pip2", SVC()), 
                                             ("pip3", RandomForestClassifier())]))
    ])