为啥我的 VotingClassifier 准确度低于我的个人分类器?

Posted

技术标签:

【中文标题】为啥我的 VotingClassifier 准确度低于我的个人分类器?【英文标题】:Why is my VotingClassifier accuracy less than my individual classifier?为什么我的 VotingClassifier 准确度低于我的个人分类器? 【发布时间】:2017-02-04 20:37:51 【问题描述】:

我正在尝试使用 scikit-learn 中的 VotingClassifier() 创建三个分类器(随机森林、支持向量机和 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 具有最高的准确度,所以我什至尝试给它更多的权重,但无济于事。

我做错了什么?

【问题讨论】:

【参考方案1】:

VotingClassifier 并不总能保证具有更好的性能,尤其是在您使用校准不佳的基本模型时使用软投票时。

举一个人为的例子,假设所有模型在错误时都确实是错误的(例如给出不正确类别的概率为 0.99),但在正确时仅略微正确(例如给出概率为 0.51对于正确的类)。此外,当“xgb”错误时,说“rf”和“svc”总是正确的,反之亦然,每个分类器本身的准确度为 50%。

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

    案例 1:“xgb”正确。然后它给出正确类别的概率为 0.51,权重为 2,得分为 1.02。然而,对于 1.98 的分数,其他模型每个给出的错误类别的概率为 0.99。该类由您的投票分类器选择。 案例 2:“xgb”错误。然后它给出了 0.99 的概率给不正确的类别,权重为 2,得分为 1.98。其他两个模型对正确类别的综合得分为 1.02。同样,您的分类器选择了错误的类。

【讨论】:

以上是关于为啥我的 VotingClassifier 准确度低于我的个人分类器?的主要内容,如果未能解决你的问题,请参考以下文章

sklearn集成学习之VotingClassifier

硬投票分类器(VotingClassifier)构建实战

为啥我的 cross_val_score() 准确度很高,但我的测试准确度却很低?

带有 VotingClassifier 的类型错误

scikit-learn 的 VotingClassifier 中使用的分类器是啥?

为啥我的逻辑回归模型准确率达到 100%?