集成学习

一、构建组合分类器的好处

(1)提升模型精度:整合各个模型的分类结果,得到更合理的决策边界,减少整体错误,实现更好的分类效果;
(2)处理过大或过小的数据集:数据集较大时,可将数据集划分成多个子集,对子集构建分类器;当数据集较小时,通过自助采样(bootstrap)从原始数据集采样产生多组不同的数据集,构建分类器。
(3)若决策边界过于复杂,则线性模型不能很好地描述真实情况。因此,现对于特定区域的数据集,训练多个线性分类器,再将他们集成。
(4)比较适合处理多源异构数据(存储方式不同(关系型、非关系型),类别不同(时序型、离散型、连续型、网络结构数据))

二.Bagging和Boosting区别

1.Bagging即套袋法,其算法过程如下:

(1)从原始样本集中抽取训练集。每轮从原始样本集中使用Bootstraping的方法抽取n个训练样本(在训练集中,有些样本可能被多次抽取到,而有些样本可能一次都没有被抽中)。共进行k轮抽取,得到k个训练集。(k个训练集之间是相互独立的)

(2)每次使用一个训练集得到一个模型,k个训练集共得到k个模型。

(3)对分类问题:将上步得到的k个模型采用投票的方式得到分类结果;对回归问题,计算上述模型的均值作为最后的结果。(所有模型的重要性相同)

在这里插入图片描述
2.Boosting:

AdaBoosting方式每次使用的是全部的样本,每轮训练改变样本的权重。下一轮训练的目标是找到一个函数f 来拟合上一轮的残差。当残差足够小或者达到设置的最大迭代次数则停止。Boosting会减小在上一轮训练正确的样本的权重,增大错误样本的权重。(对的残差小,错的残差大)

梯度提升的Boosting方式是使用代价函数对上一轮训练出的模型函数f的偏导来拟合残差。

3.区别:

1)样本选择上:

Bagging:训练集是在原始集中有放回选取的,从原始集中选出的各轮训练集之间是独立的。

Boosting:每一轮的训练集不变,只是训练集中每个样例在分类器中的权重发生变化。而权值是根据上一轮的分类结果进行调整。

2)样例权重:

Bagging:使用均匀取样,每个样例的权重相等

Boosting:根据错误率不断调整样例的权值,错误率越大则权重越大。

3)预测函数:

Bagging:所有预测函数的权重相等。

Boosting:每个弱分类器都有相应的权重,对于分类误差小的分类器会有更大的权重。

4)并行计算:

Bagging:各个预测函数可以并行生成

Boosting:各个预测函数只能顺序生成,因为后一个模型参数需要前一轮模型的结果。

5)方差与偏差:
bagging:减少variance
boosting:减少bias
在这里插入图片描述
High variance 是model过于复杂overfit,记住太多细节noise,受outlier影响很大;high bias是underfit,model过于简单,cost function不够好。

bagging随机选取data的subset,outlier因为比例比较低,参与model training的几率也比较低,所以bagging降低了outliers和noise对model的影响,所以降低了variance。boosting最小化损失函数,bias逐步减小。
在这里插入图片描述

三、Boosting代表

1.AdaBoost(Adaptive Boosting)

在这里插入图片描述
在这里插入图片描述

2.GBDT(Gradient Boosting Desition Tree)

GBDT是以决策树(CART)为基学习器的GB算法,是迭代树而不是分类树。
GBDT算法基树采用CART回归树,树节点的划分指标是平方损失函数,叶子节点的值是落在该叶子节点所有样本的目标均值。
树与树之间的Boosting逻辑是:新树拟合的目标是上一轮目标函数负梯度的值,而这个损失函数也可以自定义,只需满足具备一阶可导即可。GBDT最终的输出结果是将样本在所有树上的叶子值相加。

在这里插入图片描述
梯度提升树中为什么说目标函数关于当前模型的负梯度是残差的近似值?
在这里插入图片描述

四、Bagging 代表

随机森林(RFC)
1.随机性
数据选取随机:从原始数据集中采取有放回的抽样(bootstrap),构造子数据集。
和特征选取的随机性:每个结点的属性集合随机选择部分k个属性的子集,然后在子集中选择一个最优的特征来做决策树的左右子树划分,一般建议k=log2d.

2.优缺点:
优点 :
(1)不容易出现过拟合,因为选择训练样本的时候就不是全部样本。

(2)可以既可以处理属性为离散值的量,比如ID3算法来构造树,也可以处理属性为连续值的量,比如C4.5算法来构造树。

(3)处理高维数据集,它可以处理成千上万的输入变量,并确定最重要的变量,一种降维方法。此外,该模型能够输出变量的重要性程度。

(4)分类不平衡的情况时,随机森林能够提供平衡数据集误差的有效方法
缺点:

随机森林在解决回归问题时并没有像它在分类中表现的那么好,这是因为它并不能给出一个连续型的输出。当进行回归时,随机森林不能够作出超越训练集数据范围的预测,这可能导致在对某些还有特定噪声的数据进行建模时出现过度拟合。

随机森林给人的感觉像是一个黑盒子——几乎无法控制模型内部的运行,只能在不同的参数和随机种子之间进行尝试。

五、分类器比较

1.AdaBoost V.S. GBDT
AdaBoost用错分数据点来识别问题,通过调整错分数据点的权重来改进模型。GBDT通过负梯度来识别问题,通过计算负梯度来改进模型。

