机器学习--分类算法--集成学习算法理论(RF/AdaBoost/GBDT/XGBoost算法)

目录

一 集成学习背景

1 集成学习概念

2 集成学习优势

1)弱分类器之间存在差异性的问题

2)对于数据集过大或者过小的问题

3)对于数据集的划分边界过于复杂,线性模型很难描述的问题

4)对于多个异构数据集而言,数据集很难合并的问题

3 集成学习三种思想

1)Bagging思想(Bootstrap Aggregating,自主汇聚法)

2)Boosting思想(存在弱学习器,可通过提升技术变成强学习器)

3)Stacking思想

二 Bagging

1 随机森林算法(Random Forest)

1)算法原理

2)优点

3)缺点

2 随机森林的推广算法

1)Extra Tree算法原理(一般不推荐使用)

2)Totally Random Trees Embedding算法原理(TRTE,一种无监督的特征转换)

3)Isolation Forest算法原理(IForest,一种异常点检测算法)

三 Boosting思想

1 AdaBoost算法

1)概念(关注提升过程)

2)算法原理

3)算法流程

4)算法优缺点

2 GBDT(Gradient Boosting Dicision Tree)

1)算法概念

2)算法流程(以回归问题为例)

3)算法处理分类问题,损失函数采用对数损失函数(交叉熵损失函数)

4)算法优缺点

3 XGBOOST(GBDT的变种算法)

1)算法概念

2)算法原理

3)算法学习策略(树生成策略)

4)XGBoost特性(优点)

四 Stacking思想


一 集成学习背景

1 集成学习概念

指将若干个学习器进行组合而得到一个新的学习器

2 集成学习优势

1)弱分类器之间存在差异性的问题

导致分类边界的不同(换言之存在错误),那么将多个弱分类器合并之后,会得到更加合理的分类边界

2)对于数据集过大或者过小的问题

我们可以采用划分或者有放回操作,得到不同的数据子集,分别训练不同的学习器,在组合成一个新的学习器

3)对于数据集的划分边界过于复杂,线性模型很难描述的问题

可以训练多个学习器,再组合成一个新的学习器

4)对于多个异构数据集而言,数据集很难合并的问题

可以对每个数据集训练一个学习器,在组合成一个新的学习器

3 集成学习三种思想

1)Bagging思想(Bootstrap Aggregating,自主汇聚法)

在原始数据集上\left \{ X_{i} \right \}_{i=1}^{m}通过bootstap有放回抽样方式,抽取出S个新的数据集\left \{ X_{i}^{​{}'} \right \}_{i=1}^{m}(存在重复数据,实际训练时需去重),分别训练S个学习器,并进行组合成新的学习器(并行训练)

机器学习--分类算法--集成学习算法理论(RF/AdaBoost/GBDT/XGBoost算法)_第1张图片

2)Boosting思想(存在弱学习器,可通过提升技术变成强学习器)

每一步产生弱学习器,并加权累计到总学习器上,且每一步的弱学习器生成都是依据损失函数的梯度方式(串行训练)

3)Stacking思想(堆叠+分阶段)

训练多个学习器产生多个输出,并作下个学习器的输入,并重复多个阶段进行(类似于深度学习中的神经网络)

注意:Bagging与Boosting区别

  • 第一点:样本角度

Bagging每一轮样本是从原始数据中有放回随机抽取的

Boosting每一轮样本为原始数据,但是样本权重或者目标属性由上一轮损失函数调整

  • 第二点:计算方式角度

Bagging采用并行计算

Boosting采用串行计算

  • 第三点:泛化误差角度

Bagging降低的是模型的方差(var=E[(f(x)-\bar{f}(x))^2]

Boosting降低的是模型的偏差(bias=E[(y-\bar{f}(x))^{2}]

二 Bagging

机器学习--分类算法--集成学习算法理论(RF/AdaBoost/GBDT/XGBoost算法)_第2张图片

1 随机森林算法(Random Forest)

1)算法原理

  • 在原始数据集中采用自助法(Bootstrap)抽取出新数据集
  • 从所有属性中随机抽取K个特征属性,再进行选择特征属性和分裂特征属性(纯度损失的度量)创建决策树
  • 重复上述步骤S次,创建S个决策树
  • 将S个决策树形成森林,通过平均值法或者多数表决法进行预测样本

2)优点

