经典的机器学习模型(叁)

1 CART(Classification and Regression Tree)

决策树的本质就是将空间分为若干个区域,对空间向量的垂直分割。
给定训练数据 D = { ( x ( 1 ) , y ( 1 ) ) , ( x ( 2 ) , y ( 2 ) ) . . . ( x ( n ) , y ( n ) ) } D=\{ (x^{(1)},y^{(1)}),(x^{(2)},y^{(2)})...(x^{(n)},y^{(n)})\} D={(x(1),y(1)),(x(2),y(2))...(x(n),y(n))}我们想要学习一个CART来最小化下列函数:
L o s s = m i n ( m i n x ∈ R 1 ( j , s ) ∑ ( y ( i ) − c 1 ) 2 + m i n x ∈ R 2 ( j , s ) ∑ ( y ( i ) − c 2 ) 2 ) Loss=min(min_{x\in R_1(j,s)}\sum(y^{(i)}-c_1)^2+min_{x\in R_2(j,s)}\sum(y^{(i)}-c_2)^2) Loss=min(minxR1(j,s)(y(i)c1)2+minxR2(j,s)(y(i)c2)2)
R 1 ( j , s ) = { x ∣ x j ≤ s } R_1(j,s)=\{ x|x_j\leq s\} R1(j,s)={xxjs}
R 2 ( j , s ) = { x ∣ x j > s } R_2(j,s)=\{ x|x_j> s\} R2(j,s)={xxj>s}
C m = 1 N m ∑ x ∈ R m ( j , s ) y ( i ) C_m=\frac{1}{N_m}\sum_{x\in R_m(j,s)}y^{(i)} Cm=Nm1xRm(j,s)y(i), m = 1 , 2 m=1,2 m=1,2
CART
在上图中,数据被分成两段,在此划分下的损失函数是,左半边的数据平均值与真实数据的差值的平方和,加上右半边数据平均值与差值的平方和,我们想要求出使得损失函数最小时的分割点。在构造CART时,如果我们有多个变量,那么我们需要遍历每一个变量找到最佳的划分点,使得损失函数最小化。

2 集成学习(Ensemble Learning )

2.1 集成学习在机器学习算法中具有较高的准去率,不足之处就是模型的训练过程可能比较复杂,效率不是很高。目前接触较多的集成学习主要有2种:基于Boosting的和基于Bagging,前者的代表算法有Adaboost、GBDT、XGBOOST、后者的代表算法主要是随机森林。

2.2 集成学习的主要思想
集成学习的主要思想是利用一定的手段学习出多个分类器,而且这多个分类器要求是弱分类器,然后将多个分类器进行组合公共预测。核心思想就是如何训练处多个弱分类器以及如何将这些弱分类器进行组合。

2.3、集成学习中弱分类器选择
一般采用弱分类器的原因在于将误差进行均衡,因为一旦某个分类器太强了就会造成后面的结果受其影响太大,严重的会导致后面的分类器无法进行分类。常用的弱分类器可以采用误差率小于0.5的,比如说逻辑回归、SVM、神经网络。

2.4、多个分类器的生成
可以采用随机选取数据进行分类器的训练,也可以采用不断的调整错误分类的训练数据的权重生成新的分类器。

2.5、多个弱分类区如何组合
基本分类器之间的整合方式,一般有简单多数投票、权重投票,贝叶斯投票,基于D-S证据理论的整合,基于不同的特征子集的整合。

2.1 Bagging(Bootstrap Aggregating)

Bootstrap采样

有放回的采样法,可以更真实的了解数据,忽略一些噪声的影响。

随机森林(Random Forest)

两个随机过程:第一个就是输入数据是随机的从整体的训练数据中选取一部分作为一棵决策树的构建,而且是有放回的选取;第二个就是每棵决策树的构建所需的特征是从整体的特征集随机的选取的,这两个随机过程使得随机森林很大程度上避免了过拟合现象的出现。

算法步骤:

1、从训练数据中选取n个数据作为训练数据输入,一般情况下n是远小于整体的训练数据N的,这样就会造成有一部分数据是无法被去到的,这部分数据称为袋外数据,可以使用袋外数据做误差估计。

2、选取了输入的训练数据的之后,需要构建决策树,具体方法是每一个分裂结点从整体的特征集M中选取m个特征构建,一般情况下m远小于M。

3、在构造每棵决策树的过程中,按照选取最小的基尼指数进行分裂节点的选取进行决策树的构建。决策树的其他结点都采取相同的分裂规则进行构建,直到该节点的所有训练样例都属于同一类或者达到树的最大深度。

4、 重复第2步和第3步多次,每一次输入数据对应一颗决策树,这样就得到了随机森林,可以用来对预测数据进行决策。

5、 输入的训练数据选择好了,多棵决策树也构建好了,对待预测数据进行预测,比如说输入一个待预测数据,然后多棵决策树同时进行决策,最后采用多数投票的方式进行类别的决策。

2.2 Boosting(Bootstrap Aggregating)

概念:若分类器在样本上训练形成基础分类器,Boosting框架对训练样本集的操作,形成新样本(样本的权重不同),利用之前的基分类器重新训练生成第二个基分类器,循环n次,形成n个基分类器,然后按照一定的权重比例形成最终的分类器。

Adaboost(Adaptive Boost)

Adaboost是boosting中较为代表的算法,基本思想是通过训练数据的分布构造一个分类器,然后通过误差率求出这个若弱分类器的权重,通过更新训练数据的分布,迭代进行,直到达到迭代次数或者损失函数小于某一阈值。

算法流程:
训练样本: D = { ( x ( 1 ) , y ( 1 ) ) , ( x ( 2 ) , y ( 2 ) ) . . . ( x ( n ) , y ( n ) ) } D=\{ (x^{(1)},y^{(1)}),(x^{(2)},y^{(2)})...(x^{(n)},y^{(n)})\} D={(x(1),y(1)),(x(2),y(2))...(x(n),y(n))} x ( i ) ∈ R n x^{(i)}\in R^n x(i)Rn, y ( i ) ∈ { + 1 , − 1 } y^{(i)}\in \{+1,-1\} y(i){+1,1}
对于每个 x ( i ) x^{(i)} x(i)都有一个对应的权重 W ( i ) W^{(i)} W(i), W ( i ) ∈ R W^{(i)}\in R W(i)R.

Step1:初始化
W = ( W ( 1 ) , W ( 2 ) , . . . W ( n ) ) , W ( i ) = 1 N , i = 1 , 2 , . . . . N W=(W^{(1)},W^{(2)},...W^{(n)}),W^{(i)}=\frac{1}{N},i=1,2,....N W=(W(1),W(2),...W(n)),W(i)=N1,i=1,2,....N

Step2:遍历 k = 1 , 2 , 3.... K k=1,2,3....K k=1,2,3....K
G k ( x ) G_k(x) Gk(x)是一个弱分类器,可以是朴素贝叶斯,决策树,神经网络,SVM等等。
对每一个 G k ( x ) G_k(x) Gk(x),误差 e k e_k ek可以表示为:
e k = P ( G k ( x ) ≠ y ( i ) ) = ∑ W ( i ) I ( G k ( x ) ≠ y ( i ) ) e_k=P(G_k(x)\ne y^{(i)})=\sum W^{(i)}I(G_k(x)\ne y^{(i)}) ek=P(Gk(x)̸=y(i))=W(i)I(Gk(x)̸=y(i))
其中 I ( c o n d i t i o n ) , c o n d i t i o n = t r u e , I = 1 ; c o n d i t i o n = f a l s e , I = 0 I(condition),condition=true,I=1;condition=false,I=0 I(condition),condition=true,I=1;condition=false,I=0
则这个弱分类器的权重可以为 α k \alpha_k αk
α k = 1 2 l n ( 1 − e k e k ) \alpha_k=\frac{1}{2}ln(\frac{1-e_k}{e_k}) αk=21ln(ek1ek)
举例:
e k = 0.5 e_k=0.5 ek=0.5, α k = 1 2 l n ( 1 − 0.5 0.5 ) = 0 \alpha_k=\frac{1}{2}ln(\frac{1-0.5}{0.5})=0 αk=21ln(0.510.5)=0不好的分类器
e k = 0.2 e_k=0.2 ek=0.2, α k = 1 2 l n ( 1 − 0.2 0.2 ) = 1 2 l n 4 \alpha_k=\frac{1}{2}ln(\frac{1-0.2}{0.2})=\frac{1}{2}ln4 αk=21ln(0.210.2)=21ln4好的分类器

