You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何设置hard投票的VotingClassifier在不同权重下性能有差异?

VotingClassifier硬投票权重不同导致准确率差异的原因

测试sklearn的VotingClassifier时发现一个费解现象:准备了三个单独分类器,各自的测试集准确率分别为GaussianNB(0.795)、LogisticRegression(0.7925)、RandomForestClassifier(0.94)。随后构建了两个均设置voting="hard"的VotingClassifier,仅权重不同,本以为硬投票是多数投票,但两者准确率却有明显差异,这是为什么?

单独分类器定义:

gnb = GaussianNB() # 准确率 0.795
lr = LogisticRegression() # 准确率 0.7925
rfc = RandomForestClassifier() # 准确率 0.94

两个VotingClassifier对比代码:

vc_hard_equals = VotingClassifier(estimators=[
        ("NaiveBayes", gnb), 
        ("LogisticRegression", lr), 
        ("RandomForest", rfc)
    ], 
    voting="hard", 
    weights=(1, 1, 1), # 权重相等
    )
vc_hard_forest_priority = VotingClassifier(estimators=[
        ("NaiveBayes", gnb), 
        ("LogisticRegression", lr), 
        ("RandomForest", rfc)], 
    voting="hard", 
    weights=(1, 1, 3), # 提升RandomForest权重(最优模型)
    )

vc_hard_equals.fit(X_train, y_train)
vc_hard_forest_priority.fit(X_train, y_train)

print(vc_hard_equals.score(X_test, y_test)) # 0.832
print(vc_hard_forest_priority.score(X_test, y_test)) # 0.915

原因分析

硬投票(voting="hard")模式下,权重并不是简单的"一人一票",而是基于权重的加权投票机制,和传统的简单多数票决逻辑不同:

  • 当设置weights=(1,1,1)时,每个分类器的投票权重相等,最终类别由三个分类器中得票最多的类别决定(普通多数投票)。此时RF的优势被另外两个低准确率模型稀释,整体准确率介于三个模型之间。
  • 当设置weights=(1,1,3)时,RandomForest的投票相当于3票,另外两个模型各1票,总权重和为5。此时最终类别是所有分类器投票的类别中,加权得票总和最高的那个。

举个具体例子:假设某个样本,GNB和LR都预测类别A,RF预测类别B。权重相等时,A得2票、B得1票,最终预测A;而权重为(1,1,3)时,A的加权得票是1+1=2,B的加权得票是3,最终预测B。

由于RF本身的准确率远高于另外两个模型,提升它的权重后,投票结果会更多地偏向RF的正确预测,因此vc_hard_forest_priority的准确率会更接近RF的单独准确率(0.94),自然远高于权重相等的版本。

内容的提问来源于stack exchange,提问作者Krzysztof

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 04:48:22