【机器学习】集成学习

https://www.nowcoder.com/ta/review-ml/review?query=&asc=true&order=&page=98

GBDT常见面试问题

https://www.cnblogs.com/ModifyRong/p/7744987.html
GBDT 推导
https://www.nowcoder.com/ta/review-ml/review?query=&asc=true&order=&page=90
https://www.nowcoder.com/ta/review-ml/review?query=&asc=true&order=&page=93

随机森林

部分摘自here_1+here_2
进行K次有放回抽样(第一次随机),建立K棵树(第二次随机:每次建决策树的时候,每次分裂时,首先进行m次随机选择,然后进行分裂选择)。每棵树会充分利用 1 − 1 e 1 - \frac{1}{e} 1e1的数据信息,剩下的 1 e \frac{1}{e} e1数据进行OOB计算。

RF可以用于数据的回归,也可以用于数据的分类。回归时是由多颗树的预测结果求均值;分类是由多棵树的预测结果进行投票。
由于它的随机性,RF有极强的防止过拟合的特性。由于他是由CART组成,因此它的训练数据不需要进行归一化,因为每课的建立过程都是通过选择一个能最好的对数据样本进行选择的属性来建立分叉,因此有以上好处的同时也带来了一个缺点,那就是忽略了属性与属性之间的关系。
注意:
1、随机森林中决策树建立,不是每棵树随机选择特征后再建立,而是每一个结点分裂时,都要进行随机选择特征
2、在随机森林中,不需要交叉验证或单独的测试集来获得测试集错误的无偏估计,OOB结果近似于需要大量计算的k折交叉验证。但是OOB误差会比交叉验证的误差更大,因为估计OOB时,我们只用了随机森林中的部分树,没有使用完整的模型,限制了模型的发挥。但OOB省去了交叉验证中多次训练的步骤,所以比较方便,节约了时间。

GBDT如何创建第二棵决策树

决策树剪枝

节点分裂公式:https://blog.csdn.net/ACBattle/article/details/89071883
信息熵 H ( X ) = − ∑ k p k l o g ( p k ) H(X) = -\sum_k p_kl og(p_k) H(X)=kpklog(pk)
信息增益(互信息) g a i n ( x ) = H ( D ) − H ( Y ∣ X ) gain(x) = H(D)-H(Y|X) gain(x)=H(D)H(YX)
信息增益率 = g a i n ( x ) / H ( x ) gain(x)/H(x) gain(x)/H(x)
Gini系数= 1 − ∑ k p k 2 1-\sum_k p_k^2 1kpk2.
决策树有个优点,隐含地创造了多个联合特征,并能够解决非线性问题。
(1)前剪枝( Pre-Pruning)
通过提前停止树的构造来对决策树进行剪枝,一旦停止该节点下树的继续构造,该节点就成了叶节点。一般树的前剪枝原则有:a.节点达到完全纯度;b.树的深度达到用户所要的深度;c.节点中样本个数少于用户指定个数;d.不纯度指标下降的最大幅度小于用户指定的幅度。
(2)后剪枝( Post-Pruning)
首先构造完整的决策树,允许决策树过度拟合训练数据,然后对那些置信度不够的结点的子树用叶结点来替代。CART 采用Cost-Complexity Pruning(代价-复杂度剪枝法),代价(cost) :主要指样本错分率;复杂度(complexity) :主要指树t的叶节点数,(Breiman…)定义树t的代价复杂度(cost-complexity)

Xgb的正则项

复杂度包含了一棵树里面节点的个数 T T T,每个树叶子节点上面输出分数 w w w的L2模平方。
1 2 λ ω 2 + γ T \frac{1}{2}\lambda\omega^2+ \gamma T 21λω2+γT

GBDT、XGB、RF的重要度排序的区别

GBDT是
RF是依赖袋外分数oob,最终会有将近 1 e \frac{1}{e} e1的数据不参与训练,用这部分的数据进行最后的评估。
其中(x,y)代表输入的样本和label,g表示的是构建的树。
在这里插入图片描述
上图中(xN,yN)没有用于g2、g3、gt,所以(xN,yN)可以作为g2、g3、gt的验证数据,然后用oob数据作为输入,输入到模型中,然后投票,少数服从多数。同理,对于(x1,y1)、(x2,y2)等也存在同样的计算,最终计算评判错误的样本占比,就是oob-error。
所以每个数据将会输入进 1 e \frac{1}{e} e1的树进行计算OOB值,每棵树将输入 1 e \frac{1}{e} e1的数据进行计算OOB值。
所以oob可以用来衡量模型的好坏。

Xgboost根据结构分数的增益情况计算出来选择哪个特征作为分割点,而某个特征的重要性就是它在所有树中出现的次数之和。https://blog.csdn.net/ACBattle/article/details/80558098

bagging和boosting的区别

