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 时,二元分类中的预测标签是什么?
如果您查看BaggingClassifier
的predict
函数,您会注意到他们使用np.argmax
函数来查找最佳类。正如argmax
的doc 的#Notes 部分所述 -
"如果最大值出现多次,则返回第一次出现对应的索引"
所以0
是这种情况下的预测标签。
【讨论】:
谢谢,我还有一个问题。为什么我们应该使用默认的 bagging 分类器,而 SVM 是一种确定性方法?使用带有默认配置的 Bagging SVM(正如我在问题帖子中提到的)而不是使用不带 Bagging 的 SVM 有什么解释吗? 这应该早就问过了。 所以?有没有解释?它是否提高了模型的准确性或可靠性?还是使模型更通用或避免过度拟合训练数据集?以上是关于sklearn 中 BaggingClassifier 的默认配置与硬投票的区别的主要内容,如果未能解决你的问题,请参考以下文章
sklearn中决策树算法DesiciontTreeClassifier()调用以及sklearn自带的数据包sklearn.datasets.load_iris()的应用