Step3:更新第 k k k次迭代时的样本权重 W k ( i ) W_k^{(i)} Wk(i)
W k = ( W k ( 1 ) , W k ( 2 ) , . . . W k ( n ) ) W_k=(W_k^{(1)},W_k^{(2)},...W_k^{(n)}) Wk=(Wk(1),Wk(2),...Wk(n))
W k + 1 ( i ) = W k ( i ) Z k e − α k y ( i ) G k ( x ( i ) ) W_{k+1}^{(i)}=\frac{W_{k}^{(i)}}{Z_k}e^{-\alpha_ky^{(i)}G_k(x^{(i)})} Wk+1(i)=ZkWk(i)eαky(i)Gk(x(i))
如果 y ( i ) = G k ( x ( i ) ) y^{(i)}=G_k(x^{(i)}) y(i)=Gk(x(i)),则 W k ( i ) × 1 e α W_{k}^{(i)}\times\frac{1}{e^\alpha} Wk(i)×eα1将会减小
如果 y ( i ) ≠ G k ( x ( i ) ) y^{(i)}\ne G_k(x^{(i)}) y(i)̸=Gk(x(i)),则 W k ( i ) × e α W_{k}^{(i)}\times{e^\alpha} Wk(i)×eα将会变大
这样一来,我们变增大了那些分错类数据的权重,减小了那些成功分对类数据的权重。
Z k Z_k Zk是一个归一化系数, Z k = ∑ i N W k ( i ) e − α k G k ( x ( i ) ) Z_k=\sum^N_iW_{k}^{(i)}e^{-\alpha_kG_k(x^{(i)})} Zk=iNWk(i)eαkGk(x(i))

Step4:预测
f ( x ( i ) ) = ∑ k = 1 K α k G k ( x ( i ) ) f(x^{(i)})=\sum_{k=1}^K\alpha_kG_k(x^{(i)}) f(x(i))=k=1KαkGk(x(i))
G k ( x ( i ) ) = s i g n ( f ( x ( i ) ) ) G_k(x^{(i)})=sign(f(x^{(i)})) Gk(x(i))=sign(f(x(i)))
当 x &gt; 0 , s i g n ( x ) = 1 ; 当 x = 0 , s i g n ( x ) = 0 ; 当 x &lt; 0 , s i g n ( x ) = − 1 ; 当x&gt;0,sign(x)=1; 当x=0,sign(x)=0; 当x&lt;0, sign(x)=-1; x>0sign(x)=1;x=0sign(x)=0;x<0sign(x)=1

2.3 偏差和方差(Bias-Variance)

偏差和方差
bagging是减少variance,而boosting是减少bias。

Bagging对样本重采样,对每一重采样得到的子样本集训练一个模型,最后取平均。由于子样本集的相似性以及使用的是同种模型,因此各模型有近似相等的bias和variance(事实上,各模型的分布也近似相同,但不独立)。
E [ ∑ x i n ] = E [ x i ] E[\frac{\sum x_i}{n}]=E[x_i] E[nxi]=E[xi],所以说模型的bias和之前的bias相差不大。但是若模型独立, V a r [ ∑ x i n ] = V a r [ X i ] n Var[\frac{\sum x_i}{n}]=\frac{Var[X_i]}{n} Var[nxi]=nVar[Xi],明显降低了Variance.若各个模型相同,则 V a r [ ∑ x i n ] = V a r [ X i ] Var[\frac{\sum x_i}{n}]=Var[X_i] Var[nxi]=Var[Xi]。bagging方法得到的各子模型是有一定相关性的,属于上面两个极端状况的中间态,因此可以一定程度降低variance。为了进一步降低variance,Random forest通过随机选取变量子集做拟合的方式de-correlated了各子模型(树),使得variance进一步降低。boosting是在最小化损失函数,其bias自然逐步下降。但由于是采取这种sequential、adaptive的策略,各子模型之间是强相关的,于是子模型之和并不能显著降低variance。所以说boosting主要还是靠降低bias来提升预测精度。
参考https://www.zhihu.com/question/26760839/answer/40337791

3 GBDT(Gradient Boosting Decision Tree)

GBDT主要由三个概念组成:Regression Decistion Tree、Gradient Boosting与Shrinkage.

3.1 回归树 (Regression Decistion Tree)

