机器学习问题汇总(集成学习)

集成学习

  1. xgboost原理

xgboost是陈天奇在2014年初提出的,是基于GBDT改进的梯度提升(GB)算法,XGBoost算法中的基学习器可以是线性分类器,也可以是CART。该算法通过增加基分类器,减少拟合残差,直到残差减少到足够小或预设阈值,则终止迭代,XGBoost算法和GDBT算法相比,通过对损失函数的负梯度使用二阶泰勒展开式,增加了误差减小的速度,在保留一阶损失函数信息基础上,增加了损失函数的二阶信息,使得误差拟合速度加快,并通过增加正则项,对模型复杂度进行惩罚,以避免模型的过拟合问题,使得模型在追求更高精确度和避免模型过度复杂之间得到良好平衡,XGBoost算法的目标函数由损失函数和正则项两部分组成。
XGBoost算法使用稀疏感知算法解决数据稀疏问题,通过对目标函数增加正则项避免模型的过拟合问题,通过使用二阶泰勒展开快速拟合残差提高模型的精确度,通过贪心算法和分布式加权直方图算法的运用提高模型的运行效率。

  1. xgboost的目标函数和正则项表达式

1)目标函数
假设有样本 N N N个,样本指标 M M M个,则样本集合 D = ( x i , y i ) ( D ∈ R M , y i ∈ R ) D={(x_i,y_i)}{(D\in R^M,y_i \in R)} D=(xi,yi)(DRM,yiR),若集成学习过程共有 t t t棵决策树,以 f t f_t ft表示第 t t t棵决策树, f t ( x i ) f_t(x_i) ft(xi)表示第 t t t棵树的决策结果, T T T表示决策树叶子节点个数, x i x_i xi与决策树的预测结果之间的决策规则以 q q q表示,相应叶子节点的权重以 ω \omega ω表示,并使用 L 2 L2 L2范式对其进行正则化,XGBoost算法目标函数为:

L ( t ) = ∑ i = 1 n l ( y i , y ^ i ( t − 1 ) + f t ( x i ) ) + ∑ k = 1 t Ω ( f k ) L^{(t)}=\sum_{i=1}^nl(y_i,\hat y_i^{(t-1)}+f_t(x_i))+\sum_{k=1}^t\Omega(f_k) L(t)=i=1nl(yi,y^i(t1)+ft(xi))+k=1tΩ(fk)
其中:
Ω ( f ) = γ T + 1 2 λ ∥ ω ∥ 2 \Omega(f)=\gamma T+\frac{1}{2}\lambda \Vert\omega\Vert^2 Ω(f)=γT+21λω2

γ \gamma γ λ \lambda λ分别为叶子节点数及其相应叶子节点权重的正则化系数,目标函数的优化方向是越小越好,所以两个正则化系数越大,表示惩罚程度越强。后一个基学习器是在前面基学习器的基础上建立的,在对第 t t t轮的损失函数进行计算时,对于前 t − 1 t-1 t1轮的正则项之和 ∑ k = 1 t − 1 Ω ( f k ) \sum_{k=1}^{t-1}\Omega(f_k) k=1t1Ω(fk)是已知的,可使用常数表示,并对目标函数进一步求解如下:

L ( t ) = ∑ i = 1 n l ( y i , y ^ i ( t − 1 ) + f t ( x i ) ) + ∑ k = 1 t Ω ( f k ) L^{(t)}=\sum_{i=1}^nl(y_i,\hat y_i^{(t-1)}+f_t(x_i))+\sum_{k=1}^t\Omega(f_k) L(t)=i=1nl(yi,y^i(t1)+ft(xi))+k=1tΩ(fk)
= ∑ i = 1 n l ( y i , y ^ i ( t − 1 ) + f t ( x i ) ) + Ω f ( t ) + c o n s t a n t   t =\sum_{i=1}^nl(y_i,\hat y_i^{(t-1)}+f_t(x_i))+\Omega f(t)+constant\ t =i=1nl(yi,y^i(t1)+ft(xi))+Ωf(t)+constant t