第一点:无需进行交叉验证或者使用一个独立测试集来获取误差的无偏估计(换言之它可以在内部进行误差的无偏估计)

  • oob样本(袋外样本)

数据集足够大,采用bootstrap抽样,对于第K棵树而言,约有1/3总样本未参与第K棵树的生成,它们被称为第K棵树的袋外样本

  • oob错误率(袋外错误率)

第一步:每个袋外样本,计算它作为袋外样本的树(约有1/3棵树),对其分类情况

第二步:多数表决法预测分类情况

第三步:使用误分类样本个数占总袋外样本的比率作为袋外错误率

第二点:可以得到特征重要度,进行特征选择

  • 随机森林中一个特征被分割的次数越多,那么该特征重要度越高
  • 特征重要度特征重要度 = #随机森林中具有该特征的内部节点总数  /  #随机森林中具有该特征决策树的所有内部节点总数

第三点:可以并行训练,对于大规模数据集具有训练优势

3)缺点

第一点:对于特别的异常样本,使得RF容易陷入过拟合

第二点:对于取值较多的特征,使得RF决策受到影响

2 随机森林的推广算法

1)Extra Tree算法原理(一般不推荐使用)

  • 原始数据集不采用抽样方式,直接使用原始数据集
  • 从所有特征属性中随机选择K个属性,再从K个属性随机选择特征属性以及分裂特征属性,创建树
  • 重复上述步骤S次,创建S个树
  • S个树形成森林,采用平均值法或者多数表决发,预测样本

注意:在某些特别情况下,可能优于RF算法

2)Totally Random Trees Embedding算法原理(TRTE,一种无监督的特征转换)

  • 在原始数据集中采用自助法(Bootstrap)抽取出新数据集
  • 计算所有特征属性的方差,从中选择方差最大的特征n_{k},使用最大特征的方差中位数n_{kv},划分为两个分支,创建树
  • 重复上述步骤S次,创建S个树
  • S个树形成森林,从而每个样本在每棵树上的叶子节点位置确定下来,将位置信息转换成向量即可

注意:是一种非监督的特征转换方式(RF+KD-Tree),可以将数据从低维度映射到高维度

机器学习--分类算法--集成学习算法理论(RF/AdaBoost/GBDT/XGBoost算法)_第3张图片

3)Isolation Forest算法原理(IForest,一种异常点检测算法)

  • 从原始数据集中,随机抽取少量样本数据形成新的数据集
  • 从所有特征属性中随机选择K个属性,再从K个属性中随机选择特征属性以及分裂特征属性,创建树(深度一般不深)
  • 重复上述步骤T次,形成T个树
  • 将T个树形成森林,再将测试点x拟合到T棵树上,进行异常点检测

         第一步:计算该样本在T棵决策树上的叶子节点深度h_{_t}(x),求得平均深度h(x)

         第二步:m为样本个数,\xi为欧拉常数:

                        c(m)=2ln(m)+\xi -2*\frac{m-1}{m}

         第三步:从而测试点x作为异常点概率:p(x,m)=2^{-\frac{h(x))}{c(m)}}

注意:异常点检测不需要太多样本以及太多决策树

三 Boosting思想

机器学习--分类算法--集成学习算法理论(RF/AdaBoost/GBDT/XGBoost算法)_第4张图片

1 AdaBoost算法

1)概念(关注提升过程)

算法在每一轮迭代过程中,会给每个样本赋予权重,预测越正确的样本降低其权重,反之提高权重

2)算法原理

第一点:将基分类器的线性组合作为强分类器,给分类误差小的基分类器以较大的权重,给分类误差大的基分类器以较小的权重\alpha _{m}

f(x)=\sum_{m=1}^{M}\alpha_{m}G_{m}(x) \Rightarrow G(x)=sign(f(x))=sign(\sum_{m=1}^{M}\alpha_{m}G_{m}(x)) 

第二点:损失函数(总分类器角度的错误率)

loss=\frac{1}{n}\sum_{i=1}^{n}I(G(x^{(i)})\neq y^{(i)})\Rightarrow loss\leqslant \frac{1}{n}\sum_{i=1}^{n}e^{-y^{(i)}f(x^{(i)})}

\Rightarrow loss= \frac{1}{n}\sum_{i=1}^{n}e^{-y^{(i)}f(x^{(i)})}

第三点:第k-1轮总学习器,第k轮总学习器,m轮总学习器损失函数

  • k-1轮学习器f_{k-1}(x)

f_{k-1}(x)=\sum_{m=1}^{k-1}\alpha _{m}G_{m}(x)

  • k轮学习器f_{k}(x)

f_{k}(x)=\sum_{m=1}^{k}\alpha _{m}G_{m}(x)=\sum_{m=1}^{k-1}\alpha _{m}G_{m}(x)+\alpha _{k}G_{k}(x)=f_{k-1}+\alpha _{k}G_{k}(x)

  • m轮学习器损失函数loss(\alpha_{(m)},G_{(m)}(x))

loss(\alpha_{(m)},G_{(m)}(x))=\frac{1}{n}\sum_{i=1}^{n}e^{-y^{(i)}f_{(m)}(x^{(i)})}=\frac{1}{n}\sum_{i=1}^{n}e^{-y^{(i)}(f_{(m-1)}(x^{(i)})+\alpha_{(m)} G_{(m)}(x^{(i)}))}

\Rightarrow loss(\alpha_{(m)},G_{(m)}(x))=\frac{1}{n}\sum_{i=1}^{n}e^{-y^{(i)}(f_{(m-1)}(x^{(i)}))}e^{-y^{(i)}\alpha_{(m)} G_{(m)}(x^{(i)})}=\frac{1}{n}\sum_{i=1}^{n}\bar{w}_{mi}e^{-y^{(i)}\alpha_{(m)} G_{(m)}(x^{(i)})}

\Rightarrow loss(\alpha_{(m)},G_{(m)}(x))=\frac{1}{n}\sum_{i=1}^{n}\bar{w}_{mi}e^{-y^{(i)}\alpha_{(m)} G_{(m)}(x^{(i)})},\bar{w}_{mi}=e^{-y^{(i)}(f_{(m-1)}(x^{(i)}))}

第四点:使m轮损失函数达到最小值时的\alpha _{m},G_{m}(x),是Adaboost的最终求解

loss(\alpha_{(m)},G_{(m)}(x))=\frac{1}{n}\sum_{n=1}^{n}\bar{w}_{mi}e^{-y^{(i)}\alpha_{(m)} G_{(m)}(x^{(i)})},\bar{w}_{mi}=e^{-y^{(i)}(f_{(m-1)}(x^{(i)}))}

  • 每一轮G分类器在训练过程中,是使得误差率(基分类器角度)越小越好

G_{m}^{*}=\underset{G_{m}}{\arg min}\frac{1}{n}\sum_{n=1}^{n}\bar{w}_{mi}I(G_{m}(x^{(i)})\neq y^{(i)})

 \Rightarrow \varepsilon _{m}=p(G_{m}(x^{(i)})\neq y^{(i)})=\frac{1}{n}\sum_{i=1}^{n}\bar{w}_{mi}I(G_{m}(x^{(i)})\neq y^{(i)})

  • 每一轮中对损失函数loss(\alpha_{(m)},G_{(m)}(x))\alpha _{m}偏导

\frac{\partial loss}{\partial \alpha _{m}}=0\Rightarrow \alpha _{m}=\frac{1}{2}ln\frac{1-\varepsilon _{m}}{\varepsilon _{m}}

注意:求解\alpha _{m}偏导过程

loss(\alpha_{m},G_{m}(x))=\frac{1}{n}\sum_{i=1}^{n}\bar{w}_{mi}e^{-y^{(i)}\alpha_{m}G_{m}(x^{(i)})}

=\frac{1}{n}\sum_{G_{m}(x^{(i)})= y^{(i)} }\bar{w}_{mi}e^{-y^{(i)}\alpha_{m}G_{m}(x^{(i)})}+\frac{1}{n}\sum_{G_{m}(x^{(i)})\neq y^{(i)} }\bar{w}_{mi}e^{-y^{(i)}\alpha_{m}G_{m}(x^{(i)})}

+\frac{1}{n}\sum_{G_{m}(x^{(i)})\neq y^{(i)} }\bar{w}_{mi}e^{y^{(i)}\alpha_{m}G_{m}(x^{(i)})}-\frac{1}{n}\sum_{G_{m}(x^{(i)})\neq y^{(i)} }\bar{w}_{mi}e^{y^{(i)}\alpha_{m}G_{m}(x^{(i)})}

