集成学习之bagging

本文介绍了集成学习中的bagging方法和投票法。投票法通过结合多个模型的预测结果,利用少数服从多数原则提高模型的鲁棒性,分为硬投票和软投票。在分类问题中,软投票通常比硬投票更准确。bagging通过自助采样创建多样性的基模型,降低模型的方差,适用于不剪枝的决策树等学习器。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

集成学习之bagging

投票法

在学习bagging之前,需要先介绍下投票法,它是集成学习中常用的技巧,可以帮助我们提高模型的泛化能力,减少模型的错误率。

投票法的具体流程

(a)基本思想

投票法的基本思路在于,一般情况下错误总是局部产生,因此融合多个结果可以减小误差。

例如为了确保发送数据的准确性,一个常用的纠错方法是重复多次发送数据,并以少数服从多数的方法确定正确的传输数据。

故投票法是一种遵循少数服从多数原则的集成学习模型,通过多个模型的集成降低方差,从而提高模型的鲁棒性。在理想情况下,投票法的预测效果应当优于任何一个基模型的预测效果。

(b)具体操作

投票法在回归模型与分类模型上均可使用:

  • 回归投票法:预测结果是所有模型预测结果的平均值。

  • 分类投票法:预测结果是所有模型中出现最多的预测结果。

分类投票法又可以被划分为硬投票与软投票:

  • 硬投票:预测结果是所有投票结果出现最多的类。

  • 软投票:预测结果是所有投票结果中概率加和最大的类。

软投票法与硬投票法可以得出完全不同的结论,相对于硬投票,软投票法考虑到了预测概率这一额外的信息,因此可以得出比硬投票法更加准确的预测结果。

因此对于分类问题中,硬投票与软投票的选择,一般有以下几个准则:

  • 当投票集合中使用的模型能预测出清晰的类别标签时,适合使用硬投票。

  • 当投票集合中使用的模型能预测类别的概率时,适合使用软投票。

  • 软投票同样可以用于那些本身并不预测类成员概率的模型,只要他们可以输出类似于概率的预测分数值(例如支持向量机、最近邻和决策树)。

投票法的适用情形

在投票法中,我们还需要考虑到不同的基模型可能产生的影响。理论上,基模型可以是任何已被训练好的模型。但在实际应用上,想要投票法产生较好的结果,需要满足两个条件:

  • 基模型之间的效果不能差别过大:当某个基模型相对于其他基模型效果过差时,该模型很可能成为噪声。

  • 基模型之间的同质性应该不太大:例如在基模型预测效果近似的情况下,基于树模型与线性模型的投票,往往优于两个树模型或两个线性模型。

投票法的局限性在于,它对所有模型的处理是一样的,这意味着所有模型对预测的贡献是一样的。如果一些模型在某些情况下很好,而在其他情况下很差,这是使用投票法时需要考虑到的一个问题。

投票法的代码实现

Sklearn 中提供了 VotingRegressorVotingClassifier 两个投票方法。

这两种模型的操作方式比较类似共同参数有:

  • estimators:以列表的形式输入基模型信息,列表中每个元组为(模型名称,模型类),需要保证每个模型必须拥有唯一的名称,在模型类中可以用Pipeline完成模型预处理。

  • weights:以数组的形式输入自定义的权重(默认为 None

  • n_jobs:并行处理数(默认为 None 代表1,-1为使用所有线程)

  • verbose:是否打印进度信息(默认为 False

VotingClassifier 独有的参数为:

  • voting:分类投票方式,可选 'hard''soft' ,默认为 'hard'

  • flatten_transform:是否进行 flatten 变换(仅在软投票时使用),默认为 True

下面开始演示投票法的使用,首先定义创建数据集的函数 get_dataset ,其使用 make_classification 创建一个含 1000 1000 1000 个样本, 20 20 20 个特征的随机数据集:

# 导入需要的第三方库
from sklearn.datasets import make_classification
from sklearn.ensemble import VotingClassifier
from sklearn.model_selection import RepeatedStratifiedKFold
from sklearn.model_selection import cross_val_score
from sklearn.neighbors import KNeighborsClassifier
import matplotlib.pyplot as plt

def get_dataset():
	"""创建随机数据集"""
    X, y = make_classification(n_samples=1000, n_features=20, n_informative=15, n_redundant=5
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值