【机器学习之集成学习】


一、原理部分

1.集成学习

在这里插入图片描述

1-1.首先集成学习是什么?

比如说单独的一个算法,他可能是一个或几个弱分类器,我们通过一定的方式把他组合起来,组合方式有两种,一种是并行另一种是串行,就相当于把一个或多个弱分类器通过组合的方式,让它变成一个强的分类器,在精度提升上会比较明显。
它的目的就是为了解决单个模型泛化能力弱问题。尤其是做一些特征处理,还有一些国内国外的比赛,集成学习的思想运用的频率会比较高,XGBoost用的比较多一些。

1-2.它精度为什么可以提高?

比如说一个弱学习器算法(逻辑回归),可能现在处理完精度有个70%,有30%处理的不太好,我可以后边串行,多连几个,前边的处理完的结果,给到下一个,肯定会在前边的基础上再提高,会80%左右,这就是哪个集成学习的思想。

1-3.但是集成思想到底有什么用呢?

就是说在一个弱分类器的基础上,将效果拔高再拔高,最后效果肯定明显要强于单个弱分类器。
总结一下,通过组合方式,将弱分类器组合成强分类器,这就是集成思想的一个简单的概念。

2.Booststraping思想是什么呢?

就是一种非参数统计中的一种有放回的数学统计方法,就是给一些样本,来做一个有放回的抽查,就是说抽到的样本可以是重复的, 对于小样本数据效果比较好,通过方差估计可以构建置信度区间等。

对于bagging思想来说,它的预测函数是并行生成的,主流的算法有决策树;bosting思想预测函数是串行的,主流算法有GBDT(老牌)、XGBoost、LightGBM、Adaboost等。

3.什么是bagging思想呢?

  • 从原始的样本集里抽取训练集,每轮儿从原始样本集中使用Bootstraping(有重复可放回)的方法去抽取n个训练样本(在训练集里,有的样本可能被重复的被抽到,而有的样本可能一次也没被抽中)。一共进行k轮抽取,得到k个训练集(k个训练集之间是相互独立的) 。需要注意的是,它为什么要随机抽样呢?因为多个相同的弱学习器,没有意义,故需要随机采样用不同的样本去训练模型。采用两个随机,样本随机(有放回)和特征随机(不放回)。
  • 每使用一个训练集就可以得到一个模型,有k个训练集,然后一共就得到了k个模型。(注︰这里并没有具体的分类算法或回归方法,我们可以根据具体问题采用不同的分类或回归方法,如决策树、感知器等)
  • 对于分类的任务:将上边得到的k个模型,采用投票的方式得到分类结果;
  • 对回归的任务:计算上述模型的均值来作为最后的预测结果。(所有模型的重要性是一样的)

4.什么是boosting思想呢?

Gradient Boosting是一种实现Boosting的方法,
思想就是说
①我们每一次去建立模型,都是在之前建立模型损失函数的梯度下降方向上。损失函数描述的就是模型的不靠谱程度,损失函数越大,就说明模型越容易出错。如果我们的模型能够让损失函数持续的下降,说明了我们的模型在不停的改进;
②最好的方式就是让损失函数在其梯度的方向下降。也就是说我们的模型是串行的,之前的效果是70%,我们在前边的基础上进行提高,损失值也小,也就说明我们的模型精度也来越高。就是第一个模型处理完,给到下一个模型,然后对第一个模型的处理结果去进行改进,
③目的就是让它的效果最终得到一个提高。

二、算法区别

1.Gradient Boosting和Boosting两者有什么区别呢?

Gradient Boosting和Boosting着两种有什么区别呢?分别从四个方面来说:

在这里插入图片描述
对比下来,在大多数的数据集里,boosting的准确性要比bagging高。
boosting思想的一种改进型adaboost方法在邮件过滤,文本分类里有很好的性能。

总的来说,就是这两种方法都是把若干个分类器整合为一个分类器的方法,就只是整合的方式不一样,最终得到不一样的效果。将不同的分类算法套入到此类算法框架中一定程度上会提高了原单一分类器的分类效果,但是也增大了计算量。

