提升方法的学习

        提升方法(boosting),是一种常用的统计学习方法,是判别模型,最后得到的决策函数Y=f(X)。提升方法是集成学习的一种框架,这种框架下,每个子分类器使用的训练数据都是一样的,只是训练数据的权重不一样,然后子分类器之间是存在串行的关系,然后这个子分类器的线性组合形成最后的总的分类器,利用组合的方式,提高了分类的性能。

      首先,第一点,说明什么是集成学习,就是把多个分类的方法集中起来,然后集中大家的智慧来进行判断。在集成学习中,我们主要说的是三种框架:boosting, bagging, stacking。具体介绍的为集成学习方法的介绍

       boosting方法,提升方法,子分类器之间存在串行的关系,采用相同的训练数据,但只是训练数据的权重不一样,最后的组合分类器的方式也不同。对于提升方法,主要解决二个问题,第一个问题就是如何更改训练数据的权重,也就是改变训练数据的概率分布问题,第二个问题是如何将多个弱分类器组合起来。boosting方法中,代表方法由AdaBoost算法,GBDT(提升树)等。

        【AdaBoost】 对于第一个问题的求解,前一个分类器分类错误的点,在下一个分类器分类错误的时候增加其权重,对于分类正确的时候减少其权重,对于第二个问题的求解,对其进行线性组合的时候,也是同样利用分类误差率高的权重小的关系组合起来,共同决定分类结果。这是我们自然而言的想法,通过AdaBoost算法,统一集中在了算法当中。


          算法:初始化,权值为相等的权重,然后利用训练数据得到基本分类器1,这个分类器没有任何权重倾斜,然后判断这个训练数据的在当前权重下的分类误差率,(肯定是选择当前最小的情况)这个时候采用权重和是否判断错误来共同得到误差率,根据这个误差率得到基本分类器的权重系数,这个权重系数是关于误差率的一个单调减函数,对于误差率越大的权重越小,也就是这个基本分类器的话语权越小,然后当误差率达到1/2的时候,权重变为0,也就是不起作用了,更大的误差率,还起反作用了呢,那么当前的分类器的权重与分类的误差率还需要确定下一个分类器的权值分布,也就是影响到了下一个训练数据的权值分布,但训练数据当然还是不变了,只是训练数据的权值发生了改变,对于分类正确的点,权值很小,但对于分类错误的点,权值变大,并且分类错误的点是分类正确的点扩大了e/1-e倍。对于权值改变之后的数据,然后再利用训练数据以及当前权值,找到当前误分类率最小的方案来作为基本分类器,然后继续计算这个分类器的误分类率以及权值,最终将分类器组合在一起,然后得到一个强分类器。

         我们为什么有理由相信这种方法可以不断的减少训练误差,不能你说可以就可以把,总是要拿出理论依据的嘛。我们现在就要证明AdaBoost这种算法最终会提高分类效果,降低分类误差率。


            对于AdaBoost算法,我们还可以认为是模型是加法模型,损失函数为指数函数,学习算法是前向分步算法的二类分类学习方法。然后我们对前向分步算法进行新的解读。

             加法模型是指最后的分类器的表达式中所有的基本分类器最终是以加法的形式呈现的,损失函数,采用的是指数函数,也就是我们需要求损失函数最小化,但这个时候求损失函数最小化是一个很复杂的优化问题,所以,因为模型是加法模型,所以我们把优化问题也进行了划分,也就是每一步只学习一个基函数和其系数,然后逐步的逼近我们的目标。其中最主要的原因也是因为加法是可以分布的,是可以进行分解的,所以我们进行逐步的优化即可,而不需要一口吃成一个胖子。关键思路:不断的在当前的情况下,求当前的最小化的损失函数,然后找到参数之后,更新新的加法的模型,最后到M次更新,然后结束更新。对于AdaBoost算法,我们根据指数损失函数最小化然后得到基函数得参数以及系数,这个系数与之前得做法仅仅相差系数。


           【提升树】

             提升树采用加法模型和前向分步算法实现模型。跟普通的前向分步算法类似,也就是首先初始化提升树为0,然后根据经验风险最小化来确定加法模型中这一次的决策树的参数,然后组合相加成为当前提升树模型,一直到第M次,然后就完成了提升树的最终模型。首先,介绍一下概念,为什么叫提升树,首先提升,说明采用了提升方法,也就是分类准确率在学习过程中不断的进行了提升,然后是不断的修改偏差的过程,第二说明树,说明基本分类器也可以叫基函数,是采用了决策树的方法来做,对于分类问题,决策树是二叉分类树,回归问题,决策树是二叉回归树。而不同的提升树算法,不在于基函数的选择不同,而主要区别于损失函数的选择的不同。对于回归问题,主要采用的平方误差损失函数,对于分类问题,主要采用的指数损失函数。当然也有采用的是一般的损失函数。

            考虑回归问题的提升树问题的步骤,刚开始也是初始化一个0值,然后分布的优化目标是当前情况下,最小化平方误差,从这个角度来看,也就是当前树拟合的是残差,也就是上一步中估计的值和真实值之间的差距问题。回归树学习的是当前预测状态下残差的情况。

          当损失函数采用平方损失和指数损失的时候,因为是可以写出表达式,可以进行比较容易的计算,但如果采用的是一般的损失函数的时候,这个时候求优化问题比较困难,所以为了解决这个问题,我们提出了一种新的优化问题的求解方法,也就是利用梯度提升的方法来做。(gradient boosting)算法。利用损失函数对于函数的负梯度来作为残差的一个近似值,用来拟合一个回归树。

           为什么负梯度可以近似等于残差呢??采用平方损失函数,此时计算的负梯度和残差可以说是就是一回事了,因为就是一个系数的问题,这个肯定是成立,为什么一般情况下也是成立的呢,其实就是从我们的目标角度来说,我们需要求f(x),而这个函数又是使得损失函数是最小的情况,然后我们可以通过求梯度来达到目的,所以,这也就是我们利用负梯度来拟合残差的原因所在。负梯度来拟合残差

            在利用平方损失函数来作为损失函数的时候,我们是初始化基函数为0,然后计算残差,然后拟合残差,然后不断的重复然后的动作,直到到达迭代次数,然后结束,得解。在利用负梯度来拟合残差的提升树中,我们初始化就不是0,而是寻找最小的回归树的输出情况,来作为梯度提升的问题的初始化,然后求负梯度来作为残差,然后拟合一个回归树,然后在线性组合,其实就是相加。

猜你喜欢

转载自blog.csdn.net/angela2016/article/details/80777229
今日推荐