sklearn 中 BaggingClassifier 的默认配置与硬投票的区别

Posted

技术标签:

【中文标题】sklearn 中 BaggingClassifier 的默认配置与硬投票的区别【英文标题】:Differences between default config of BaggingClassifier in sklearn and hard voting 【发布时间】:2019-12-31 17:29:30 【问题描述】:

我正在将 Bagging 分类器用于使用 sklearn 的 SVM 分类方法。

为了运行代码,我使用的是 sklearn 提供的默认配置:

classifier = BaggingClassifier(svm.SVC(gamma="scale"))

所以属性是:

BaggingClassifier(base_estimator=svm, n_estimators=10, max_samples=1.0, max_features=1.0, bootstrap=True, bootstrap_features=False, oob_score=False, warm_start=False, n_jobs=None, random_state=None, verbose=0)

很明显,这十个估计器中的每一个都抽取了所有样本和特征。 那么,我们只是训练了 10 个相似的并行模型吗?训练 bagging 模型后,它如何预测新的测试查询?通过在所有这些相同的分类器中投票?当一半的估计器预测为 0 而一半的估计器预测为 1 时,二元分类中的预测标签是多少?

【问题讨论】:

【参考方案1】:

那么,我们只是训练了 10 个相似的并行模型吗?

没有。 bootstrap=True 意味着我们为每个估计器随机抽取样本替换。每个估计器中的样本数量相同,max_samples=1.0 确保该数量等于原始数据集大小。但由于独立绘制有放回导致的重复和部分样本缺失,最终发送到每个估计器的数据集是完全不同的。

在训练 bagging 模型之后,它如何预测新的测试查询?通过在所有这些相同的分类器中投票?

如果基本估计器支持predict_proba 方法,则选择所有估计器中概率总和最高的类。否则就是多数投票。

当一半的估计器预测 0 而一半的估计器预测 1 时,二元分类中的预测标签是什么?

如果您查看BaggingClassifierpredict 函数,您会注意到他们使用np.argmax 函数来查找最佳类。正如argmax 的doc 的#Notes 部分所述 -

"如果最大值出现多次,则返回第一次出现对应的索引"

所以0 是这种情况下的预测标签。

【讨论】:

谢谢,我还有一个问题。为什么我们应该使用默认的 bagging 分类器,而 SVM 是一种确定性方法?使用带有默认配置的 Bagging SVM(正如我在问题帖子中提到的)而不是使用不带 Bagging 的 SVM 有什么解释吗? 这应该早就问过了。 所以?有没有解释?它是否提高了模型的准确性或可靠性?还是使模型更通用或避免过度拟合训练数据集?

以上是关于sklearn 中 BaggingClassifier 的默认配置与硬投票的区别的主要内容,如果未能解决你的问题,请参考以下文章

sklearn中SVM的实现

sklearn中决策树算法DesiciontTreeClassifier()调用以及sklearn自带的数据包sklearn.datasets.load_iris()的应用

sklearn:在 RandomizedSearchCV 中使用管道?

Sklearn库

sklearn:文本分类交叉验证中的向量化

sklearn 中处理网格搜索组合的顺序是啥?