=\frac{1}{n}\sum_{G_{m}(x^{(i)})= y^{(i)} }\bar{w}_{mi}e^{-\alpha_{m}}+\frac{1}{n}\sum_{G_{m}(x^{(i)})\neq y^{(i)} }\bar{w}_{mi}e^{\alpha_{m}}+\frac{1}{n}\sum_{G_{m}(x^{(i)})\neq y^{(i)} }\bar{w}_{mi}e^{-\alpha_{m}}-\frac{1}{n}\sum_{G_{m}(x^{(i)})\neq y^{(i)} }\bar{w}_{mi}e^{-\alpha_{m}}

=\frac{1}{n}\sum_{G_{m}(x^{(i)})= y^{(i)} }\bar{w}_{mi}e^{-\alpha_{m}}+\frac{1}{n}\sum_{G_{m}(x^{(i)})\neq y^{(i)} }\bar{w}_{mi}e^{-\alpha_{m}}+\frac{1}{n}\sum_{G_{m}(x^{(i)})\neq y^{(i)} }\bar{w}_{mi}e^{\alpha_{m}}-\frac{1}{n}\sum_{G_{m}(x^{(i)})\neq y^{(i)} }\bar{w}_{mi}e^{-\alpha_{m}}

=\frac{1}{n}\sum_{i=1}^{n}\bar{w}_{mi}e^{-\alpha_{m}}+\frac{1}{n}\sum_{G_{m}(x^{(i)})\neq y^{(i)} }\bar{w}_{mi}e^{\alpha_{m}}-\frac{1}{n}\sum_{G_{m}(x^{(i)})\neq y^{(i)} }\bar{w}_{mi}e^{-\alpha_{m}}

\Rightarrow \epsilon _{m}=\frac{1}{n}\sum_{i=1}^{n}\bar{w}_{mi}I(G_{m}(x^{(i)})\neq y^{(i)})=\frac{1}{n}\sum_{G_{m}(x^{(i)})\neq y^{(i)}}\bar{w}_{mi}

\Rightarrow \frac{1}{n}\sum_{i=1}^{n}\bar{w}_{mi}e^{-\alpha_{m}}=k

=ke^{-\alpha_{m}}+\epsilon _{m}e^{\alpha_{m}}-\epsilon _{m}e^{-\alpha_{m}}

\therefore loss(\alpha_{m},G_{m}(x))=\sum_{i=1}^{n}\bar{w}_{mi}e^{-y^{(i)}\alpha_{m}G_{m}(x^{(i)})}=ke^{-\alpha_{m}}+\epsilon _{m}e^{\alpha_{m}}-\epsilon _{m}e^{-\alpha_{m}}

\frac{\partial loss}{\partial \alpha _{m}}=-ke^{-\alpha _{m}}+\epsilon _{m}e^{\alpha _{m}}+\epsilon _{m}e^{-\alpha _{m}}=0

\Rightarrow \epsilon _{m}e^{\alpha _{m}}=ke^{-\alpha _{m}}-\epsilon _{m}e^{-\alpha _{m}}=(k-\epsilon _{m})e^{-\alpha _{m}}

\Rightarrow \epsilon _{m}e^{2\alpha _{m}}=(k-\epsilon _{m})

\Rightarrow e^{2\alpha _{m}}=\frac{k-\epsilon _{m}}{ \epsilon _{m}}

\Rightarrow\alpha _{m}=\frac{1}{2}log(\frac{k-\epsilon _{m}}{ \epsilon _{m}})

保证\frac{k-\epsilon _{m}}{ \epsilon _{m}}>0,即k=1

\Rightarrow\alpha _{m}=\frac{1}{2}log(\frac{1-\epsilon _{m}}{ \epsilon _{m}})

3)算法流程

第一步:假定数据集

\left \{ (x^{(i)},y^{(i)})\right \}_{i=1}^{n}

第二步:初始化训练集样本分布权重

D_{1}=\left \{ \bar{w}_{11}, \bar{w}_{12},...,\bar{w}_{1n}\right \},\bar{w}_{1i}=\frac{1}{n}

第三步:使用具有权值分布D_{m}的训练集学习,得到基学习器G_{m}(x)