2.GBDT V.S. LR
(1)从决策边界来说,线性回归的决策边界是一条直线,逻辑回归的决策边界根据是否使用核函数可以是一条直线或者曲线,而GBDT的决策边界可能是很多条线。
(LR 是特征的线性组合求交叉熵的最小化,也就是对特征的线性组合做 logistic,使得LR会在特征空间中做线性分界面;GBDT采用 CART 树作为基分类器,其每轮树的特征拟合都是对特征空间做平行于坐标轴的空间分割,所以自带特征选择和可解释性)
在这里插入图片描述
(2)LR本质是分类算法,GBDT 采用 CART 树作为基分类器,其无论是处理分类还是回归均是将采用回归拟合,本质是回归算法(如果不将分类转换为回归问题,GBDT 每轮目标函数旨在拟合上一轮组合模型的负梯度,分类信息无法求梯度,故而依旧是采用 softmax 转换为回归问题进行求解)。
(3)正则:
LR的正则:采用一种约束参数稀疏的方式,其中 L2 正则整体约束权重系数的均方和,使得权重分布更均匀,而 L1 正则则是约束权重系数绝对值和,其自带特征选择特性;
GBDT 的正则:弱算法的个数T,就是迭代T轮。

LR 采用对特征系数进行整体的限定,GBDT 采用迭代的误差控制本轮参数的增长;
3.GBDT vs XGBoot

(1)传统GBDT以CART作为基分类器,xgboost还支持线性分类器,这个时候xgboost相当于带L1和L2正则化项的逻辑斯蒂回归(分类问题)或者线性回归(回归问题)。

(2)传统GBDT在优化时只用到一阶导数信息,xgboost则对代价函数进行了二阶泰勒展开,同时用到了一阶和二阶导数。boost支持自定义损失函数,xgboost要函数可一阶和二阶求导。
对于基模型拟合差异(对于 XGBoost 就是拟合-g/(hr) ,对于 GBDT 就是拟合 -g),其内部的拟合函数不同,XGBoost 是自己定义的一套增益规则,而 GBDT 就是 CART 树的二阶平方损失拟合。

(3)xgboost在代价函数里加入了正则项,用于控制模型的复杂度。正则项里包含了树的叶子节点个数、每个叶子节点上输出的score的L2模的平方和。从Bias-variance tradeoff角度来讲,正则项降低了模型的variance,使学习出来的模型更加简单,防止过拟合,这也是xgboost优于传统GBDT的一个特性。在这里插入图片描述
在这里插入图片描述
xgboost的迭代是以下图中gain式子定义的指标选择最优分割点的:

那么如何得到优秀的组合树呢?

一种办法是贪心算法,遍历一个节点内的所有特征,按照公式计算出按照每一个特征分割的信息增益,找到信息增益最大的点进行树的分割。增加的新叶子惩罚项对应了树的剪枝,当gain小于某个阈值的时候,我们可以剪掉这个分割。但是这种办法不适用于数据量大的时候,因此,我们需要运用近似算法。

另一种方法:XGBoost在寻找splitpoint的时候,不会枚举所有的特征值,而会对特征值进行聚合统计,按照特征值的密度分布,构造直方图计算特征值分布的面积,然后划分分布形成若干个bucket(桶),每个bucket的面积相同,将bucket边界上的特征值作为split
point的候选,遍历所有的候选分裂点来找到最佳分裂点。

上图近似算法公式的解释:将特征k的特征值进行排序,计算特征值分布,rk(z)表示的是对于特征k而言,其特征值小于z的权重之和占总权重的比例,代表了这些特征值的重要程度,我们按照这个比例计算公式,将特征值分成若干个bucket,每个bucket的比例相同,选取这几类特征值的边界作为划分候选点,构成候选集;选择候选集的条件是要使得相邻的两个候选分裂节点差值小于某个阈值

(4)Shrinkage(缩减),相当于学习速率(xgboost中的eta)。每次迭代,增加新的模型,在前面成上一个小于1的系数,降低优化的速度,每次走一小步逐步逼近最优模型比每次走一大步逼近更加容易避免过拟合现象;

(5)列抽样(column subsampling)。xgboost借鉴了随机森林的做法,支持列抽样(即每次的输入特征不是全部特征),不仅能降低过拟合,还能减少计算,这也是xgboost异于传统gbdt的一个特性。

(6)忽略缺失值:在寻找splitpoint的时候,不会对该特征为missing的样本进行遍历统计,只对该列特征值为non-missing的样本上对应的特征值进行遍历,通过这个工程技巧来减少了为稀疏离散特征寻找splitpoint的时间开销

(7)指定缺失值的分隔方向:可以为缺失值或者指定的值指定分支的默认方向,为了保证完备性,会分别处理将missing该特征值的样本分配到左叶子结点和右叶子结点的两种情形,分到那个子节点带来的增益大,默认的方向就是哪个子节点,这能大大提升算法的效率。

(8)并行化处理:在训练之前,预先对每个特征内部进行了排序找出候选切割点,然后保存为block结构,后面的迭代中重复地使用这个结构,大大减小计算量。在进行节点的分裂时,需要计算每个特征的增益,最终选增益最大的那个特征去做分裂,那么各个特征的增益计算就可以开多线程进行,即在不同的特征属性上采用多线程并行方式寻找最佳分割点。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值