我有两个多媒体数据集分类器。一个用于视觉材料,一个用于文本材料。我想结合这些分类器的预测来做出最终预测。我一直在阅读有关装袋,增强和堆叠合奏的信息,所有这些似乎都很有用,我想尝试一下。然而,我似乎只能为我的特定问题找到相当理论的例子,没有什么具体到足以让我理解如何实际实现它(在带有scikit-learn的python中)。我的两个分类器都使用 10 KFold CV 和 SVM 分类。两者都输出带有预测(1 或 0)的n_samples = 1000
列表。此外,我让它们都生成了预测所基于的概率列表,如下所示:
[[ 0.96761819 0.03238181]
[ 0.96761819 0.03238181]
....
[ 0.96761819 0.03238181]
[ 0.96761819 0.03238181]]
我将如何将它们组合成一个合奏。我应该使用什么作为输入?我尝试水平连接标签预测并将它们作为特征输入,但没有运气(概率相同)。
如果你正在寻找严格的组合,我建议使用 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)
这完全取决于您要实现的集成方法。你看过sklearn-ensemble
文档吗?
http://scikit-learn.org/stable/modules/classes.html#module-sklearn.ensemble
sklearn.ensemble 中有一个名为"VotingClassifier"的分类器,可用于对多个分类器进行分类,预测的标签将基于登记分类器的投票。下面是示例: