机器学习----集成学习(boosting,bagging,Adaboos,GBDT,XGBoost)

参考链接:https://blog.csdn.net/v_JULY_v/article/details/81410574

前言

集成学习(ensemble learning): 通过构建并结合多个学习器来完成学习任务,即先产生一组个体学习器,再用某种策略给他们结合起来,个体学习器由一个现有的学习算法从训练数据中产生,同时要具备一定的准确性,不能太坏,要有多样性,学习器之间要有差异。集成后的学习器会显著增加泛化性能。

但是多样性和准确性是矛盾的,准确性上去后多样性就要被牺牲,如何产生好而不同的学习器是集成学习的重点。

两大分支:Boosting和Bagging,前者通过个体学习器之间强大的依赖性,串行生成序列化;后者个体学习器之间不存在强大的依赖性,生成并行的方法。

一、Boosting

一组将弱学习器提升为强学习器的方法:增加错误分类样本的权重,减少正确分类样本的权重,使算法更加关注错误样本。

工作机制:
是首先从训练集用初始权重训练出一个弱学习器1,根据弱学习的学习误差率表现来更新训练样本的权重,使得之前弱学习器1学习误差率高的训练样本点的权重变高,使得这些误差率高的点在后面的弱学习器2中得到更多的重视。然后基于调整权重后的训练集来训练弱学习器2.,如此重复进行,直到弱学习器数达到事先指定的数目T,最终将这T个弱学习器通过集合策略进行整合,得到最终的强学习器。

(1)Adaboost

AdaBoost 是Boosting中的经典算法,其主要应用于二分类问题。

Adaboost 算法采用调整样本权重的方式来对样本分布进行调整,即提高前一轮个体学习器错误分类的样本的权重,而降低那些正确分类的样本的权重,这样就能使得错误分类的样本可以受到更多的关注,从而在下一轮中可以正确分类,使得分类问题被一系列的弱分类器“分而治之”。对于组合方式,AdaBoost采用加权多数表决的方法,加法模型就是说强分类器由一系列弱分类器线性相加而成。具体地,加大分类误差率小的若分类器的权值,减小分类误差率大的若分类器的权值,从而调整他们在表决中的作用。AdaBoost算法是模型为加法模型、损失函数为指数函数、学习算法为前向分步算法时的二分类算法。

(2)GBDT(Gradient Boosting Decision Tree)梯度提升树

GBDT 是多棵树的输出预测值的累加,GBDT的树都是 回归树 而不是分类树。

梯度提升树是为了解决提升树在损失函数为一般损失函数时优化算法,称为梯度提升算法,其利用最速下降法的近似方法,关键是利用损失函数的负梯度在当前模型的值。
具体做法是先初始化loss参数,然后计算损失函数,对其求导,得到的导数值来拟合一个回归树,得到节点区域。将损失函数的负梯度作为残差(二阶泰勒展开),

二、bagging和随机森林

(1)Bagging
Bagging的算法原理和 boosting不同,它的弱学习器之间没有依赖关系,可以并行生成。

工作机制:

bagging的个体弱学习器的训练集是通过随机采样得到的。通过T次的随机采样,我们就可以得到T个采样集,对于这T个采样集,我们可以分别独立的训练出T个弱学习器,再对这T个弱学习器通过集合策略来得到最终的强学习器。
这里一般采用的是自助采样法(Bootstap sampling),即对于m个样本的原始训练集,我们每次先随机采集一个样本放入采样集,接着把该样本放回,也就是说下次采样时该样本仍有可能被采集到,这样采集m次,最终可以得到m个样本的采样集,由于是随机采样,这样每次的采样集是和原始训练集不同的,和其他采样集也是不同的,这样得到多个不同的弱学习器。
训练一个 Bagging集成与直接使用基分类器算法训练一个学习器的复杂度同阶,说明Bagging是一个高效的集成学习算法。

(2)随机森林(Random Forest,简称RF)

随机森林是bagging的扩展体。RF在以决策树为基学习器构建Bagging集成的基础上,进一步在决策树的训练过程中引入了随机属性选择,生成个体学习器的过程中不仅有样本扰动,还加入了属性扰动。具体地,传统决策树在选择划分属性时是在当前结点的属性集合(假定有d个属性)中选择一个最优属性,而在RF上,对基决策树的每个结点,先从该结点的属性集中随机选择其中的k个属性组成属性集,然后从该属性集中选择最优的划分属性,一般情况下,推荐k=log2d。

随机森林的优势:

1、能够处理很高维度的数据,并且不用做特征选择;
2、在训练完成后,可以给出哪些属性比较重要;
3、容易做成并行化方法,速度快;
4、可以进行可视化展示,便于分析。

随机森林和Bagging比较:

1、两者的收敛性相似,但RF的起始性能相对较差,特别只有一个基学习器时。随着基学习器数量的增加,随机森林通常会收敛到更低的泛化误差。
2、随机森林的训练效率常优于Bagging,因为Bagging是“确定型”决策树,而随机森林使用“随机型”决策树。

三、XGBoost

XGBoost(eXtreme Gradient Boosting),一种tree boosting的可扩展机器学习系统,由很多CART树集成,这个系统可以作为开源的软件包使用。GBDT的优秀版本,属于boosting方法。

CART树(Classification And Regression Tree,分类树和回归树的统称)CART用基尼指数,基尼指数越小,数据集的纯度越高;
1、分类树:样本输出(即响应值)是类的形式,比如判断这个药是真的还是假的,周末去看电影还是不去。分类的目标是根据已知样本的某些特征,判断一个新的样本属于哪种已知的样本类,它的结果是离散值。
ID3信息增益:在这里插入图片描述
C4.5用增益率

2、回归树的样本输出是数值的形式,比如给某人发放房屋贷款的数额就是具体的数值,预测癌症的概率。回归的结果是连续的值。回归树是假设树为二叉树,通过不断将特征进行分裂。比如当前树结点是基于第j个特征值进行分裂的,设该特征值小于s的样本划分为左子树,大于s的样本划分为右子树,本质是在该特征维度对样本空间进行划分。

目标函数:在这里插入图片描述
当我们为了求解最优的切分特征j和最优的切分点s,就转化为求解这么一个目标函数:在这里插入图片描述
只要遍历所有特征的的所有切分点,就能找到最优的切分特征和切分点。最终得到一棵回归树。

目标函数推导:
在这里插入图片描述
带入正则化项:

在这里插入图片描述
3、树怎么构造的:
1)枚举所有不同树结构的贪心法
现在的情况是只要知道树的结构,就能得到一个该结构下的最好分数,那如何确定树的结构呢?
一个想当然的方法是:不断地枚举不同树的结构,然后利用打分函数来寻找出一个最优结构的树,接着加入到模型中,不断重复这样的操作。而再一想,你会意识到要枚举的状态太多了,基本属于无穷种,那咋办呢?
我们试下贪心法,从树深度0开始,每一节点都遍历所有的特征,比如年龄、性别等等,然后对于某个特征,先按照该特征里的值进行排序,然后线性扫描该特征进而确定最好的分割点,最后对所有特征进行分割后,我们选择所谓的增益Gain最高的那个特征,而Gain如何计算呢?
在这里插入图片描述
(2)近似算法
主要针对数据太大,不能直接进行计算。
当引入的分裂带来的增益小于设定阀值的时候,我们可以忽略掉这个分裂,所以并不是每一次分裂loss function整体都会增加的,有点预剪枝的意思,阈值参数为(即正则项里叶子节点数T的系数);
当树达到最大深度时则停止建立决策树,设置一个超参数max_depth,避免树太深导致学习局部样本,从而过拟合;
当样本权重和小于设定阈值时则停止建树。什么意思呢,即涉及到一个超参数-最小的样本权重和min_child_weight,和GBM的 min_child_leaf 参数类似,但不完全一样。大意就是一个叶子节点样本太少了,也终止同样是防止过拟合;

原文链接:https://blog.csdn.net/v_JULY_v/article/details/81410574

猜你喜欢

转载自blog.csdn.net/PETERPARKERRR/article/details/122060433