如果将决策树与这些算法框架进行结合的话,也可以得到新的算法:
① Bagging + 决策树 = 随机森林
② AdaBoost + 决策树 = 提升树
③ Gradient Boosting + 决策树 = GBDT

2.XGBoost和GBDT的比较

2-1.XGBoost和GBDT的比较

答:GBDT首先它是一个机器学习的算法,但是它只使用了代价函数的一阶导数信息,它是用CART树作为的基分类器,它每轮迭代的时候使用是全部的数据,而且它也没有设计对缺失值的处理。但是XGBoost呢,它是机器学习算法的工程实现,然后它对代价函数进行了二阶泰勒展开,可以同时使用一阶和二阶导数,它也支持多种类型的基分类器,比如线性分类器,他跟随机森林也是相似的策略,支持对数据进行采样,能够自动学习出缺失值的处理策略,XGBoost有啥优点呢?就是加入了正则项来控制模型的复杂度,有利于防止过拟合,从而提高模型的泛化能力。

2-2.总结一下它们有啥区别呢

总结一下它们有啥区别呢?首先
①基学习器不同;
②一个只用了一阶导数,一个可以用一阶导和二阶导;
③XGBoost可以列抽样,速度变快了,减少了计算,降低了过拟合;
④一个支持并行计算,一个不支持;
⑤XGBoost有一个加速的思想;
⑥一个可以处理缺失值,一个不可以处理缺失值。这就是它们的一些区别。

3.XGBoost和LightGBM的比较

XGBoost和LightGBM的比较
答:它们都是boosting串行的一个思想,类似一个树一样,它最显著的区别就是分裂的方式不一样。XGBoost(中国人研究的)这个算法呢,它能自动的利用CPU的多线程,并且适当的改进了gradient(梯度) boosting,加了剪枝,控制了这个模型的复杂度,所以训练起来会比传统的GBDT要快些。但是如果数据量比较大的话,考虑到性能的话还是推荐用LightGBM去做,因为它训练起来快么。

两个算法都是串行,就都跟树一样,从一个节点往下长,一点点去裂变。
它们之间的区别,有以下几点:
① 切分算法不一样(切分点的选取);
② 占用的内存更小,只保存特征离散化后的值,内存消耗可以降低为原来的1/8,也就是说速度提高了8倍,并且精度一致;
③ LightGBM直接支持类别特征;(通俗讲就是大多数机器学习的工具都没办法直接支持类别型特征,一般都需要将类别特征转化为one-hot向量特征,来降低空间和时间的效率。但是类别特征的使用在实践中也是很常用的。基于这个情况的考虑LightGBM优化了对类别特征的支持,可以直接输入类别特征,不需要额外的0/1的展开,并且在决策树算法上增加了类别特征的决策的一个规则)
④ 决策树的生长策略不同。

XGBoost采用的是带深度限制的level-wise(树按层生长)的策略。level-wise过一次数据可以能够同时分裂同一层的叶子,不管其他的,每一层它都分裂出来,最后剪枝,它是通过代价增益(计算方式是增益后-增益前)去构建的树。容易进行多线程优化,不容易过拟合;但这样不加区分的对待同一层叶子,就是一视同仁,然后就带来了很多没必要的开销(实际上很多叶子的分裂增益较低,没必要进行搜索和分裂)

LightGBM采用leaf-wise生长的策略,每次从当前所有叶子中找到分裂增益最大(数据量最大)的一个叶子,去进行分裂,如此循环;它虽然会生长出比较深的决策树,产生过拟合(因此LightGBM在leaf-wise之上增加了一个最大深度的限制,在保证高效率的同时防止过拟合)
总结下来就是一句话,XGBoost就是直接分,LightGBM考虑分裂的增益效果最大的去分。

4.GDBT模型、XGBoost和LightGBM之间的区别与联系

GDBT模型、XGBoost和LightGBM之间的区别与联系
答: GBDT < XGBoost < LightGBM,后者在前者的基础上效果和性能上有明显的提高,虽然集成学习的速度都很慢,只是LightGBM相比其他的快一些。