G_{m}(x)\rightarrow \left \{ -1,1 \right \}

第四步:计算G_{m}(x)在训练集上的分类误差\varepsilon _{m}

\varepsilon _{m}=p(G_{m}(x^{(i)})\neq y^{(i)})=\sum_{i=1}^{n}\bar{w}_{mi}I(G_{m}(x^{(i)})\neq y^{(i)})

第五步:计算G_{m}(x)的权重系数\alpha _{m}(针对基分类器)

\alpha _{m}=\frac{1}{2}log_{2}\frac{1-\varepsilon _{m}}{\varepsilon _{m}}

注意:误差\epsilon _{m}越大,权重系数\alpha _{m}越小

第六步:更新具有权值分布D_{m+1}的训练集(使用归一化因子Z_{m}

D_{m+1}=\left \{ \bar{w}_{m+1,1},\bar{w}_{m+1,2},...,\bar{w}_{m+1,n} \right \}

\bar{w}_{m+1,i}=\frac{\bar{w}_{mi}e^{-y^{(i)}\alpha _{m}G_{m}(x^{(i)})}}{Z_{m}}

Z_{m}=\sum_{i=1}^{n}\bar{w}_{mi}e^{-y^{(i)}\alpha _{m}G_{m}(x^{(i)})}

第七步:构建基本学习器的线性组合

f(x)=\sum_{m=1}^{M}\alpha _{m}G_{m}(x)

第八步:最终分类器

G(x)=sign(f(x))=sign(\sum_{m=1}^{M}\alpha _{m}G_{m}(x))\rightarrow \left \{ -1,1 \right \}

注意:可以指定每个弱学习器的缩减系数v

G(x)=sign(f(x))=sign(\sum_{m=1}^{M}v*\alpha _{m}G_{m}(x))\rightarrow \left \{ -1,1 \right \}

4)算法优缺点

第一点:优点

  • 可以处理连续值或者离散值的目标属性
  • 可以将不同的分类算法作为弱学习器
  • 解释性强,结构简单

第二点:缺点

  • 对异常样本敏感,即异常样本在迭代过程中获得比较高的权值,影响模型的效果
  • 迭代次数(弱分类器个数)不好确定
  • 弱分类器之间存在关联,无法并行训练模型,只能串行训练模型

2 GBDT(Gradient Boosting Dicision Tree)

1)算法概念

算法在每一轮迭代过程中,使用残差更新目标属性,预测越正确的样本残差越小,反之越大

注意:GBDT由三部分构成,回归树、梯度提升、缩减系数

2)算法流程(以回归问题为例)

第一步:假定数据集

\left \{x^{(i)},y^{(i)} \right \}_{i=1}^{n}

第二步:基学习器采用回归树,使用平方和损失或者绝对值损失函数(推荐平方和损失函数)

  • 设定F(x)由一组基回归树h_{i}(x)组成

F(x)=F_{_{0}}(x)+\sum_{i=1}^{M}h_{i}(x)\overset{v}{\rightarrow} F(x)=F_{_{0}}(x)+v\sum_{i=1}^{M}h_{i}(x)

注意:为防止基回归树过拟合,添加缩放系数

  • 平方和损失函数(推荐使用)

loss(y,F(x))=\frac{1}{2}\sum_{i=1}^{n}(y^{(i)}-F(x^{(i)}))^{2}

  • 绝对值损失函数(不推荐使用)

loss(y,F(x))=\sum_{i=1}^{n}\left |y^{(i)}-F(x^{(i)}) \right |

  • 最优解

F^{*}(x)=\underset{F}{\arg min}(loss(y,F(x)))

第三步:初始化初始函数F_{0}(x)=C(常数函数)

F_{0}(x)=\underset{C}{\arg min}(loss(y,C))

机器学习--分类算法--集成学习算法理论(RF/AdaBoost/GBDT/XGBoost算法)_第5张图片

注意:实际算法中C一般按照均值方法初始化常数函数F_{0}(x)=C

第四步:第m轮迭代中构建回归树

  • 第m轮迭代中(考虑单个样本损失),使用梯度下降方法计算学习率(残差)\alpha _{mi}

\alpha _{mi}=-[\frac{\partial loss(y^{(i)},F(x^{(i)}))}{\partial F(x^{(i)})}|_{F(x^{(i)})=F_{m-1}(x^{(i)})}]=y^{(i)}-F_{m-1}(x^{(i)})

  • 第m轮迭代中,使用数据集\left \{ x^{(i)}, \alpha _{mi}\right \}_{i=1}^{n}拟合CART回归树,得到第m棵树

第一点:第m棵树第j个叶子节点的预测值c_{mj}

c_{mj}=\underset{c}{\arg min}(\sum_{x \subset leaf_{j}}loss(y,F_{m-1}(x)+c))

第二点:样本在第m棵树的预测值h_{m}(x)

 h_{m}(x)=\sum_{j}^{|leaf^{m}|}c_{mj}I(x\subset leaf_{j}^{m})

  • 第m轮迭代中,样本x的预测值

F_{m}(x)=F_{m-1}(x)+h_{m}(x)=F_{m-1}(x)+\sum_{j}^{|leaf^{m}|}c_{mj}I(x\subset leaf_{j}^{m})

第五步:总模型F(x)

F(x)=F_{0}(x)+\sum_{m=1}^{M}\sum_{j}^{|leaf^{m}|}c_{mj}I(x \subset leaf_{j}^{m})

添加缩放系数v

F(x)=F_{0}(x)+v\sum_{m=1}^{M}\sum_{j}^{|leaf^{m}|}c_{mj}I(x\subset leaf_{j}^{m})

3)算法处理分类问题,损失函数采用对数损失函数(交叉熵损失函数)

第一点:二分类

  • 损失函数loss(y,F(x))

loss(y,F(x))=-\sum_{i=1}^{n}[y^{(i)}logp(x^{(i)})+(1-y^{(i)})log(1-p(x^{(i)}))],p(x^{(i)})=\frac{1}{1+e^{-F(x^{(i)})}}

  • 学习率\alpha _{mi}

\alpha _{mi}=-[\frac{\partial loss(y^{(i)},F(x^{(i)}))}{\partial F(x^{(i)})}|_{F(x^{(i)})=F_{m-1}(x^{(i)})}]=y^{(i)}-p_{m-1}(x^{(i)})

  • 初始值F_{0}(x)

F_{0}(x)=log(\frac{|+|}{|-|})

注意:表示总样本中正负样本的比率的对数

第二点:多分类(目标属性采用多标签)

  • 损失函数:loss(y,F(x))

loss(y,F(x))=-\sum_{i=1}^{n}\sum_{k=1}^{K}y^{(i)}_{k}logp_{k},p_{k}=\frac{e^{F_{k}(x^{(i)})}}{\sum_{l=1}^{K}e^{F_{l}(x)}}

  • 学习率\alpha _{mli}

\alpha _{mli}=-[\frac{\partial loss(y^{(i)}_{l},F_{l}(x^{(i)}))}{\partial F_{l}(x^{(i)})}|_{F_{l}(x^{(i)})=F_{m-1,l}(x^{(i)})}]=y^{(i)}_{l}-p_{m-1,l}(x^{(i)})

  • 初始值F_{0}(x)

F_{0,l}(x)=0

4)算法优缺点

第一点:优点

  • 可以处理连续值和离散值的目标属性
  • 在相对较少的调参情况下,模型效果也不错

第二点:缺点

  • 弱分类器之间存在关联,无法并行训练模型,只能串行训练

3 XGBOOST(GBDT的变种算法)

1)算法概念

算法在每一轮迭代过程中,使用残差更新目标属性,预测越正确,残差越小,反之亦然

2)算法原理

第一点:损失函数 = GBDT损失函数 + 正则化项(L2正则)

loss(y,F(x))=\sum_{i=1}^{n}l(y^{(i)},F(x^{(i)}))+\sum_{m=1}^{M} \Omega (f_{m})

  • f_{m}(x)表示x在第m棵树上的第q(x)个节点预测值(q(x)表示节点数)

f_{m}(x)=w_{q(x)}

  • \Omega (f_{m})正则化项展开式(\gamma ,\lambda属于超参,T为m棵树上叶子节点个数)

\Omega (f_{m})=\gamma T+\frac{1}{2}\lambda \sum_{j=1}^{T}w_{j}^{2}

第二点:第m轮迭代后,损失函数

