1.1 提升方法(AdaBoost)
boosting(提升方法)的主要思想就是改变训练样本的权重,学习多个分类器(弱可学习,强可学习),然后将这些分类器进行线性组合,从而提高分类的性能。
下面会去研究AdaBoost的具体做法。然后通过训练误差分析去了解为什么AdaBoost可以提高学习进度。然后从前向分布算法去解释AdaBoost。最后再了解提升树(Boosting Tree)的具体做法。
首先就是一些大前提背景:
强学习和弱学习的区别就是正确率是否高,前者正确率高,后者正确率仅比随机猜测略好。
并且强学习和弱学习是等价,也就是弱学习可以提升(boost)为强学习,那么怎么将弱学习变为强学习呢?
方法就是从弱学习算法出发,反复学习,得到一系列的弱分类器(称为基本分类器),然后组合弱分类器,构成一个强分类器。
多数的提升方法都是改变训练数据的概率分布,针对不同的训练数据分布调用弱学习算法一系列的弱分类器。
所以总的来说,Boosting就两个问题需要搞清:一是每一轮如何改变训练数据的权值或概率分布,二十如何将弱分类器组合成一个强分类器。
笼统地解决第一个问题就是:提高那些被前一轮弱分类器错误样本的权值,降低那些被正确分类样本的权值。这样的话错误的样本会得到更大的关注。
第二个问题就是采取加权多数表决,加大分类误差率小的弱分类器的权值,使其在表决中起较大的作用,减小分类误差率大的弱分类器的权值,使其在表决中起较小的作用。
1.1.1 AdaBoost算法
输入:训练数据集,
输出:最终分类器
(1)初始化训练数据的权值分布(第一批权值)
(2)假设我们的权值更新共有M轮,
(a)使用具有权值分布的训练数据集学习,得到基本分类器:
:输入一个x,然后输出分类
(b)计算当前次基本分类器在训练数据集上的分类误差率:
上面这个公式的意思就是我们把错误样本的对应的权值给累计起来
(c)然后计算对应的系数:
这个系数表达的是当前权值的重要性,越大代表越重要
(d)更新训练数据集的权值分布:
表示的下一代每一个训练样本的权值:
具体每个权值是怎么更新:
再看第二个式子,可以看到下一代每一个样本的权值是和当前代的基本分类器对应 的权值有关,也和当前代的分类是否正确有关
这里的是规范化因子:
观察这个规范化因子,就是当前所有样本的具体情况的一个总和,正是这个规范化因子,才使得具体每个权值更新的时候成为一个概率分布的存在
(3)当我们拿到手上的基本分类器已经满足条件时,就可以把基本分类器给整合起来:
于是最终的分类器就是:
具体例子可以看看书上P159页,直接看都看得懂,所以就不放出来了
1.2 AdaBoost算法的训练误差分析
AdaBoost最基本的性质就是它能在学习过程中不断减少训练误差,下面就开看看怎么做到的
书上提出了一个定理:
先看左边的不等式:
第一项就是分类错误时候的概率,不一样就输出1,一样就输出0
第二项我们看当分类错误的时候,,故
,所以肯定是右边比左边大
再看右边的等式:
我们根据而代入左边的累加式:
然后根据,代入上式,从而可以拗一个w出来,但是为什么是变成连乘,但还是没推出来。
上式就等于:
所以:假如我们选择合适的的话,可以使得
变小,也就是压低了上界,我任你怎么狂,反正上界就这么多,越来越少了,所以下降速度会越来越快。
下面的二分类问题的AdaBoost的训练误差边界这里还没有看,关键就是连乘怎么变换过去的,最终可以得出AdaBoost的训练误差是以指数级别下降的。
1.3 前向分布算法
首先了解加法模型:
其中作为基函数,
为基函数的参数,
为基函数的系数
在给定训练数据以及损失函数的条件下,学习加法模型称为经验风险极小化,也就是损失函数极小化的问题:
我们可以看到学习加法模型里面,有可能会有很多参数在里面,如果一起学习,那么变量套多就很难快速地找到最优解,于是我们打算每一步之学习一个基函数及其系数,然后逐步逼近优化目标上式损失函数极小化函数
具体流程:
输入:训练数据集,损失函数
;基函数集
输出:加法模型
(1)初始化加法模型
(2)对m=1,2,...,M
(a)极小化损失函数
我自己了解是在已有的函数基础上,再加上加法模型作为辅助,然后再去过一遍上述的极小化。最后我们会获得参数
(b)更新我们的加法模型:
(3)得到加法模型:
1.3.1 前向分步算法与AdaBoost的联系
我们可以看到AdaBoost和前向分步算法是非常相似的,其实AdaBoost就是前向分步的特例,当模型是由基本分类器组成的加法模型,而损失函数就是指数函数。
当基函数为基本分类器时,该加法模型等价于AdaBoost的最终分类器,从上面的两个算法的流程对比中,我们也发现更新流程都是一样的,下面就是证明损失函数是指数形式的了
在迭代到第M轮的时候,我们的目标是使得前向分步算法得到的和
,使得
在训练集T上的指数损失最小,观看上面的 1.3的(2)的(a),我们把这个最小化的损失函数的式子转化为这个:
又因为这个函数是一个关于和
的函数,于是可以换一个表达式:
其中,,现在就是求证最小化上式就等同于前面AdaBoost算法得到的
和
,现在我们将整个过程分开成两部,第一步就是先求出最小的
,其次再求最小的
。
最小的的误差率是这么得到的呢,就是当前版本的分类正确率高:
然后就是求:书上这个变式我有点不太理解,后面为什么可以变成最终的式子
大概看出来的是分两种情况讨论,一种是分对了,一种是分不对,但是最后的式子怎来有点搞不懂
然后我们将上面得到的代入,并且对
求导,让其等于0,最后可以得出最小值
求导比较容易,代入化简然后取对数就好了,最后可以得到:
我们可以看到,最后是和AdaBoost等价的,唯一区别就是那个Zm,所以他们是等价的。
具体的求导过程:
字丑,如果出错了,麻烦大家指出更正。
1.3.2 提升树
提升树就是以决策树为基函数的提升方法。
对分类问题就是二叉分类树,对回归问题就是二叉回归树
提升树模型可以表示为决策树的加法模型。多个决策树加在一起:
表示决策树,
表示决策树的参数,M表示树的个数
提升树也是采用前向分步算法:
假设就是当前模型,通过经验风险极小化确定下一颗决策树的参数
我们可以发现提升树可以做很多事情,有用平方误差损失函数的回归问题,用指数损失函数的分类问题(前面证明了),以及用一般损失函数的一般决策问题。
下面叙述回归问题的提升树:
整棵树我们可以表示为:
其中,参数代表的是树的区域划分以及各个区域上的常输出的常数
所以我们相当于把问题换成了求解参数:
采用平方误差损失函数:
所以,对应的损失:
其中:表示的是当前模型拟合数据的残差
残差的意思是,实际观察值与估计值(拟合值)之间的差,所以对于回归问题的提升树来说,只需要简单低拟合当前模型的残差。
每一步我都计算当前模型的残差来取优化参数,然后更新提升树,就是把子树怼进去,继续计算残差,从而优化出最好的模型,也就是把经验风险最小化的问题化解为残差问题。
如果不理解的话,看一下书上P168的例子就很好理解了,很直观