GBDT与XGBoost的比较:
① GBDT把目标函数泰勒展开到了一阶,而XGBoost把目标函数泰勒展开到了二阶。
泰勒展开到二阶的原因:
a) 统一损失函数求导的形式已经支持自定义损失函数;
b) 二阶的信息本身就能让梯度收敛更快更准确。
② GBDT是给新的基模型寻找新的拟合标签(前面加法模型的负梯度),而XGBoost是给新的基模型寻找新的目标函数(目标函数关于新的基模型的二阶泰勒展开);
③ XGBoost加入了对叶子权重的L2正则化项,从而有利于模型获得更低的方差;
④ XGBoost增加了一个自动处理缺失值特征的策略。通过把带缺失值样本分别划分到左子树或者右子树,比较两种方案下目标函数的优劣,从而自动对有缺失值的样本进行划分,就不需要对缺失特征再进行填充预处理了;
⑤ XGBoost采用了Shrinkage和Column Subsampling方法,这两种方法都能在一定程度上防止过拟合。
a) Shrinkage方法就是每次迭代中对树的每个叶子节点的分数乘上一个缩减的权重n,可以让每个树的影响力不会太大,留下更多的空间给后面的树去优化;
b) Column Subsampling,一种按层随机采样,在对同一层内的每个节点分裂之前,先随机选择一部分特征,然后再遍历这一部分的特征来寻找最优的切分点。(近似算法、分桶也能降低过拟合风险)
⑥ 同一级的节点可以并行化训练。

XGBoost的优缺点:
优点:
① 使用了多种的策略去防止过拟合,比如说正则化项、Shrinkage、Column Subsampling等;
② 目标函数使用了一个损失函数关于待求函数的二阶导数;
③ 支持并行化同级层节点可并行化,具体的对于某个节点,在节点内选择最佳的分裂点,候选的分裂点计算增益用多线程并行,能够加快训练速度。
④ 添加了对稀疏数据的处理;
⑤ 采用了交叉验证以及early stop,防止建树过深;
⑥ 支持设置样本权重,可以通过调整权重可以更加关注一些样本。
缺点:
① XGBoosting采用了预排序,在迭代之前,先对结点的特征进行预排序,遍历选择最优分割点,数据量大时,贪心法比较耗时;LightGBM方法采用的是histogram算法,占用的内存低,数据分割的复杂度会比较更低一些;
② XGBoosting采用level-wise生成决策树,同时分裂同一层的叶子,从而进行多线程优化,不容易过拟合,但很多叶子节点的分裂增益较低,没必要进行跟进一步的分裂,这就带来了不必要的开销;LightGBM采用深度优化,leaf-wise生长策略,每次都从当前叶子中选择增益最大的结点进行分裂,进行循环迭代,但会生长出更深的决策树,产生过拟合,因此引入了一个阈值进行限制,来防止过拟合。

5.简单介绍一下XGboost?

简单介绍一下XGboost?
答∶ 它属于GBDT里的一种,方式采用的负梯度,是一种加法模型和前向优化算法,简答描述就是代价函数里+正则(Ω树的复杂度),为什么要加正则呢?就是为了让它应用面更广。如何去衡量它的复杂度呢?通过①决策树的深度;②叶子节点的个数;③内部节点的个数。然后它的算法思想的核心就是:不断地去添加树,不断地进行特征分裂去生长一棵树,每添加一个树,其实都是学习一个新函数f(x),然后去拟合上次预测的残差;当我们训练完成得到k棵树,我们要预测一个样本的分数,其实就是根据这个样本的特征,在每棵树中会落到对应的一个叶子节点,每个叶子节点就对应一个分数;最后就只需要将每棵树对应的分数加起来就是该样本的预测值。

6.简单介绍一下XGboost?

简单介绍一下LightGBM?
答:它其实是一个实现GBDT算法的框架,支持高效率的并行训练。提出来的目的就是为了解决GBDT在海量数据遇到的问题。

