转 Adaboost算法的另一种解释以及前向算法介绍

上一节讲解了Adaboost算法,下面我们要通过Adaboost的另一种解释引申到前向分布算法,进而通过上面这些引出提升树,最后学习梯度提升。

Adaboost算法的另一种解释

         Adaboost算法还有另一种解释,即:可以认为Adaboost算法是“模型为加法模型、损失函数为指数函数、学习算法为前向分布算法”时的二类分类学习方法。

前向分布算法

         在Adaboost算法中,我们的最终目的是通过构建弱分类器的线性组合:

                  

         来得到最终分类器。

         而我们在看看加法模型:

                  

         其中,b(x; rm)为基函数,rm是基函数的参数,βm为基函数的系数。

         显然式8.6是一个加法模型。

         对于加法模型,在给定训练数据及损失函数L(y, f(x))的条件下,学习加法模型f(x)就成为经验风险极小化损失函数极小化问题:

                  

         但这是一个复杂的优化问题。

         前向分布算法(forward stagewise algorithm)求解这一优化问题的想法是

                   因为学习的是加法模型,那如果能够从前向后,每一步只学习一个基函数及其系数,然后逐步逼近优化目标式8.14,那么就可以简化优化的复杂度。

         具体的,每步只需优化如下损失函数:

                  

         于是,前向分布算法总结如下

         输入

                   训练数据集T ={(x1,y1), (x2, y2), ..., (xN, yN)};损失函数L(y, f(x));基函数集{b(x; r)};

         输出

                   加法模型f(x)

         解

                   1,初始化f0(x)= 0

                   2,对m = 1, 2,.., M

                            a,极小化损失函数

                                    

                                     得到参数βm, rm

                                          b,更新

                                    

                   3,得到加法模型

                           

         这样,前向分布算法将同时求解从m=1到M的所有参数βm, rm的优化问题简化为逐次求解各个βm, rm的优化问题。

提升树

         提升树是以决策树为弱分类器的提升方法,通常使用CART树。

         提升树被认为是统计学习中性能最好的方法之一。

提升树模型

         提升树方法实际采用:加法模型 + 前向分布算法 + CART树(基函数)。

         在Adaboost的例子中看到的弱分类器x<v或x>v,可以看做是由一个根结点直接连接两个叶结点的简单决策树,即所谓的决策树桩。提升树模型可以表示为决策树的加法模型:

                  

         其中,T(x,θm)表示决策树;θm为决策树的参数;M为树的个数。

提升树算法

         既然提升树采用前向分布算法,那就将前向分布算法的步骤的思想套用到这里吧。

         首先,确定初始提升树f0(x)= 0,于是第m步的模型就是:

                  

         其中fm-1(x)是当前模型,通过经验风险极小化确定下一棵决策树的参数θm,

                  

         由于树的线性组合可以很好的拟合训练数据,即使数据中的输入与输出之间的关系很复杂也可以很好的拟合。所以提升树是一个高功能的学习算法。

         下面讨论针对不同问题的提升树学习算法,其主要区别在于使用的损失函数不同。包括用平方误差损失函数的回归问题,用指数损失函数的分类问题,以及用一般损失函数的一般决策问题

         对于二类分类问题,提升树算法只需将Adaboost中的弱分类器限制为二类分类树即可,这里不再细数。下面叙述回归问题的提升树:

         已知一个训练数据集T={(x1,y1), (x2, y2), ..., (xN, yN)},x∈X⊆ Rn,X为输入空间,yi∈Y⊆ R,Y为输出空间。如果将输入空间X划分为J个互不相交的区域R1, R2, ..., RJ,并且在每个区域上确定输出的常亮cj,那么树可以表示为:

                  

         其中,参数θ={(R1,c1), (R2, c2), ..., (RJ, cJ)}表示树的区域划分和各区域上的常数,J是回归树的复杂度即叶子节点的个数。

         对8.26式举个例子的话就像下面这样:

                  

         回归问题提升树使用以下前向分布算法

                  

                  在前向分布算法的第m步,给定当前模型fm-1(x),需求解

                  

                  即得到第m棵树的参数。

                   当采用平方误差损失函数时,

                            L(y,f(x)) = (y - f(x))2

                   其损失变为:

                            L(y,fm-1(x) + T(x;θm))

                            =[y - fm-1(x) - T(x;θm)]2

                            =[r - T(x;θm)]2

                   这里

                            r= y - fm-1(x)                        (8.27)

                   是当前模型拟合数据的残差。所以对回归问题的提升树算法来说,只需简单的拟合当前模型的残差。这样,算法是相当简单的。

         现将回归问题的提升树算法叙述如下

         输入

                   训练数据T={(x1,y1), (x2, y2), ..., (xN, yN)},xi∈X⊆ Rn,yi∈Y⊆ R

         输出

                   提升树fM(x)

         解

                   1,初始化f0(x)= 0

                   2,对m = 1, 2,..., M

                            a,按式8.27计算残差:rmi= yi - fm-1(xi), i = 1, 2, ..., N

                            b,拟合残差rmi学习一个回归树,得到T(x;θm)

                            c,更新fm(x)= fm-1(x) + T(x;θm)

                   3,得到回归问题提升树

                           

