我正在做一个文本分类任务(7000个文本由10个标签均匀分布)。通过探索 SVM 和逻辑回归
clf1 = svm.LinearSVC()
clf1.fit(X, y)
clf1.predict(X_test)
score1 = clf1.score(X_test,y_true)
clf2 = linear_model.LogisticRegression()
clf2.fit(X, y)
clf2.predict(X_test)
score2 = clf2.score(X_test,y_true)
我得到了两个精度,score1
和score2
我想我是否可以通过开发一个结合上述两个分类器的输出的集成系统来提高准确性。我自己学到了ensemble
的知识,我知道有bagging,boosting,and stacking
。但是,我不知道如何使用我的 SVM 和 Logistic 回归预测的分数 ensemble
.谁能给我一些想法或给我看一些示例代码?
您可以只乘概率,也可以使用其他组合规则。
为了以更通用的方式做到这一点(尝试几个规则)你可以使用酿造。
from brew.base import Ensemble
from brew.base import EnsembleClassifier
from brew.combination.combiner import Combiner
# create your Ensemble
clfs = [clf1, clf2]
ens = Ensemble(classifiers=clfs)
# Since you have only 2 classifiers 'majority_vote' is note an option,
# rule = ['mean', 'majority_vote', 'max', 'min', 'median']
comb = Combiner(rule='mean')
# now create your ensemble classifier
ensemble_clf = EnsembleClassifier(ensemble=ens, combiner=comb)
ensemble_clf.predict(X)
另外,请记住,分类器应该足够多样化,以给出良好的组合结果。
如果你的特征较少,我会说你应该看看一些动态分类器/集成选择(也在酿造中提供),但由于你可能有很多特征,欧几里得距离可能没有意义来获得每个分类器的能力区域。最好的办法是根据混淆矩阵手动检查每个分类器倾向于获得哪种标签。