Bagging与Boosting的联系与区别
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Bagging与Boosting的联系与区别相关的知识,希望对你有一定的参考价值。
参考技术A Bagging算法所利用的预测数据就是通过Bootstrap方法得到的,Bootstrap方法是非参数统计上的一种抽样方法,实质就是对观测数据进行抽样,通过新抽样样本对总体分布特征进行推断。例如我们熟知的随机森林算法中不同的分类回归树,所利用的数据集就是通过Boostrap方法重抽样得到的。而利用Boostrap方法所做的好处是避免了做交叉验证时的样本量少的问题。同时重抽样后的数据可以得到相较于原观测数据少的噪声点,所以更能获得好的分类器。Boostrap步骤:
当然Bootstrap方法适合于小样本,难以有效划分训练集和测试集时很有用,在做集成学习中,样本集往往通过Bootstrap方法来获取,倘若样本足够多,那么交叉验证会比Bootstrap更好。
在理解了Bootsrap抽样方法后,Bagging实际就是对重抽样的多个样本集,分别建立一个分类器,进行并行模型训练。由于每个分类器之间相互独立,所以Bagging与只训练一个弱分类器相比,复杂度是相同的,所以这是一个高效的集成算法!利用Bagging的好处是它能在提高准确率、稳定性的同时,通过降低结果的方差,避免过拟合的发生。并且由于利用的Boostrap方法,所以能减少噪音的影响,体现样本真实的分布情况。
Bagging的算法流程为:
通过这个流程可以看出,由于是投票选出最终的预测结果,从而可以获得很高的精度,降低泛化误差,但是弊端就是如果对于某一块,大多数分类器给出了一个错误分类,最终分类的结果也会错误。所以Bagging就没有考虑到对于分类器错分类,或者说性能差的地方做出调整。
那我们在什么时候会利用到Bagging呢? 学习算法不稳定的时候,例如神经网络、kNN算法、线性回归子集选取等,这些都是不稳定的(弱学习算法),如果利用Bagging,则可以增强原算法,倘若原算法本身就有很高的稳定性,使用Bagging可能会适得其反。
随机森林(Random Forest)就是一个很好的利用Bagging的模型,他采用的弱分类器是决策树算法,在此基础上,引入了一个随机属性选择,这使得每个分类器的差异度增加,进而提升集成后的模型泛化能力。这里不对RF展开叙述,读者可参看以下相关参考。
相关参考:
与Bagging一样,Boosting也是集成算法中重要的算法,他与Bagging不同的是,Bagging采取的是并行计算,而Boosting是串行计算,对多个模型预测结果相加得到最终的结果。
在之前我们也说过,Bagging没有考虑在基学习器性能差的地方做出调整,所以Boosting在整个运行机制上做出了改进,具体可描述为:先用基学习器在初始训练集中训练,再根据基学习器表现对预测错的样本赋予更大的权值,从而在后续的学习器训练中受到更多的关注。这样根据基学习器对样本分布做出调整后,再将其训练下一个基学习器,反复分布迭代,从而达到指定值。所以Boosting是基于权值的弱分类器集成!
Boosting的算法流程:
在Boosting的框架基础上,还提出了AdaBoost (Adaptive Boosting), GBDT(Gradient Boosting Decision Tree), XGBoost(eXtreme Gradient Boosting),lightGBM(Light Gradient Boosting Machine)等。其中最具代表性的算法是AdaBoost,结合Boosting的算法流程,Adaboost主要是通过对迭代后的分类器权值与分类器的线性组合作为最终的分类器。其中最关键的就是如何得到权值的更新公式,而这是通过最小化AdaBoost的基本分类器的损失函数得到的。
下面对权值的更新进行推导:
AdaBoost的算法流程:
AdaBoost系列主要解决了: 两类问题、多类单标签问题、多类多标签问题、大类单标签问题,回归问题等,并且在实现过程中简单高效,没有超参数调节,但是Adaboost对于噪音数据和异常数据十分敏感,这种异常样本在迭代中可能会获得较高的权重,影响预测结果。此外,当其中的基分类器是分类回归树时,此时就变成了提升树,这里不阐述。
相关参考:
Bagging和Boosting都是集成学习的两种主流方法,都是由弱分类器融合成强分类器。
Bagging和Boosting的概念与区别
参考技术A 随机森林属于集成学习(Ensemble Learning)中的bagging算法。在集成学习中,主要分为bagging算法和boosting算法。我们先看看这两种方法的特点和区别。Bagging(套袋法)
bagging的算法过程如下:
从原始样本集中使用Bootstraping方法随机抽取n个训练样本,共进行k轮抽取,得到k个训练集。(k个训练集之间相互独立,元素可以有重复)
对于k个训练集,我们训练k个模型(这k个模型可以根据具体问题而定,比如决策树,knn等)
对于分类问题:由投票表决产生分类结果;对于回归问题:由k个模型预测结果的均值作为最后预测结果。(所有模型的重要性相同)
Boosting(提升法)
boosting的算法过程如下:
对于训练集中的每个样本建立权值wi,表示对每个样本的关注度。当某个样本被误分类的概率很高时,需要加大对该样本的权值。
进行迭代的过程中,每一步迭代都是一个弱分类器。我们需要用某种策略将其组合,作为最终模型。(例如AdaBoost给每个弱分类器一个权值,将其线性组合最为最终分类器。误差越小的弱分类器,权值越大)
Bagging,Boosting的主要区别
样本选择上:Bagging采用的是Bootstrap随机有放回抽样;而Boosting每一轮的训练集是不变的,改变的只是每一个样本的权重。
样本权重:Bagging使用的是均匀取样,每个样本权重相等;Boosting根据错误率调整样本权重,错误率越大的样本权重越大。
预测函数:Bagging所有的预测函数的权重相等;Boosting中误差越小的预测函数其权重越大。
并行计算:Bagging各个预测函数可以并行生成;Boosting各个预测函数必须按顺序迭代生成。
下面是将决策树与这些算法框架进行结合所得到的新的算法:
1)Bagging + 决策树 = 随机森林
2)AdaBoost + 决策树 = 提升树
3)Gradient Boosting + 决策树 = GBDT
决策树
常用的决策树算法有ID3,C4.5,CART三种。3种算法的模型构建思想都十分类似,只是采用了不同的指标。决策树模型的构建过程大致如下:
ID3,C4.5决策树的生成
输入:训练集D,特征集A,阈值eps 输出:决策树T
若D中所有样本属于同一类Ck,则T为单节点树,将类Ck作为该结点的类标记,返回T
若A为空集,即没有特征作为划分依据,则T为单节点树,并将D中实例数最大的类Ck作为该结点的类标记,返回T
否则,计算A中各特征对D的信息增益(ID3)/信息增益比(C4.5),选择信息增益最大的特征Ag
若Ag的信息增益(比)小于阈值eps,则置T为单节点树,并将D中实例数最大的类Ck作为该结点的类标记,返回T
否则,依照特征Ag将D划分为若干非空子集Di,将Di中实例数最大的类作为标记,构建子节点,由结点及其子节点构成树T,返回T
对第i个子节点,以Di为训练集,以A-Ag为特征集,递归地调用1~5,得到子树Ti,返回Ti
CART决策树的生成
这里只简单介绍下CART与ID3和C4.5的区别。
CART树是二叉树,而ID3和C4.5可以是多叉树
CART在生成子树时,是选择一个特征一个取值作为切分点,生成两个子树
选择特征和切分点的依据是基尼指数,选择基尼指数最小的特征及切分点生成子树
决策树的剪枝
决策树的剪枝主要是为了预防过拟合,过程就不详细介绍了。
主要思路是从叶节点向上回溯,尝试对某个节点进行剪枝,比较剪枝前后的决策树的损失函数值。最后我们通过动态规划(树形dp,acmer应该懂)就可以得到全局最优的剪枝方案。
随机森林(Random Forests)
随机森林是一种重要的基于Bagging的集成学习方法,可以用来做分类、回归等问题。
如果用全样本去训练m棵决策树显然是不可取的,全样本训练忽视了局部样本的规律,对于模型的泛化能力是有害的
随机森林有许多优点:
具有极高的准确率
随机性的引入,使得随机森林不容易过拟合
随机性的引入,使得随机森林有很好的抗噪声能力
能处理很高维度的数据,并且不用做特征选择
既能处理离散型数据,也能处理连续型数据,数据集无需规范化
训练速度快,可以得到变量重要性排序
容易实现并行化
随机森林的缺点:
当随机森林中的决策树个数很多时,训练时需要的空间和时间会较大
随机森林模型还有许多不好解释的地方,有点算个黑盒模型
与上面介绍的Bagging过程相似,随机森林的构建过程大致如下:
从原始训练集中使用Bootstrapping方法随机有放回采样选出m个样本,共进行n_tree次采样,生成n_tree个训练集
对于n_tree个训练集,我们分别训练n_tree个决策树模型
对于单个决策树模型,假设训练样本特征的个数为n,那么每次分裂时根据信息增益/信息增益比/基尼指数选择最好的特征进行分裂
每棵树都一直这样分裂下去,直到该节点的所有训练样例都属于同一类。在决策树的分裂过程中不需要剪枝
将生成的多棵决策树组成随机森林。对于分类问题,按多棵树分类器投票决定最终分类结果;对于回归问题,由多棵树预测值的均值决定最终预测结果
以上是关于Bagging与Boosting的联系与区别的主要内容,如果未能解决你的问题,请参考以下文章
Logistic Regression 模型和 Ensemble 模型(Bagging 和 Boosting)之间没有区别