Sklearn:如何为两个二元分类器制作一个集合?

时间:2015-06-18 15:19:36

标签: python scikit-learn classification

我有两个多媒体数据集分类器。一个用于视觉材料,一个用于文本材料。我想结合这些分类器的预测来做出最终预测。我一直在阅读关于装袋,提升和叠加合奏的内容,所有这些看起来都很有用,我想尝试一下。但是,我似乎只能为我的具体问题找到相当理论的例子,没有足够的具体内容让我理解如何实际实现它(在python中使用scikit-learn)。我的两个分类器都使用10 KFold CV和SVM分类。两者都输出带有预测的n_samples = 1000列表(1或0)。此外,我让它们都生成了预测所依据的概率列表,如下所示:

 [[ 0.96761819  0.03238181]
 [ 0.96761819  0.03238181]
  ....
 [ 0.96761819  0.03238181]
 [ 0.96761819  0.03238181]]

我如何将这些组合在一起。我应该用什么作为输入?我已经尝试水平连接标签预测并将它们作为特征输入,但没有运气(概率相同)。

3 个答案:

答案 0 :(得分:4)

如果您正在寻找严格的组合,我建议使用brew,因为它建立在sklearn之上(意味着您可以使用您的sklearn分类器),并且,上次我检查时,sklearn对于创建合奏(Bagging,AdaBoost,RandomForest ......),但为您自己的自定义合奏(例如混合合奏)提供的组合规则并不多。

https://github.com/viisar/brew

from brew.base import Ensemble
from brew.base import EnsembleClassifier
from brew.combination.combiner import Combiner

# create your Ensemble
clfs = your_list_of_classifiers # [clf1, clf2]
ens = Ensemble(classifiers = clfs)

# create your Combiner
# the rules can be 'majority_vote', 'max', 'min', 'mean' or 'median'
comb = Combiner(rule='mean')

# now create your ensemble classifier
ensemble_clf = EnsembleClassifier(ensemble=ens, combiner=comb)
ensemble_clf.predict(X)

答案 1 :(得分:0)

这完全取决于你想要实现的整体方法。您是否看过sklearn-ensemble文档?

http://scikit-learn.org/stable/modules/classes.html#module-sklearn.ensemble

答案 2 :(得分:-3)

有一个名为' VotingClassifier'在sklearn.ensemble中,它可用于组合多个分类器,预测标签将基于来自登记分类器的投票。这是一个例子: