集成学习:通过构建并结合多个学习器来完成学习任务
集成学习方法大致可以分为两大类:a.个体学习器间存在强依赖关系,必须串行生成序列化方法——代表:Boosting;b.个体学习器间不存在强依赖关系,可同时生成的并行化方法——代表:Bagging和”随机森林“
一、Boosting
Boosting的工作机制类似:先从初始训练集训练出一个基学习器(算法+数据),再根据基学习器的表现对训练样本分布进行调整,使得先前基学习器做错的训练样本在后续受到更多关注,然后基于调整后的样本分布来训练下一个基学习器;如此重复进行,直至基学习器数目达到事先指定的值T,最终将这T个基学习器进行加权结合。
二:、AdaBoost算法理解
Adaboost算法的步骤代码描述:
二、提升树
提升方法实际采用加法模型(即基函数的线性组合)与前向分布算法,以决策树为基函数(基函数+数据训练=基学习器)的提升方法称为提升树。
2.1 提升树的原理
关于提升树的权值问题:参考:https://blog.csdn.net/qq_41393570/article/details/81234665
2.1 算法过程
三、梯度提升(Gradient Boosting)
3.1 梯度提升的概念
提升树利用加法模型与前向分布算法实现的优化过程,当损失函数是平方损失和指数损失函数时,每一步优化是很简单的,但对一般损失函数而言,往往每一步优化并不那么容易。针对这一问题,Freidman提出了梯度提升(gradient boosting)算法,这是利用最速下降法的近似方法,其关键是利用损失函数的负梯度在当前模型的值
作为回归问题提升树算法中的残差的近似值,拟合一个回归树。(对于平方损失函数,他就是通常所说的残差;对于一般损失函数,它就是残差的近似值)
3.2 GBDT的思想的通俗的例子解释:
假如有个人30岁,我们首先用20岁去拟合,发现损失有10岁,这时我们用6岁去拟合剩下的损失,发现差距还有4岁,第三轮我们用3岁拟合剩下的差距,差距就只有一岁了。如果我们的迭代轮数还没有完,可以继续迭代下面,每一轮迭代,拟合的岁数误差都会减小。
3.3 GBDT(Gradient Boosting Decision Tree) 回归算法
算法第1步初始化,估计使损失函数极小化的常数值,它是只有一个根节点的树,第2(a)步计算损失函数的负梯度在当前模型的值,将它作为残差的估计,对于平方损失函数,它就是通常所说的残差;对于一般损失函数,它就是残差的近似值,第2(b)步估计回归树叶节点区域,以拟合残差的近似值,第2(c)步利用线性搜索估计叶节点区域的值,使损失函数极小化。第2(d)步更新回归树。第3步得到输出的最终模型f(x)。
3.4 GBDT分类算法
这里我们再看看GBDT分类算法,GBDT的分类算法从思想上和GBDT的回归算法没有区别,但是由于样本输出不是连续的值,而是离散的类别,导致我们无法直接从输出类别去拟合类别输出的误差。
为了解决这个问题,主要有两个方法,一个是用指数损失函数,此时GBDT退化为Adaboost算法。另一种方法是用类似于逻辑回归的对数似然损失函数的方法。也就是说,我们用的是类别的预测概率值和真实概率值的差来拟合损失。