使用 g i g_i gi h i h_i hi分别表示损失函数的一阶导数和二阶导数:

g i = ∂ l ( y i , y ^ i t − 1 ) ∂ y ^ i t − 1 g_i=\frac{\partial l(y_i,\hat y_i^{t-1})}{\partial \hat y_i^{t-1}} gi=y^it1l(yi,y^it1)
h i = ∂ 2 l ( y i , y ^ i t − 1 ) ∂ ( y ^ i t − 1 ) 2 h_i=\frac{\partial^2 l(y_i,\hat y_i^{t-1})}{\partial {(\hat y_i^{t-1})}^2} hi=(y^it1)22l(yi,y^it1)

将目标函数在 y ^ i t − 1 \hat y_i^{t-1} y^it1处进行二阶泰勒公式展开,并将 g i g_i gi h i h_i hi代入:

∑ i = 1 n l ( y i , y ^ i ( t − 1 ) + f t ( x i ) ) + Ω f ( t ) + c o n s t a n t   t \sum_{i=1}^nl(y_i,\hat y_i^{(t-1)}+f_t(x_i))+\Omega f(t)+constant\ t i=1nl(yi,y^i(t1)+ft(xi))+Ωf(t)+constant t
≈ ∑ i = 1 n l ( y i , y ^ i ( t − 1 ) ) + g i f t ( x i ) + 1 2 h i f t 2 ( x i ) + Ω f ( t ) + c o n s t a n t   t \approx \sum_{i=1}^nl(y_i,\hat y_i^{(t-1)})+g_if_t(x_i)+\frac{1}{2}h_if_t^2(x_i)+\Omega f(t)+constant\ t i=1nl(yi,y^i(t1))+gift(xi)+21hift2(xi)+Ωf(t)+constant t
≈ ∑ i = 1 n [ g i f t ( x i ) + 1 2 h i f t 2 ( x i ) ] + Ω f ( t ) \approx\sum_{i=1}^n[g_if_t(x_i)+\frac{1}{2}h_if_t^2(x_i)]+\Omega f(t) i=1n[gift(xi)+21hift2(xi)]+Ωf(t)

在目标函数优化过程中无法对常数项进行优化,故将公式中的常数项去掉以对公式进行简化,使用 w i w_i wi表示叶子节点的权重,以 I j I_j Ij作为叶子结点 J J J的实例集合,其中 I j = i ∣ q ( x i ) = j I_j={i|q(x_i)=j} Ij=iq(xi)=j,并将正则展开:

L ( t ) = ∑ i = 1 n [ g i f t ( x i ) + 1 2 h i f t 2 ( x i ) ] + γ T + 1 2 λ ∑ j = 1 T ω j 2 L^{(t)}=\sum_{i=1}^n[g_if_t(x_i)+\frac{1}{2}h_if_t^2(x_i)]+\gamma T+\frac{1}{2}\lambda \sum_{j=1}^T\omega_j^2 L(t)=i=1n[gift(xi)+21hift2(xi)]+γT+21λj=1Tωj2
= ∑ j = 1 T [ ( ∑ i ∈ I j g i ) w j + 1 2 ( ∑ i ∈ I j h i + λ ) w j 2 ] + γ T =\sum_{j=1}^{T}[(\sum_{i\in I_j}g_i)w_j+\frac{1}{2}(\sum_{i\in I_j}h_i+\lambda)w_j^2]+\gamma T =j=1T[(iIjgi)wj+21(iIjhi+λ)wj2]+γT

当决策树的决策规则 q ( x ) q(x) q(x)确定的情况下,即可获得叶子节点 j j j的最优权重 w j ∗ w_j^* wj,并将目标函数进一步化简如下:

w j ∗ = ∑ i ∈ I j g i ∑ i ∈ I j h i + λ w_j^*=\frac{\sum_{i\in I_j}g_i}{\sum_{i\in I_j}h_i+\lambda} wj=iIjhi+λiIjgi
L ( t ) ( q ) = − 1 2 ∑ j = 1 T ( ∑ i ∈ I j g i ) 2 ∑ i ∈ I j h i + λ + γ T L^{(t)}(q)=-\frac{1}{2}\sum_{j=1}^T\frac{(\sum_{i\in I_j}g_i)^2}{\sum_{i\in I_j}h_i+\lambda} +\gamma T L(t)(q)=21j=1TiIjhi+λ(iIjgi)2+γT

2)正则表达式
Ω ( f ) = γ T + 1 2 λ ∥ ω ∥ 2 \Omega(f)=\gamma T+\frac{1}{2}\lambda \Vert\omega\Vert^2 Ω(f)=γT+21λω2

  1. xgboost的优缺点

优点
1)精度更高,XGBoost对损失函数进行了二阶泰勒展开,XGBoost引入二阶导一方面是增加精度,另一方面是能够自定义损失函数,二阶泰勒展开可以近似大量损失函数
2)灵活性更强,XGBoost算法中的基学习器可以是线性分类器,也可以是CART。
3)XGBoost在目标函数中加入了正则项,用于控制模型的复杂度,正则项降低模型的方差,使学习出来的模型更加简单,有助于防止过拟合。
4)对于特征的值有缺失的样本,XGBoost采用的稀疏感知算法可以自动学习出它的分裂方向。

缺点
1)在节点分裂过程中仍需要遍历数据集
2)预排序过程的空间复杂度过高,不仅需要存储特征值,还需要存储特征对应样本的梯度统计值的索引,相当于消耗了两倍的内存。

  1. xgboost怎么防止过拟合

XGBoost在目标函数中加入了正则项,用于控制模型的复杂度,正则项降低模型的方差,使学习出来的模型更加简单,有助于防止过拟合。

  1. xgboost特征并行化怎么做的

XGBoost的并行不是每棵树并行训练,每棵树训练前需要等前面的树训练完成才能开始训练。
XGBoost的并行是指特征维度的并行:在训练之前,每个特征按特征值对样本进行预排序,并存储为块结构,在后面查找特征分割点时可以重复使用,而且特征已经被存储为一个个块结构,那么在寻找每个特征的最佳分割点时,可以利用多线程对每个块并行计算。

  1. GBDT的原理

GBDT由提升算法和决策树算法组成,该算法在2001年由Friedman提出,全称为梯度提升决策树,其基学习器为决策树,可以应用于回归计算也可以应用于分类计算,GBDT在集成算法中是提升算法的代表算法。GBDT算法通过对每一步的损失函数的负梯度进行拟合,以作为下一个基学习器学习中的残差的近似值,并根据上一个基学习器对残差的拟合,寻找下一步使得损失函数达到最小的进行叶子划分的趋于,依次进行,将每个弱学习器的学习结果加权得到最后集成学习的结果。
假设共含有 N N N个样本,共建立基学习器 m m m个,即 m m m棵决策树,根据决策树深度确定的相应叶子节点数记为 J J J个叶子节点,首先对初始进行决策的基学习器给定一个常数 c c c进行预测, y i y_i yi表示第 i i i个样本的特征向量。

1)对第一个基学习器进行初始化,以 f 0 ( x ) f_0(x) f0(x)表示依据使得损失函数最小的原则得出的目标函数,每一个预测值应用于下一个基学习的残差近似过程
f 0 ( x ) = a r g   m i n c ∑ i = 1 N L ( y i , c ) f_0(x)=arg\ min_c\sum_{i=1}^{N}L(y_i,c) f0(x)=arg minci=1NL(yi,c)

2)在建立第 m m m棵决策树时
2.1)使用第 m − 1 m-1 m1棵树的损失函数计算负梯度,并拟合第 m m m个决策树的样本残差
r i , m = − ∂ L ( y i , f m − 1 ( x i ) ) f m − 1 ( x i ) ) r_{i,m}=-\frac{\partial L(y_i,f_{m-1}(x_i))}{f_{m-1}(x_i))} ri,m=fm1(xi))L(yi,fm1(xi))
2.2)根据第 m − 1 m-1 m1棵决策树的拟合结果建立第 m m m棵决策树,假设第 m m m棵决策树含有 J J J个叶子节点,得到第 m m m棵数的叶子节点划分区域 R j m R_{jm} Rjm
2.3)对叶子区域计算最佳拟合值
γ j m = a r g   m i n γ ∑ x j ∈ R j m L ( y i , f m − 1 ( x i ) + γ ) \gamma_{jm}=arg\ min_\gamma\sum_{x_j\in R_{jm}}L(y_i,f_{m-1}(x_i)+\gamma) γjm=arg minγxjRjmL(yi,fm1(xi)+γ)
2.4)根据第 m m m个决策树的拟合结果,更新得到第 m m m棵决策树。
f m ( x ) = f m − 1 ( x ) + ∑ j = 1 ( J ) I ( x ∈ R j m ) f_m(x)=f_{m-1}(x)+\sum_{j=1}^(J)I(x\in R_{jm}) fm(x)=fm1(x)+j=1(J)I(xRjm)
3)加权计算 m m m棵决策树的预测结果,得到最终学习器。
f ( x ) = f M ( x ) = f 0 ( x ) + ∑ m = 1 M ∑ j = 1 J I ( x ∈ R j m ) f(x)=f_M(x)=f_0(x)+\sum_{m=1}^{M}\sum_{j=1}^{J}I(x\in R_{jm}) f(x)=fM(x)=f0(x)+m=1Mj=1JI(xRjm)

  1. GBDT常用的调参参数

框架参数:
n_estimators:弱学习器的最大个数
learning_rate:每个弱学习器都有一个权重参数,默认是0.1
subsample:子采样比例,用于拟合个体基学习器的样本比例
loss:损失函数的选择

弱学习器参数:
max_features:划分时考虑的特征数量
max_depth:每棵子树的深度,默认为3
min_samples_split:子树继续划分的条件
min_samples_leaf:叶子节点最少的样本数
min_weight_fraction_leaf:限制了叶子节点所有样本权重和的最小值
max_leaf_nodes:最大叶子节点数量
min_impurity_split:最小基尼不纯度

  1. GBDT的使用场景

GBDT适用于回归问题(线性和非线性);
GBDT也可用于二分类问题和多分类问题。

  1. GBDT的优缺点

优点
1)可灵活处理各种类型的数据,包括连续型和离散型
2)使用一些健壮的损失函数
3)很好的利用弱分类器进行级联
4)充分考虑每个分类器的权重

缺点
由于弱学习器之间存在依赖关系,难以并行训练数据。

  1. 随机森林的原理

随机森林在以决策树作为基学习器构建bagging集成的基础上,进一步在决策树的训练过程中加入了随机属性的选择。
具体来说,传统决策树在选择划分属性时是在当前结点的所有候选属性(假定有 d d d个)中选择一个最优属性;而在随机森林中,对基决策树的每个结点,先从该结点的侯选属性集合中随机选择一个包含 k k k个属性的子集,然后再从这个子集中选择一个最优属性用于划分。抽取的属性数 k k k的选择比较重要,一般推荐 K = l o g 2 d K=log_2d K=log2d。由此,随机森林的基学习器的“多样性”不仅来自样本的扰动,还来自属性的扰动,使得最终集成的泛化能力进一步增强。

  1. 随机森林的优缺点

优点
1)在当前的很多数据集上,相对其他的算法有着很大的优势,表现良好
2)能够处理高维度的数据,并且不用做特征选择
3)在训练完后,它能够给出哪些特征比较重要
4)在创建随机森林的时候,对generalization error使用的是无偏估计,模型泛化能力强
5)训练速度快,容易做成并行化方法
6)在训练过程中,能够检测到特征之间的互相影响
7)实现比较简单
8)对于不平衡的数据集来说,它可以平衡误差
9)如果有很大一部分的特征遗失,仍可以维持准确度

