简述bagging算法的工作原理,bagging算法python实现

  简述bagging算法的工作原理,bagging算法python实现

  bagging原理与投票法的区别在于,Bagging不仅整合了模型的最终预测结果,还采用一定的策略来影响基模型的训练,保证基模型能够服从一定的假设。上一章我们提到希望模型之间有很大的差异,但实际中模型往往是同质的,所以一个简单的思路就是通过不同的抽样来增加模型的差异。

  Bagging的核心在于bootstrap的概念,即从有回报的数据集中抽样,即同一个样本可能被抽样多次。自助抽样的一个小例子是,我们想估计全国所有人口的平均年龄,所以可以从全国所有人口中随机选取不同的集合(这些集合可能有交集),计算每个集合的平均值,然后取所有平均值的平均值作为估计值。

  首先我们随机取一个样本放入样本集,然后放回初始数据集,重复采样k次。最后可以得到一个大小为k的样本集,同理可以用k个样本对t个样本集进行采样,然后基于每个样本集训练一个基础学习器,再将这些基础学习器进行组合。这是装袋的基本流程。

  回归问题的预测是通过平均预测来实现的。分类问题的预测是通过对预测采取多数票来进行的。Bagging方法之所以有效,是因为每个模型都拟合在略有不同的训练数据集上,使得每个基模型略有不同,使得每个基模型的训练能力略有不同。

  Bagging也是一种减少方差的技术,所以它的效果在容易被样本干扰的学习器上更明显,比如不需要剪枝的决策树和神经网络。在实际使用中,柱采样装袋技术往往对高维小样本有神奇的效果。

  Bagging的偏差方差我们常说集成学习中的基础模型是弱模型。一般来说,弱模型是偏差大(训练集中准确率低)、方差小(防止过拟合能力强)的模型,但集成学习框架中的基础模型并不都是弱模型。装袋堆码中的基本模型是强模型(低偏差、高方差),Boosting中的基本模型是弱模型(高偏差、低方差)。

  Bagging对样本进行重采样,为每个重采样的子样本集训练一个模型,最后进行平均。由于子样本集和同一模型的相似性,每个模型的偏倚和方差大致相等(实际上每个模型的分布大致相同,但不是独立的)。

  案例分析Sklearn为我们提供了两种打包方法的API,BaggingRegressor和BaggingClassifier。这里我们通过一个完整的例子来演示Bagging在分类中的具体应用。这里两种方法的默认基础模型是树模型。

  这里的树模型一般指的是决策树,是一种树形结构。树的每个非叶节点代表对样本某个特征的判断,节点下的分支代表样本的划分。建立决策树的过程就是一个不断划分数据的过程。在每次划分时,首先要选择用于划分的特征,然后确定划分方案(类别/阈值)。我们希望通过划分,决策树的分支节点所包含的样本的“纯度”能够尽可能的高。节点划分过程中使用的指标主要是信息增益和GINI系数。

  信息增益衡量分割前后信息不确定性的降低。信息不确定性一般用信息熵来度量,其计算方法是:

  其中I代表样本的标签,P代表这类样本出现的概率。划分样本后,我们计算样本的条件熵:

  其中x表示用于分区的特性的值。信息增益被定义为信息熵和条件熵之差:

  信息增益IG越大,数据除以该特征得到的信息变化越大,子节点样本的“纯度”越高。

  同样,我们也可以用基尼指数来衡量不纯的数据,计算方法如下:

  当我们分割样本时,计算分割后的基尼指数:

  一般来说,我们选择的是除法后基尼指数最小的特征(注意这里是直接根据基尼指数判断的,不是它的变化量)。下面给出了一个决策树的例子。我们要训练一个模型,根据天气、温度、风力来判断是否打网球。

  首先,通过计算信息增益或基尼指数,我们确定首先要根据天气情况对样本进行划分,然后对于每个分支,继续考虑除天气以外的其他特征,直到样本的类别完全分离,所有特征都被使用,或者达到树的最大深度。

  数据准备我们创建一个随机分类的数据集,包含1000个样本的20维特征:

  #测试分类数据集from sklearn.datasets导入make _ classification # define datasetX,y=make _ classification(N _ samples=1000,n_features=20,N _ informative=15,n _ redundant=5,random _ state=5) #汇总数据集print (x. shape,y. shape)评估模型我们将使用重复层次k-fold交叉验证对模型进行评估,重复3次,每次10次。我们将评估该模型在所有重复交叉验证中的表现的平均值和标准差。

  #评估用于分类的bagging算法from numpy import means from numpy import STD from sk learn . datasets import make _ classification from sk learn。model_selection导入cross _ val _ score from sk learn . model _ selection导入RepeatedStratifiedKFold from sk learn . ensemble导入bagging classifier # define datasetX,y=make _ classification(n _ samples=1000,n_features=20,n _ informative=15,n_redundant=5,random _ state=5)# define model=bagging classifier()# evaluate model cv=RepeatedStratifiedKFold(n _ splits=10,n_repeats=3,random _ state=1)n _ SCO

  为什么Datawhale综合学习项目address说bagging是减少方差,而boosting是减少偏倚?-过度拟合的答案。-知乎

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: