AdaBoost 算法有多种推导方式,比较容易理解的是基于"加性模 型" (additive model),即基学习器的线性组合
即每一个个体学习器会有一个用于累加的权值,该权值是根据个体学习器的准确性来确定的,通过最小化个体学习器的加权损失得来(后面会推导).
算法流程的推导过程:
1).指数损失函数的可行性证明
指数损失函数的表达式为:
H(x)是最终学得的集成学习器,而f(x)是样本的真实标记
在根据期望的公式,将其展开为8.5.1:
因此想要使8.5.1最小,对其求H(x)的偏导为:
偏导置0
因此,H(x)作为最终的预测输出,使用符号函数作为标记时,会有结果:
这复合贝叶斯最优分类器的情况.因此,当使用指数损失函数时,也可以使得分类错误率最小化.
由于指数损失函数时0/1损失函数的替代损失函数,且其连续可微,因此使用其作为优化目标.
2).基分类器权重的确定
对每一个基分类器,除去第一个是由初始的数据发布得到,其他的都需要根据每一轮的数据分布情况学得h(t)以及其权值α(t).学习的目标是最小化当前基学习器的加权指数损失,使其贡献的损失最小:
公式推导过程:
第二行是对每一个样本的展开,即如果判对,累积前一半的损失,如果判错,累积后一半
第三行则是在整体分布下展开,即对所有样本,根据准确率和错误率累积
再将准确率由错误率ε(t)表示得到最终式子
因此,α(t)的选择就是损失函数对其求偏导置0可以得到8.11的更新公式:
3).样本分布的更新公式及ht(x)学习算法
由于每一轮都会在原来的集成函数Ht-1(x)上累加一个ht(x)
因此,在每次学习完一个ht-1(x)后都希望下一次的ht(x)在下一次的学习时,能够将当前累积的Ht-1(x)分类器的错误进行纠正,即最小化损失函数:
也就是当前个体学习器的损失加上前面t-1轮集成学习器的损失最小
对exp(-f(x)ht(x))泰勒展开得到:
其中 f(x)^2 = ht(x)^2 = 1
此时理想的ht(x)为:
对其进行化简:
先将8.13带入
由于是求最小值,将常数项省略,并将-1系数去除转为求最大值:
最后一行的分母是增加了一个常数项(上一轮的损失),不影响最终h的取值
此时将式子中的h(x)无关项定义在分布Dt(x)中,得到等价期望函数:
其意义在于,直接根据原始样本分布求8.14的最小值会比较复杂,将其转换为在一个分布上求取8.16会使个体学习器的训练变得简单,并且只需每一轮训练时根据上一轮的学习器情况获得当前的分布8.15即可
而对于8.16,还可以继续化简,由于h(x)和f(x)都只有两种取值{1,-1},因此可以将f(x)h(x)再化简:
由于8.15是原始D(x)和Dt(x)的关系,其计算时需要使用当前的集成学习器计算每一个样本在初始分布上的预测值,判对样本出现率乘exp(-1),判错乘exp(1),分母是可以按照集成学习器的整体判错率来计算的.
而在迭代的优化过程中,可以将其转换为和上一轮分布的关系:
其中第二行迭代变换为:
Ht(x) =Ht-1(x) + αt*ht(x)
此时的更新就只需要对当前的个体分类器在Dt上的分布进行判断.
待解决问题:
为什么一定要化为迭代更新,而不是直接用初始分布更新呢?
8.15也需要对集成学习器的预测结果依次判断,8.19也需要进行这样的判断,即求损失期望
那为什么还要转换为迭代更新.
可能是因为在8.19,后面的常数项直接就使用规范化因子(统计当前分布的权值和得到)代替了,因此不用每一轮都计算集成函数的预测值.