我的 VotingClassifier 准确率为什么低于我的单一分类器?

2024-09-22 16:39:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试使用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拥有最高的精确度,所以我甚至尝试给它更多的权重,但没有效果。在

我会做错什么?在


Tags: 分类器randomscikitlearnlabelclfrfxgboost
1条回答
网友
1楼 · 发布于 2024-09-22 16:39:19

VotingClassifiers并不总是保证有更好的性能,特别是当你使用软投票时,如果你的基本模型校准不好。在

举一个人为的例子,假设所有的模型都是错误的(假设对于不正确的类,给出0.99的概率),但只有当它们正确时才稍微正确(比如,对正确的类给出0.51的概率)。此外,假设'rf'和'svc'在'xgb'错误时总是正确的,反之亦然,并且每个分类器本身的准确率为50%。在

由于您使用的是软投票,所以您实现的投票分类器的精确度为0%。原因如下:

  1. 案例1:xgb对。然后它给正确的类提供0.51的概率,并得到2的权重,分数为1.02。然而,其他模型都给出了0.99的概率,错误类的分数为1.98。该类由投票分类器选择。在
  2. 案例2:xgb错误。然后它给出了一个0.99的概率给不正确的类,权重为2,分数为1.98。另外两个模型给出的正确班级的综合得分为1.02。同样,分类器选择了错误的类。在

相关问题 更多 >