最直白的理解:人多力量大
常见的集成学习有:
Bagging:训练多个分类器取平均——用于减少方差
Boosting: 从弱分类器开始加强,新分类器一定更强——用于减少偏差
Stacking:聚合多个分类和回归模型——用于提升预测结果
boosting算法是一族可将弱分类器提升为强分类器的算法。算法的工作机制类似:先从初始训练集训练出一个基分类器,再根据基学习器的表现对训练样本分布进行调整,使得先前基学习器分错的样本在后续受到更多的关注,然后基于整理后的样本分布来训练下一个基学习器;反复进行,直至基学习器的数目达到事先指定的值T,最终将这T个基学习器进行加权结合。
Boosting算法包括:Adaboost、GB、GBDT与XGBoost,其中最出名的就是Adaboost
设训练数据集T={(x1,y1), (x2,y2)…(xN,yN)}
初始化训练数据的权值分布
使用具有权值分布Dm的训练数据集学习,得到基本分类器Gm
计算Gm(x)在训练数据集上的分类误差率
计算Gm(x)的系数
更新训练数据集的权值分布
这里,Zm是规范化因子,它的目的仅仅是使Dm+1成为一个概率分布
构建基本分类器的线性组合
得到最终分类器
看不懂以上公式也没关系,下面将举一个例子:
如果想看该例子(adaboost)的程序,可以点这里
给定下列训练样本,试用AdaBoost算法学习一个强分类器。
初始化训练数据的权值分布:W1i= 0.1
第一个m=1
在权值分布为D1的训练数据上,阈值v取2.5时误差率最低,故基本分类器为:
G1(x)在训练数据集上的误差率e1=P(G1(xi)≠yi) =0.3
计算G1的系数:
f1(x)=0.4236*G1(x)
分类器sign(f1(x))在训练数据集上有3个误分类点
更新训练数据的权值分布:
D2=(0.0715, 0.0715, 0.0715, 0.0715, 0.0715, 0.0715,0.1666, 0.1666, 0.1666, 0.0715)
第二个m=2
在权值分布为D2的训练数据上,阈值v取8.5时误差率最低,故基本分类器为:
G2(x)在训练数据集上的误差率e2=P(G2(xi)≠yi) = 0.2143(0.0715*3)
计算G2的系数:
更新训练数据的权值分布:
D3=(0.0455, 0.0455, 0.0455, 0.1667, 0.1667, 0.01667,0.1060, 0.1060, 0.1060, 0.0455)
f2(x)=0.4236G1(x) + 0.6496G2(x)
分类器sign(f2(x))在训练数据集上有3个误分类点
第三个m=3
在权值分布为D3的训练数据上,阈值v取5.5时误差率最低,故基本分类器为:
G3(x)在训练数据集上的误差率e3=P(G3(xi)≠yi) = 0.1820(0.0455*4)
计算G3的系数:
更新训练数据的权值分布:
D4=(0.125, 0.125, 0.125, 0.102, 0.102, 0.102, 0.065,0.065, 0.065, 0.125)
f3(x)=0.4236G1(x) + 0.6496G2(x)+0.7514G3(x)
分类器sign(f3(x))在训练数据集上有0个误分类点
提升树是以分类树或者回归树为基本分类器的提升方法,他们根据分类问题不同称为二叉分类树或者二叉回归树,采用加法模型(基函数的线性组合)与前向分布算法。提升树被认为是统计学习中性能最好的方法之一。
当前的基决策树表示
设x为输入空间(输入样本),y为输出空间,如果将输入空间x划为j个不相交的区域R1,R2…,每个区域上有确定输出的常量cj(每一个x都只有唯一一个输出的值),那么树可以表示:
当前决策树的表示
提升树的思想是迭代生多个(M个)弱的模型,当前模型fm(x)的生成基于前面学习模型的fm-1(x):
这里的主要问题就是如果确定当前基决策树就是最优的决策树啦,只有基决策树最优,才能达到当前的决策树最优,所以问题转化为:
提升树算法的不同主要是在于使用的损失函数不同:平方误差损失函数的回归问题,指数损失函数的分类问题,以及一般损失函数的一般决策问题。
以下都是回归问题的提升树
同样将问题转化为求θ,θ就是最优的划分点
当采用平方误差求损失时L(y,f(x))=(y-f(x))2,其损失变为:
r就表示当前模型的残差,就是正确的结果减去预测结果的值
算法步骤:
训练数据集(x,y)
(1) 初始化f0(×)=0
(2)对m=1,2,3…M
(a)计算残差r
(b)拟合残差rmi学习一个回归树,得到基决策树T
©更新fm(x)=fm-1(x)+T
(3)得到回归问题提升树
总结一下呢就是先在正确的结果上求出第一个最优划分的决策树,用正确的结果减去预测的结果得到残差,然后再在残差的结果上求下一棵决策树,以此类推。
例子:
学习这个回归问题的提升树模型,考虑只用树桩作为基函数
第一个基函数T1:
最开始的模型残差就是yi
首先基于回归问题,先求出所有的候选点,这些都是θ的候选值,记为s:
1.5,2.5,3.5,4.5,5.5,6.5,7.5,8.5,9.5
将候选点左边的记为R1,候选点右边的记为R2,其中:
那么可以将回归树T转化为整体的loss最小:
那么上面的公式就是要求的最优的C1和C2值
求导数,约掉1/2,得到最优的C1,C2做法类似
依次遍历前面的候选点,当s=1.5,R1={1},R2={2,3,…10},C1=5.56,C2=7.50
得到误差
将所有点求出误差:
由表中可知:当s=6.5时m(s)值最小,此时c1=6.24,c2=8.91,第一课回归树为
残差r=yi-f1(xi),求的残差为:
所以用f1拟合的训练数据平方误差损失为1.93,θ=6.5
第二个基函数T2
T2与T1一样,只是拟合的数据是上面的残差表,得到T2和f2
用f2拟合数据的平方损失误差为
继而求得
用f6拟合的训练数据的平方损失误差是0.17
这时候已经满足误差要求,那么f(x)=f6(xi)就是所求的提升树
Xgboost是GB算法的高效实现,xgboost中的基学习器除了可以是CART(gbtree)也可以是线性分类器(gblinear)。xgboost在目标函数中显示的加上了正则化项,基学习为CART时,正则化项与树的叶子节点的数量T和叶子节点的值有关。
目标函数公式:
根据泰勒公式:
得到一阶导和二阶导:
带入泰勒公式:
以下公式是目标函数的计算
1、Adaboost
AdaBoost开始时所有样本的权重相同,训练得到第一个基分类器。从第二轮开始,Adaboost用错分数据点来识别问题,通过调整错分数据点的权重来改进模型。
2、GB
Gradient Boost每一次的计算是为了减少上一次的残差(residual),而为了消除残差,因此在残差减少的梯度(Gradient)方向上建立一个新的模型。在GB中每个新的模型的建立是为了使得之前模型的残差往梯度方向减少。
3、GBDT
GBDT即梯度提升树,是GB和DT的结合。这里的决策树是回归树,GBDT中的决策树是个弱模型,深度较小一般不会超过5,叶子节点的数量也不会超过10,对于生成的每棵决策树乘上比较小的缩减系数(学习率<0.1),有些GBDT的实现加入了随机抽样(subsample 0.5<=f <=0.8)提高模型的泛化能力。通过交叉验证的方法选择最优的参数。
4、Xgboost
Xgboost是GB算法的高效实现,xgboost中的基学习器除了可以是CART也可以是线性分类器。
xgboost在目标函数中加上了正则化项,基学习为CART时,正则化项与树的叶子节点的数量T和叶子节点的值有关。
GB中使用Loss Function对f(x)的一阶导数计算出伪残差用于学习生成fm(x),xgboost不仅使用到了一阶导数,还使用二阶导数。
CART回归树中寻找最佳分割点的衡量标准是最小化均方差,xgboost寻找分割点的标准是最大化,lamda,gama与正则化项相关。
XGboos训练速度快的原因:
使用了并行/多核计算
原生语言为C++
5、XGBOOST和GBDT的区别
6、GBDT怎样设置单棵树的停止生长条件?
节点分裂时的最小样本数
树的最大深度
最多叶子结点数
Loss满足约束条件
7、GBDT如何评估特征的权重大小?
(1)通过计算每个特征在训练集下的信息增益,最后计算每个特征信息增益与所有特征信息增益之和的比例为权重值。
(2)借鉴投票机制。用相同的GBDT参数对w每个特征训练出一个模型,然后在该模型下计算每个特征正确分类的个数,最后计算每个特征正确分类的个数与所有正确分类个数之和的比例为权重值。
2.1 bagging算法基本思想
为了使基学习器尽可能的具有较大的差异(好而不同),对训练样本进行采样以产生若干个不同的子集,对每一个子集训练一个基学习器,然后结合策略进行集成的方法。为了不让每个基学习器效果太差,这些子集不能完全不同,因此使用子集之间相互有交叠的采样方法,即bootstrap方法。
2.2 bagging基本流程
给定包含m个样本的数据集,随机取出一个样本放入采样集中,再把它放回到原始数据集中,重复m次,得到含m个样本的采样集,进行同样的操作进行T次得到T个每个含m个样本的采样集,基于每个采样集训练一个基学习器,再将基学习器进行组合,一般使用多数投票或求均值的方式来统计最终的分类结果。
Bagging方法的基学习器可以是基本的算法模型,如:Linear、Ridge、Lasso、Logistic、Softmax、ID3、C4.5、CART、SVM、kNN等。
它是Bagging算法的进化版,对bagging进行了改进。
随机森林的随机体现在哪?
第一点:体现在样本的选择是随机的
第二点:体现在特征的选择是随机的
GBDT和随机森林的相同点:
GBDT和随机森林的不同点:
分类树使用信息增益或者增益比率来划分节点;每个节点样本的类别投票决定测试样本的类别
回归树使用最小化均方差划分节点;每个节点样本的均值作为测试样本的回归预测值
第一:每一轮如何改变训练数据的权值和概率分布;
第二:如何将弱分类器组合成一个强分类器
关于这两点:
adaboost做法是(1)提高那些前一轮被错误分类的样本权值,降低那些前一轮被争取分类的样本权值,使错分类样本得到更大的关注。(2)采用加权多数表决方法,少数服从多数。
提升算法做法是(1)利用上一个基决策树残差求出当前基决策树,(2)利用当前决策树求出结果,注意当前基决策树不是当前决策树