sfa*_*tor 9 python machine-learning scikit-learn ensemble-learning xgboost
我正在尝试使用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))
Run Code Online (Sandbox Code Playgroud)
XGBoost具有最高的准确度,所以我甚至尝试给它更多的重量无济于事.
我能做错什么?
VotingClassifiers并不总能保证具有更好的性能,尤其是在使用软校准时,如果校准基础模型不佳.
对于一个人为的例子,假设所有模型在错误时都是错误的(例如,对于不正确的类给出概率为0.99),但在它们是正确的时候只是略微正确(假设正确的概率为.51)类).此外,当'xgb'错误时,'rf'和'svc'总是正确的,反之亦然,每个分类器本身的准确度为50%.
由于您使用的是软投票,因此您实施的投票分类器的准确度为0%.原因如下:
| 归档时间: |
|
| 查看次数: |
1726 次 |
| 最近记录: |