我尝试使用scikit learn中的VotingClassifier()创建三个分类器(Random Forest、支持向量机和XGBoost)的集成。然而,我发现整体的精度实际上不是增加而是下降了。我不明白为什么。在
代码如下:
from sklearn.ensemble import VotingClassifier
eclf = VotingClassifier(estimators=[('rf', rf_optimized), ('svc', svc_optimized), ('xgb', xgb_optimized)],
voting='soft', weights=[1,1,2])
for clf, label in zip([rf, svc_optimized, xgb_optimized, eclf], ['Random Forest', 'Support Vector Machine', 'XGBoost', 'Ensemble']):
scores = cross_val_score(clf, X, y, cv=10, scoring='accuracy')
print("Accuracy: %0.3f (+/- %0.3f) [%s]" % (scores.mean(), scores.std(), label))
XGBoost拥有最高的精确度,所以我甚至尝试给它更多的权重,但没有效果。在
我会做错什么?在
VotingClassifiers并不总是保证有更好的性能,特别是当你使用软投票时,如果你的基本模型校准不好。在
举一个人为的例子,假设所有的模型都是错误的(假设对于不正确的类,给出0.99的概率),但只有当它们正确时才稍微正确(比如,对正确的类给出0.51的概率)。此外,假设'rf'和'svc'在'xgb'错误时总是正确的,反之亦然,并且每个分类器本身的准确率为50%。在
由于您使用的是软投票,所以您实现的投票分类器的精确度为0%。原因如下:
相关问题 更多 >
编程相关推荐