BaggingBoosting
总结通过自助采样的方法,生成众多并行的分类器,通过投票机制的原则决定最后的结果将弱学习器提升为强学习器
方式每个树都是随机选择「样本」+「特征」,有放回的采样拟合残差进行学习
样本选择训练集是在原始集中有放回选取的,从原始集中选出的各轮训练集之间是独立的。每一轮的训练集不变,只是训练集中每个样例在分类器中的权重发生变化。而权值是根据上一轮的分类结果进行调整。
样例权重使用均匀取样,每个样例的权重相等。根据错误率不断调整样例的权值,错误率越大则权重越大。
预测函数所有预测函数的权重相等。每个弱分类器都有相应的权重,对于分类误差小的分类器会有更大的权重。
并行计算各个预测函数可以并行生成。各个预测函数只能顺序生成,因为后一个模型参数需要前一轮模型的结果。
基模型强模型(高方差低偏差)弱模型(低方差高偏差)

RF和GBDT的区别

结合上面bagging和boosting的区别

GBDT中的核心是通过用分类器(如CART、RF)拟合损失函数梯度,而损失函数的定义就决定了在子区域内各个步长,其中就是期望输出与分类器预测输出的差,即bias

RF的核心就是自采样(样本随机)和属性随机(所有样本中随机选择K个子样本选择最优属性来划分),样本数相同下的不同训练集产生的各个分类器,即数据的扰动导致模型学习性能的变化,即variance。
决策树

RFGBDT
决策树回归 or 分类回归
输出结果投票 or 均值加权累加
异常值不敏感敏感
训练集一视同仁侧重错误样本
性能低方差低偏差

GBDT和Xgb的区别

XGB原理二-工程实现优化:https://blog.csdn.net/ACBattle/article/details/89819229

GBDTXGB
优化梯度下降牛顿
损失函数-加入正则项,(树叶子节点个数,每个叶子节点上输出score的L2模平方和
缺失值-自动学习出它的分裂方向
采样-借鉴了RF的列(特征)采样
分裂点gini系数贪心枚举所有节点,每一次尝试去对已有的叶子加入一个分割。综合分割前后的分数,决定是否分裂。公式为: G a i n = 1 2 [ G L 2 H L + λ + G R 2 H R + λ + ( G L + G R ) 2 H L + H R + λ ] − γ Gain = \frac{1}{2}[\frac{G_L^2}{H_L+\lambda} + \frac{G_R^2}{H_R+\lambda} + \frac{(G_L+G_R)^2}{H_L + H_R +\lambda} ] - \gamma Gain=21[HL+λGL2+HR+λGR2+HL+HR+λ(GL+GR)2]γ
串行并行。分裂节点选择的时候,已经排好序

xgboost,rf,lr优缺点场景

Xgboost:
优点:
1)在寻找最佳分割点时,考虑传统的枚举每个特征的所有可能分割点的贪心法效率太低,xgboost实现了一种近似的算法。大致的思想是根据百分位法列举几个可能成为分割点的候选者,然后从候选者中根据上面求分割点的公式计算找出最佳的分割点。
2)xgboost考虑了训练数据为稀疏值的情况,可以为缺失值或者指定的值指定分支的默认方向,这能大大提升算法的效率,paper提到50倍。
3)特征列排序后以块的形式存储在内存中,在迭代中可以重复使用;虽然boosting算法迭代必须串行,但是在处理每个特征列时可以做到并行。
4)按照特征列方式存储能优化寻找最佳的分割点,但是当以行计算梯度数据时会导致内存的不连续访问,严重时会导致cache miss,降低算法效率。paper中提到,可先将数据收集到线程内部的buffer,然后再计算,提高算法的效率。
5)xgboost 还考虑了当数据量比较大,内存不够时怎么有效的使用磁盘,主要是结合多线程、数据压缩、分片的方法,尽可能的提高算法的效率。
适用场景:分类回归问题都可以。
Rf:
优点:
1)随机森林能处理很高维度的数据(也就是很多特征的数据),并且不用做特征选择。
2)在训练完之后,随机森林能给出哪些特征比较重要。
3)训练速度快,容易做成并行化方法(训练时,树与树之间是相互独立的)。
4)在训练过程中,能够检测到feature之间的影响。
5)对于不平衡数据集来说,随机森林可以平衡误差。当存在分类不平衡的情况时,随机森林能提供平衡数据集误差的有效方法。
6)如果有很大一部分的特征遗失,用RF算法仍然可以维持准确度。
7)随机森林算法有很强的抗干扰能力(具体体现在6,7点)。
8)随机森林抗过拟合能力比较强(虽然理论上说随机森林不会产生过拟合现象,但是在现实中噪声是不能忽略的,增加树虽然能够减小过拟合,但没有办法完全消除过拟合,无论怎么增加树都不行,再说树的数目也不可能无限增加的)
9)随机森林能够解决分类与回归两种类型的问题,并在这两方面都有相当好的估计表现。(虽然RF能做回归问题,但通常都用RF来解决分类问题)。
10)在创建随机森林时候,对generlization error(泛化误差)使用的是无偏估计模型,泛化能力强。
缺点:
1)随机森林在解决回归问题时,并没有像它在分类中表现的那么好,这是因为它并不能给出一个连续的输出。当进行回归时,随机森林不能够做出超越训练集数据范围的预测,这可能导致在某些特定噪声的数据进行建模时出现过度拟合。(PS:随机森林已经被证明在某些噪音较大的分类或者回归问题上回过拟合)。
2)对于许多统计建模者来说,随机森林给人的感觉就像一个黑盒子,你无法控制模型内部的运行。只能在不同的参数和随机种子之间进行尝试。
3)可能有很多相似的决策树,掩盖了真实的结果。
4)对于小数据或者低维数据(特征较少的数据),可能不能产生很好的分类。(处理高维数据,处理特征遗失数据,处理不平衡数据是随机森林的长处)。
5)执行数据虽然比boosting等快(随机森林属于bagging),但比单只决策树慢多了。
适用场景:数据维度相对低(几十维),同时对准确性有较高要求时。因为不需要很多参数调整就可以达到不错的效果,基本上不知道用什么方法的时候都可以先试一下随机森林。