提到决策树,相信很多人会潜意识的想到最常见的分类决策树(ID3、C4.5、CART等等),但要把GBDT中的DT也理解为分类决策树那就大错特错了。实际上,决策树不仅可以用于分类,还可用于回归,它的作用在于数值预测,例如明天的温度、用户的年龄等等,而且对基于回归树所得到的数值进行加减是有意义的(例如10岁+5岁-3岁=12岁),这是区别于分类树的一个显著特征(毕竟男+女=是男是女?,这样的运算是毫无道理的)。GBDT在运行时就使用到了回归树的这个性质,它将累加所有树的结果作为最终结果。所以,GBDT中的所有决策树都是回归树,而非分类树。

  • 回归树的每个节点得到的是一个预测值而非分类树式的样本计数,假设在某一棵树的某一节点使用了年龄进行分枝(并假设在该节点上人数>1),那么这个预测值就是属于这个节点的所有人年龄的平均值。
  • 在分枝节点的选取上,回归树并没有选用最大熵值来作为划分标准,而是使用了最小化均方差,即 ∑ i = 1 n ( x i − x ˉ ) 2 n \frac{\sum_{i=1}^{n}{} (x_i-\bar{x} )^2}{n} ni=1n(xixˉ)2。这很好理解,被预测出错的次数越多,错的越离谱,均方差就越大,通过最小化均方差也就能够找到最靠谱的分枝依据。

3.2 梯度提升 (Gradient Boosting)

每一棵树所学习的是之前所有树结论和的残差,这个残差就是一个加预测值后能得真实值的累加量。

输入训练数据 D = { ( x ( 1 ) , y ( 1 ) ) , ( x ( 2 ) , y ( 2 ) ) . . . ( x ( n ) , y ( n ) ) } D=\{ (x^{(1)},y^{(1)}),(x^{(2)},y^{(2)})...(x^{(n)},y^{(n)})\} D={(x(1),y(1)),(x(2),y(2))...(x(n),y(n))},我们目的是为了拟合弱分类器的的残差。
输出回归树。
算法步骤:

  • (1) 初始化
    f 0 ( x ) = a r g m i n c ∑ i = 1 N L ( y i , c ) f_0(x)=argmin_c\sum_{i=1}^{N}L(y_i,c) f0(x)=argminci=1NL(yi,c)
  • (2) 对m=1,2,3……M
    (a) i=1,2,3…N 计算
    r m i = − [ ∂ L ( y ; f ( x i ) ) ∂ f ( x i ) ] f ( x ) = f m − 1 ( x ) r_{mi}=-[\frac{\partial L(y;f(x_i))}{\partial f(x_i)}]_{f(x)=f_{m-1}(x)} rmi=[f(xi)L(y;f(xi))]f(x)=fm1(x)
    (b) 对 r m i r_{mi} rmi拟合回归,得到第m颗树的叶节点区域 r m j r_{mj} rmj,j=1,2,3…J
    © 对j=1,2,3…J 计算
    a r g m i n c ∑ x i ∈ R m j L ( y i , f m − 1 ( x i ) + c ) argmin_c\sum_{x_i\in R_{mj}}L(y_i,f_{m-1}(x_i)+c) argmincxiRmjL(yi,fm1(xi)+c)
    (d) 更新
    f m ( x ) = f m − 1 ( x ) + ∑ j = 1 J c m j I ( x ∈ R m j ) f_m(x)=f_{m-1}(x)+\sum_{j=1}^{J}c_{mj}I(x\in R_{mj}) fm(x)=fm1(x)+j=1JcmjI(xRmj)
    (3) 得到回归树
    f ^ ( x ) = f M ( x ) = ∑ m = 1 M ∑ i = 1 J c m j I ( x ∈ R m j ) \hat f(x)=f_M(x)=\sum_{m=1}^{M}\sum_{i=1}^{J}c_{mj}I(x\in R_{mj}) f^(x)=fM(x)=m=1Mi=1JcmjI(xRmj)
    算法第一步初始化,估计使得损失函数极小化的常数值,它是只有一个根节点的树。第二步(a)计算损失函数负梯度在当前模型的值,将它最为残差的估计。对与平方损失函数,他就是通常说的残差;对于一般的损失函数,他就是残差的近似值。第二步(b)估计回归树叶节点区域,以拟合残差的近似值。第二步(c)利用线性搜索估计叶节点区域的值,使损失函数极小化。第二步(d)更新回归树,第三步输出最终的模型。

3.3 缩减(Shrinkage)

Shrinkage(缩减)的思想认为,每次走一小步逐渐逼近结果的效果,要比每次迈一大步很快逼近结果的方式更容易避免过拟合。即它不完全信任每一个棵残差树,它认为每棵树只学到了真理的一小部分,累加的时候只累加一小部分,通过多学几棵树弥补不足。本质上,Shrinkage为每棵树设置了一个weight,累加时要乘以这个weight,但和Gradient并没有关系。这个weight就是step。就像Adaboost一样,Shrinkage能减少过拟合发生也是经验证明的,目前还没有看到从理论的证明。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值