例子

         已知训练数据如上表所示,x的取值范围为区间[0.5,10.5],y的取值范围为区间[5.0, 10.0],学习这个回归问题的的提升树模型,考虑只用树桩作为基函数。

         

         既然是学习出一个提升树:

                  

         那么第一步我们就要求f1(x),即回归树T1(x)。

         首先,通过以下优化问题

                  

         求解训练数据的切分点s:

                   R1= {x | x <= s},R2 = {x | x > s}

         容易求得在R1,R2内部使平方损失误差达到最小值的c1, c2为

                  

         这里N1,N2是R1,R2的样本个数。

         将上面的想法应用到数据上就是

                   根据所给数据,考虑如下切分点:1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, 8.5, 9.5

                   对各切分点,不难求出相应的R1,R2, c1, c2及

                           

         如:当s=1.5时,R1={1},R2={2, 3, 4,5, 6, 7, 8, 9, 10},c1 = 5.56,c2=7.50,

                            m(s)= 0 + 15.72 = 15.72

         现将s及m(s)的计算结果列表如下

         由上表可知,当s=6.5时m(s)达到最小值,此时R1={1,2, ..., 6},R2={7, 8, 9, 10},c1=6.24,c2=8.91,所以回归树T1(x)为

                  

         用f1(x)拟合训练数据的残差见下表,表中r2i = yi - f1(xi),i=1, 2, ...,10.

         用f1(x)拟合训练数据的平方损失误差:

                  

         第二步求T2(x)。方法与求T1(x)一样,只是拟合的数据是表8.4的残差。可以得到:

                  

         用f2(x)拟合训练数据的平方损失误差是

                  

         就这样继续求得

                  

         用f6(x)拟合训练数据的平方损失误差是:

                  

         假设此时已满足误差要求,那么f(x) = f6(x)即为所求提升树。

梯度提升

         上面的提升树算法利用加法模型与前向分步算法实现学习的优化过程。虽然当损失函数时平方损失和指数损失函数时,每一步的优化很简单,但对于一般损失函数而言,往往每一步的优化并不那么容易。而梯度提升(gradient boosting)算法就是解决这个问题的。

         梯度提升算法利用最速下降法的近似方法,其关键是利用损失函数的负梯度在当前模型的值

                  

         作为回归问题提升树算法中残差的近似值,拟合一个回归树。

         梯度提升算法描述

         输入

                   训练数据T={(x1,y1), (x2, y2), ..., (xN, yN)},xi∈X⊆ Rn,yi∈Y⊆ R;损失函数L(y, f(x))

         输出

                   回归树。

         解

                  

                   解释:

                   第1步:估计使损失函数极小化的常数值,它是只有一个根结点的树。

                   第2(a)步:计算损失函数的负梯度在当前模型的值,将它作为残差的估计。对于平方损失函数,它就是通常所说的残差;对于一般损失函数,它就是残差的近似值。

                   第2(b)步:估计回归树的叶结点区域,以拟合残差的近似值。

                   第2(c)步:利用线性搜索估计叶结点区域的值,使损失函数极小化。

                   第2(d)步:更新回归树。

                   第3步:得到最终的输出模型。


原文:http://blog.csdn.net/xueyingxue001/article/details/51304490

实例介绍:前向算法