loss(y,F(x))=\sum_{i=1}^{n}loss(y^{(i)},F_{m-1}(x^{(i)})+f_{m}(x^{(i)}))+\sum_{i=1}^{m-1} \Omega (f_{i}) + \Omega (f_{m})

  • 泰勒公式

f(x)=\sum _{n=0}^{\infty }\frac{f^{n}(x_{0})}{n!}(x-x_{0})^{n}+R_{n}(x)

  • 损失函数loss(y,F(x))=loss(y,F_{m-1}(x)+f_{m}(x))F_{m-1}(x^{(i)})处展开二阶泰勒公式

g_{i}=\frac{\partial l(y,F_{m}(x^{(i)}))}{\partial F_{m}(x^{(i)})}|_{F_{m}(x^{(i)})=F_{m-1}(x^{(i)})}

h_{i}= \frac{\partial^2 l(y,F_{m}(x^{(i)}))}{\partial^2 F_{m}(x^{(i)})}|_{F_{m}(x^{(i)})=F_{m-1}(x^{(i)})}

loss(y,F(x))\approx

\sum_{i=1}^{n}(l(y^{(i)},F_{m-1}(x^{(i)}))+g_{i}f_{m}(x^{(i)})+\frac{1}{2}h_{i}f^{2}_{m}(x^{(i)}))+\sum_{i=1}^{m-1} \Omega (f_{i})+ \Omega (f_{m})

  • 不考虑常数项的损失函数

loss = \sum_{i=1}^{n}(g_{i}f_{m}(x^{(i)})+\frac{1}{2}h_{i}f^{2}_{m}(x^{(i)}))+\Omega (f_{m})

\Rightarrow loss=\sum_{i=1}^{n}(g_{i}w_{q(x^{(i)})}+\frac{1}{2}h_{i}w^{2}_{q(x^{(i)})})+\gamma T+\frac{1}{2}\lambda \sum_{j=1}^{T}w_{j}^{2}

  • 定义第m棵树上的叶子节点j上所有样本集合I_{j}

I_{j}=\left \{ i|q(x^{(i)}) ==j\right \}

\Rightarrow loss=\sum_{j=1}^{T}((\sum_{i\subset I_{j}}g_{i})w_{j}+\frac{1}{2}(\sum_{i\subset I_{j}}h_{i})w^{2}_{j})+\gamma T+\frac{1}{2}\lambda \sum_{j=1}^{T}w_{j}^{2}

第三步:损失函数最小时的w_{j}

loss=\sum_{j=1}^{T}((\sum_{i\subset I_{j}}g_{i})w_{j}+\frac{1}{2}(\sum_{i\subset I_{j}}h_{i})w^{2}_{j})+\gamma T+\frac{1}{2}\lambda \sum_{j=1}^{T}w_{j}^{2}

\Rightarrow loss=\sum_{j=1}^{T}((\sum_{i\subset I_{j}}g_{i})w_{j}+\frac{1}{2}((\sum_{i\subset I_{j}}h_{i})+\lambda )w^{2}_{j})+\gamma T

\Rightarrow G_{j}=\sum_{i\subset I_{j}}g_{i},H_{j}=\sum_{i\subset I_{j}}h_{i}

\Rightarrow loss=\sum_{j=1}^{T}(G_{j}w_{j}+\frac{1}{2}(H_{j}+\lambda )w^{2}_{j})+\gamma T

\Rightarrow \frac{\partial loss }{\partial w_{j}}=\sum_{j=1}^{T}(G_{j}+(H_{j}+\lambda )w_{j})=0

\Rightarrow w_{j}^{*}=-\frac{G_{j}}{H_{j}+\lambda}

第四步:将w_{j}^{*}带入损失函数

loss^{*}=\sum_{j=1}^{T}(-\frac{G_{j}^2}{H_{j}+\lambda }+\frac{1}{2}(H_{j}+\lambda )\frac{G_{j}^2}{(H_{j}+\lambda)^2})+\gamma T

\Rightarrow loss^{*}=-\frac{1}{2}\sum_{j=1}^{T}(\frac{G_{j}^2}{H_{j}+\lambda })+\gamma T

第五步:XGBoost损失函数

loss^{*}=-\frac{1}{2}\sum_{j=1}^{T}(\frac{G_{j}^2}{H_{j}+\lambda })+\gamma T

3)算法学习策略(树生成策略)