缺点
1)随机森林已经被证明在某些噪音较大的分类或者回归问题上会拟合
2)对于不同取值的属性的数据,取值划分较多的属性会对随机森林产生更大的影响,所以随机森林在这种数据上产出的属性权值是不可信的

  1. 随机森林里面的决策树分别长什么样,怎么剪枝

随机森林将单个决策树的输出整合起来生成最后的输出结果。
剪枝的意义是防止决策树生成过于庞大的子叶,避免实验预测结果过拟合,在实际生产中效果很差。

  1. bagging原理

给定包含 m m m个样本的数据集,先随机取出一个样本放入采样集中,再把该样本放回初始数据集,使得下次采样时该样本仍有可能被选中,这样,经过 m m m次随机采样操作,可得到含 m m m个样本的采样集,初始训练集中约有63.2%的样本出现在采样集中,然后基于每个采样集训练出一个基学习器,再将这些基学习器进行结合。
在这里插入图片描述

  1. boosting原理

boosting是一族可将弱学习器提升为强学习器的算法,这族算法的工作机制类似:先从初始训练集训练出一个基学习器,再根据基学习器的表现对训练样本分布进行调整,使得先前基学习器做错的训练样本在后续受到更多关注,然后基于调整后的样本分布来训练下一个基学习器;如此重复进行,直至基学习器数目达到事先指定的值 T T T,最终将这 T T T个基学习器进行加权结合。

  1. bagging和boosting的区别

1)样本选择
bagging:训练集是在原始集中有放回选取的,从原始集中选出的各轮训练集之间是独立的。
boosting:每一轮的训练集不变,只是训练集中每个样例在分类器中的权重发生变化,而权重是根据上一轮的分类结果进行调整。
2)样例权重
bagging:使用均匀取样,每个样例的权重相等
boosting:根据错误率不断调整样例的权值,错误率越大权重越大。
3)预测函数
bagging:所有预测函数的权重相等。
boosting:每个弱分类器都有相应的权重,对于分类误差小的分类器会有更大的权重。
4)并行计算
bagging:各个预测函数可以并行生成
boosting:各个预测函数只能顺序生成,因为后一个模型参数需要前一轮模型的结果。

  1. XGBOOST和GDBT的联系与区别

1)GBDT是机器学习算法,XGBoost是该算法的工程实现。
2)正则项:在使用CART作为基分类器时,XGBoost显式地加入了正则项来控制模型的复杂度,有利于防止过拟合,从而提高模型的泛化能力
3)导数信息:GBDT在模型训练时只使用了代价函数的一阶导数信息,XGBoost对代价函数进行二阶泰勒展开,同时使用一阶和二阶导数
4)基学习器:传统的GBDT采用CART作为基学习器,XGBoost支持多种类型的基分类器,比如线性分类器
5)子采样:传统的GBDT在每轮迭代时使用全部的数据,XGBoost则采用了与随机森林相似的策略,支持对数据进行采样。
6)缺失值处理:传统GBDT没有设计对缺失值进行处理,XGBoost能够自动学习出缺失值的处理策略
7)并行化:传统GBDT没有进行并行化设计,注意不是树维度的并行,而是特征维度的并行。XGBoost预先将每个特征按特征值排序,然后存储为块结构,分裂结点时可以采用多线程并行查找每个特征的最佳分割点,极大提升训练速度。

  1. AdaBoost和GBDT的联系与区别

  2. 随机森林和 GBDT 的联系与区别

  3. XGBOOST和lightgbm的区别和适用场景

参考文献:
https://zhuanlan.zhihu.com/p/65389367
https://blog.youkuaiyun.com/pearl8899/article/details/105461173
https://zhuanlan.zhihu.com/p/57965634
https://blog.youkuaiyun.com/keepreder/article/details/47273297
https://blog.youkuaiyun.com/Datawhale/article/details/103725122
https://cloud.tencent.com/developer/article/1387682

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值