由马尔科夫模型MM可知:对于一个系统,由一个状态转至另一个状态的转换过程中,存在着转移概率,并且这种转移概率可以依据其紧接的前一种状态推算出来,与该系统的原始状态和此次转移前的马尔可夫过程无关。

隐马尔可夫模型(HiddenMarkov modelsHMM)是马尔可夫链的一种,它的状态不能直接观察到,但能通过观测向量序列观察到,每个观测向量都是通过某些概率密度分布表现为各种状态,每一个观测向量是由一个具有相应概率密度分布的状态序列产生。

 

假设连续观察3天的海藻湿度为(Dry,Damp, Soggy),求出该观察序列的概率。天气只有三类(Sunny,Cloudy, Rainy),而且海藻湿度和天气有一定的关系。

已知:

1.      隐藏的状态:Sunny, Cloudy, Rainy;海藻湿度有四类{Dry,Dryish, Damp, Soggy }

2.      观察状态序列:{ Dry, Damp, Soggy };

3.      初始状态序列:Sunny(0.63), Cloudy(0.17),Rainy(0.20);

4.      状态转移矩阵:

 

 

Sunny

Cloudy

Rainy

Sunny

0.5

0.375

0.125

Cloudy

0.25

0.125

0.625

Rainy

0.25

0.375

0.375

Cloudy(昨天)->Sunny(今天)的概率是0.25;

Sunny(昨天)->Rainy(今天)的概率是0.125.

 

5.      混淆矩阵(海藻湿度与天气的相关性):

 

 

Dry

Dryish

Damp

Soggy

Sunny

0.6

0.2

0.15

0.05

Cloudy

0.25

0.25

0.25

0.25

Rainy

0.05

0.10

0.35

0.50

观察到海藻湿度Dry,则当天Sunny的概率是0.6;Cloudy的概率是0.25;而当天Rainy的概率是0.05.

 

How to calculate the probability of this observation list?

即统计P(observation|Sunny, Sunny, Sunny)+P(observation| Sunny, Sunny, Cloudy)+ P(observation| Sunny,Sunny, Rainy)+ P(observation| Sunny, Cloudy, Sunny) + P(observation| Sunny, Cloudy,Cloudy) + P(observation| Sunny, Cloudy, Rainy) + …

总共的可能性有3^3种。

实际由于马尔科夫模型,我们得知其实第二天的状况只取决于第一天,第三天的天气已经与第一天的天气没有关系了。

我们可以先求P(Day1-Sunny),P(Day1-Cloudy), P(Day1-Rainy),Day1的海藻湿度是Dry.

P(Day1-Sunny) = 0.63*0.6;

P(Day1-Cloudy)=0.17*0.25;

P(Day1-Rain)=0.20*0.05;

继续求P(Day2-Sunny), P(Day2-Cloudy),P(Day2-Rainy), Day2的海藻湿度是Damp.

P(Day2-Suny)= (P(Day1-Sunny)*0.5 + P(Day1-Cloudy)*0.25 +P(Day1-Rainy)*0.25)* 0.15

P(Day2-Cloudy) = (P(Day1-Sunny)*0.375+ P(Day1-Cloudy)*0.125 + P(Day1-Rainy)*0.625) * 0.25

P(Day2-Rainy) =(P(Day1-Sunny)*0.125+ P(Day1-Cloudy)*0.625 + P(Day1-Rainy)*0.375)* 0.35

同理继续求第三日的各天气概率,Day3的海藻湿度是Soggy.

P(Day3-Suny)= (P(Day2-Sunny)*0.5 + P(Day1-Cloudy)*0.25 +P(Day1-Rainy)*0.25)* 0.05

P(Day3-Cloudy) = (P(Day2-Sunny)*0.375+ P(Day1-Cloudy)*0.125 + P(Day1-Rainy)*0.625) * 0.25

P(Day3-Rainy) =(P(Day2-Sunny)*0.125+ P(Day1-Cloudy)*0.625 + P(Day1-Rainy)*0.375)* 0.50

推出:

P(observation list) =P(Day3-Sunny)+P(Day3-Cloudy)+P(Day3-Rainy) = 0.030319

 

参考:

http://luyifanlife.blog.163.com/blog/static/20024105720126272311612/

http://blog.sina.com.cn/s/blog_6e40552101014ok9.html

http://blog.csdn.net/jeiwt/article/details/8076019


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值