优点:
在这里插入图片描述
缺点:
①可能会长出比较深的决策树,产生过拟合。在Leaf-wise之上增加了一个最大深度限制,在保证高效率的同时防止过拟合;
②对噪音点较为敏感,因为Boosting族是迭代算法,每一次迭代都根据上一次迭代的预测结果对样本进行权重调整,所以随着迭代不断进行,误差会越来越小,模型的偏差(bias)会不断降低;
③没有考虑最优解是全部特征的理念,在寻找最优解时,依据的是最优切分变量。

三、拔高亮点

1.在每一轮如何改变训练数据的权值或概率分布?

在每一轮如何改变训练数据的权值或概率分布?
答:我们选择去提高那些在前一轮被弱分类器划分错了的样本的权重,减少前一轮分对了的样例的权重,使得分类器对我们误分的数据能有比较好的一个效果。

2.通过什么方式来组合弱分类器?

通过什么方式来组合弱分类器?
答:我们可以通过加法模型来将弱分类器进行线性组合,比如AdaBoost通过加权多数表决的方式,也就是说增大错误率小的分类器的权值,同时减小错误率较大的分类器的权值。
而提升树是通过拟合残差的方式逐步减小残差,把每一步生成的模型去叠加得到最终模型。

3.如何停止树的循环生成?

如何停止树的循环生成?
① 增益小于设定的阀值(预剪枝),阈值参数:正则项里叶子节点数T的系数;
② 达到最大深度时停止建立决策树,参数:max_depth,避免树太深,防止过拟合;
③ 权重和小于设定阈值时则停止建树,参数:最小的样本权重和min_child_weight:一个叶子节点样本,防止过拟合。

4.XGBoost为什么要用泰勒展开式(优势)?

XGBoost为什么要用泰勒展开式(优势)?
答:二阶导数有利于梯度下降的更快更准;可以在不选定损失函数具体形式的情况下,仅依靠输入数据的值就可以进行叶子分裂优化计算;增加了适用性, 使得它可以按照需来选取损失函数, 可以用于分类, 也能用于回归。

5.决策树和XBGoost

决策树和XBGoost处理连续值的方法?
答:决策树采用的是贪心算法,就是说每个都计算一下,特征量很大的话,计算量也会很大,可以找见信息增益最大的,也就是说是选取最优特征的。XBGoost采用的是近似算法,举个例子就是看想分成几个桶,100个数,分10组,砍9次就行,加快了速度,但牺牲了精度。需要注意的是,如果是三、四分叉,不可以用近似算法。它是用蛮力算法一个个划分的,因为cart树本身就是一个二叉树。

6.LightGBM的工程优化有哪些?

LightGBM的工程优化有哪些?
① 特征并行:
XGBoost就是对数据进行垂直划分,使用不同机器找到不同特征的最优分裂点,划分结果需要通过通信告知每台机器。LightGBM不进行数据垂直划分,在每台机器上保存全部的训练数据,在得到最佳划分方案以后可在本地执行划分而减少了不必要的通信;
② 数据并行:
策略就是水平的划分数据,方法就是把直方图合并的任务分摊到不同的机器,降低通信和计算,并利用直方图做差,进一步减少了一半的通信量;
③ 投票并行:
只合并部分特征的直方图,从而达到降低通信量的目的,可以得到非常好的加速效果;
④ Cache命中率优化:
XGBoost是不同特征通过不同的索引获得梯度。LightGBM所有的特征都采用相同的方式获得梯度。这样做的优点是,对梯度进行排序并可实现连续访问,大大的提高了缓存命中率;因为不需要存储行索引到叶子索引的数组,降低了存储消耗。

总体优化结构就是:LightGBM = XGBoost+直方图+GOSS(单边梯度采样)+ EFB(特征捆绑)
经过一系列操作后,速度提升,精度下降,因为是弱学习器,影响不大。