第一步:XGBoost算法原理所确定的损失函数,可以使得我们确定节点分裂的信息损失

loss^{*}=-\frac{1}{2}\sum_{j=1}^{T}(\frac{G_{j}^2}{H_{j}+\lambda })+\gamma T

第二步:选择特征属性以及分裂特征属性依据信息损失(不同于决策树的信息损失纯度度量)

  • 对于任意叶子节点而言

第一点:分裂左节点(L)、右节点(R)之前的损失函数

loss=-\frac{1}{2}\frac{G^2}{H+\lambda }+\gamma =-\frac{1}{2}\frac{G_{L}^2+G_{R}^2}{(H_{L}+H_{R})+\lambda }+\gamma

第二点:分裂左节点(L)、右节点(R)之后的损失函数

loss =-\frac{1}{2}\frac{G_{L}^2}{H_{L}+\lambda}+\gamma-\frac{1}{2}\frac{G_{R}^2}{H_{R}+\lambda}+\gamma =-\frac{1}{2}(\frac{G_{L}^2}{H_{L}+\lambda}+\frac{G_{R}^2}{H_{R}+\lambda})+2\gamma

\Rightarrow loss =-\frac{1}{2}(\frac{G_{L}^2}{H_{L}+\lambda}+\frac{G_{R}^2}{H_{R}+\lambda})+2\gamma

  • 叶子节点分裂前后信息损失

Gain=-\frac{1}{2}\frac{G_{L}^2+G_{R}^2}{(H_{L}+H_{R})+\lambda }+\gamma -(-\frac{1}{2}(\frac{G_{L}^2}{H_{L}+\lambda}+\frac{G_{R}^2}{H_{R}+\lambda})+2\gamma)

\Rightarrow Gain=\frac{1}{2}(\frac{G_{L}^2}{H_{L}+\lambda}+\frac{G_{R}^2}{H_{R}+\lambda}-\frac{G_{L}^2+G_{R}^2}{(H_{L}+H_{R})+\lambda })-\gamma

\therefore Gain=\frac{1}{2}(\frac{G_{L}^2}{H_{L}+\lambda}+\frac{G_{R}^2}{H_{R}+\lambda}-\frac{G_{L}^2+G_{R}^2}{(H_{L}+H_{R})+\lambda })-\gamma

  • 选择信息信息损失程度最大的方式进行叶子节点分裂

Gain越大,分裂节点之后的信息损失越大

第三步:节点分裂是采用近似计算(分位数)

选择以及分裂特征属性,不是遍历每一个特征进行各种可能的分裂属性,而是依据二阶导数g_{i}作为权重的分位数进行分裂属性

机器学习--分类算法--集成学习算法理论(RF/AdaBoost/GBDT/XGBoost算法)_第6张图片

第一点:定义集合D_{k}

D_{k}=\left \{ (x_{1k},h_{1}),(x_{2k},h_{2}) ,...,(x_{ik},h_{i}),...,(x_{nk},h_{n})\right \}

  • x_{ik}:表示第i个样本第k个特征属性值
  • h_{i}:表示第i个样本损失函数的二阶导数

第二点:确定分位数位置

  • 确定分位数集合quantile,比如三分位数:quantile=\left \{ 1/3,2/3 \right \}
  • 计算分位数位置

 location=(\sum_{i=1}^{n}h_{i}) *quantile

第三点:在第k个特征的分位数位置进行分裂属性,计算信息损失程度大小

4)XGBoost特性(优点)

  • 第一点:列采样方式,借鉴随机森林做法(即随机抽取k个特征构建树),有效降低过拟合
  • 第二点:自动处理(填充)缺失值
  • 第三点:并行计算,在特征粒度上计算Gain值采用并行计算,但是树的构建依然是串行,有效提升计算效率
  • 第四点:正则项,降低模型复杂度,有效降低过拟合
  • 第五点:基学习器不仅支持CART,也可以是线性回归,Logistic回归
  • 第六点:支持自定义损失函数,但是要求二阶可导

四 Stacking思想

机器学习--分类算法--集成学习算法理论(RF/AdaBoost/GBDT/XGBoost算法)_第7张图片

目前几乎不使用,深度学习神经网络比其更加具有优势

你可能感兴趣的:(python,机器学习,数据挖掘,adaboost算法,算法)