Lr:
优点:实现简单,广泛的应用于工业问题上;分类时计算量非常小,速度很快,存储资源低;便利的观测样本概率分数;对逻辑回归而言,多重共线性并不是问题,它可以结合L2正则化来解决该问题。
缺点:当特征空间很大时,逻辑回归的性能不是很好;容易欠拟合,一般准确度不太高
不能很好地处理大量多类特征或变量;只能处理两分类问题(在此基础上衍生出来的softmax可以用于多分类),且必须线性可分;对于非线性特征,需要进行转换。
适用场景:LR同样是很多分类算法的基础组件,它的好处是输出值自然地落在0到1之间,并且有概率意义。因为它本质上是一个线性的分类器,所以处理不好特征之间相关的情况。虽然效果一般,却胜在模型清晰,背后的概率学经得住推敲。它拟合出来的参数就代表了每一个特征(feature)对结果的影响。也是一个理解数据的好工具。

xgboost和lightgbm的区别和适用场景

  • 树的生长分裂规则:xgboost采用的是level-wise的分裂策略,而lightGBM采用了leaf-wise的策略,区别是xgboost对每一层所有节点做无差别分裂,可能有些节点的增益非常小,对结果影响不大,但是xgboost也进行了分裂,带来了务必要的开销。 leaft-wise的做法是在当前所有叶子节点中选择分裂收益最大的节点进行分裂,如此递归进行,很明显leaf-wise这种做法容易过拟合,因为容易陷入比较高的深度中,因此需要对最大深度做限制,从而避免过拟合。
  • 决策树算法:lightgbm使用了基于histogram的决策树算法,这一点不同与xgboost中的 exact 算法,histogram算法在内存和计算代价上都有不小优势。
    1)内存优势:很明显,直方图算法的内存消耗为(#data* #features * 1Bytes)(因为对特征分桶后只需保存特征离散化之后的值),而xgboost的exact算法内存消耗为:(2 * #data * #features* 4Bytes),因为xgboost既要保存原始feature的值,也要保存这个值的顺序索引,这些值需要32位的浮点数来保存。
    2)计算优势:预排序算法在选择好分裂特征计算分裂收益时需要遍历所有样本的特征值,时间为(#data),而直方图算法只需要遍历桶就行了,时间为(#bin)
  • 直方图做差加速,一个子节点的直方图可以通过父节点的直方图减去兄弟节点的直方图得到,从而加速计算。
  • lightgbm支持直接输入categorical的feature,在对离散特征分裂时,每个取值都当作一个桶,分裂时的增益算的是”是否属于某个category“的gain,类似于one-hot编码。
  • xgboost在每一层都动态构建直方图,因为xgboost的直方图算法不是针对某个特定的feature,而是所有feature共享一个直方图(每个样本的权重是二阶导),所以每一层都要重新构建直方图,而lightgbm中对每个特征都有一个直方图,所以构建一次直方图就够了。
    其适用场景根据实际项目和两种算法的优点进行选择。
    在这里插入图片描述

抽样算法

bootstrap: 从一个数据集中有放回的抽取N次,每次抽M个。

stacking和blending的区别

blending用不相交的数据训练不同的基模型,并将其输出取加权平均。

Stacking是将数据集划分为两个不相交的集合,在第一个集合的数据集中训练多个模型,在第二个数据集中测试这些模型,将预测结果作为输入,将正确的标签作为输出,再训练一个高层的模型。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值