Histogram(直方图)算法,它其实就是将连续缺失值离散化(类似分桶),对里边特征值一一统计,然后得到一个直方图。离散值有什么好处呢?它可以让模型速度快,储存方便,鲁棒性强,模型更加稳定。它的基本思想就是,先把连续的浮点特征值离散化成k个整数,然后构造一个宽度为k的直方图。它的步骤是怎样的呢?先在遍历数据时,根据离散化后的值作为索引在直方图中累积统计量;在遍历一次数据后,直方图就累积了需要的统计量;然后我们就可以根据直方图的离散值,去遍历寻找最优的分割点。优点就是:内存消耗的降低,速度提高8倍;计算上的代价也大幅降低,时间复杂度降低,因为预排序算法每遍历一个特征值就需要计算一次分裂的增益,而直方图算法只需要计算k次就可以了。但它也是有缺陷的,找不到最精确的划分点(就类似近似算法,一个调优算法能让计算代价成本变小),但是后边还有很多的弱学习器(每一个都不是最优的,都是弱学习器)。

带深度限制的Leaf-wise的叶子生长策略,

Histogram(直方图)差加速,结构就是:右边的直方图(直接做差,不需要计算)=总的直方图-左边的直方图(通过计算得来的)。速度上可以提升1倍。

GOSS(单边梯度采样),目的就是从数据的角度出发,减少数据量,减少训练样本。它的优势是什么呢?根据样本的权重信息对样本进行抽样,减少了梯度小的样本,还不会过多的改变数据集的分布。举个例子就是感觉就好像一个公寓里本来住了10个人,感觉太挤了,赶走了6个人,但是剩下的人却还要分摊他们6个人的房租。

EFB(特征捆绑),目的就是从样本的角度出发,特征合并在一起,还不丢失信息。原则上是利用互斥和冲突比率(一个判定条件,判断冲不冲突),如果不冲突,我们就可以把它们合并成一个特征,但如果最后影响了精度,则不能合并。这样作用就是减少了特征的数量,提高了训练速度。优势是通过捆绑特征来降低特征的维度,缺点就是特征和特征之间有一个冲突比率,一定会有代价,合并一定有损失,精度会差一点。

四、简单介绍一下GBDT?

1.简单介绍一下GBDT?

简单介绍一下GBDT?
答:首先GBDT是由BDT优化而来的,BDT又叫提升树,是用残差(比如-1/2(y-h)²,均方误差)去训练弱优化器的。而GBDT的全程叫梯度提升决策树,运用的是Boosting的思想,就是将基分类器层层叠加,根据各层分类器的结果的加权得到最终结果。是通过采用的负梯度来代替残差的方法,因为残差有一定的局限性。
相同点就是:
①达到了同一个效果,都是训练弱学习器;
②代价函数一样;
③结果数值近相似。
不同点就是:方式不一样,一个是采用残差,另一个是采用负梯度。
它有啥优点呢?
①预测阶段速度比较快;
②在分布稠密的数据上比较好;
③具有较好的解释性和鲁棒性。
但是它也有局限性,
①训练阶段串行速度上比较慢;
②稀疏数据上不如其他模型;
③在d处理文本分类的特征上,不如处理数值特征时明显。

2.选择弱分类器的要求有哪些?

选择弱分类器的要求有哪些?
答:一般足够简单就行,并且是低方差和高偏差的,但总体模型要求是低偏差。

3.随机森林(BF)和GBDT的异同

同:
都是由多棵树组成,结果由多棵树共同决策产生的结果。
异:
a) GBDT是boosting思想,随机森林是bagging思想;
b) GBDT是串行(一个一个顺着往下),随机森林是并行的;
c) GBDT是全样本,随机森林是随机抽样本;
d) GBDT只能是回归树,随机森林既可以是分类树、也可以是回归树;
e) GBDT是多棵树累加之和,随机森林结果是多棵树表决的;
f) GBDT对异常值比较敏感,随机森林对异常值不敏感。

4.梯度提升和梯度下降的异同

同:
效果都一样,都是求解梯度最优,都是梯度慢慢减小。
异:
梯度下降是慢慢下降,比如随机梯度下降;
梯度提升是第一个梯度比较高的弱学习器,得到一个梯度,然后再使用第二个弱学习器去拟合,得到一个梯度,就近似于GBDT。

猜你喜欢

转载自blog.csdn.net/m0_62571112/article/details/124540216
今日推荐