AdaBoost分类算法小结

基本思想:反复使用弱分类器,这是一个迭代过程。在上一次分类的基础上,基于上次分类的错误率和错分样本,调整当次迭代的参数以优化上次分类的结果……

弱分类器——单层决策树

单层决策树其实就是一个树桩,在学得一个树桩(buildStump)的算法中,要尝试每个维度,尝试每种步长,尝试每种正负划分,得到一个分类的估计,在所有分类估计中选择错误最少的来作为结果(即学习结果)。也就是单层的最优划分方式。

特别之处在于,如果就到此为止,那么无论使用多少次对上述过程的迭代,结果都是一样的.

kernel trick

Boost的kernel trick 在于,A.利用错误率(ε)计算出这个分类器在所有分类器中的权重α:

α=12ln1ϵϵ(1)
每个分类器都会得到一个分类估计,所有分类器的带权累积分类估计和就是整个boost分类器的分类估计:

cEst1...cEstn=α1cEst11...cEst1n+...+αkcEstk1...cEstkn(2)

其中 cEsti 是对第i个样本的分类估计,k是迭代次数。

Boost的kernel trick 在于,B.给样本也制定权重,上次分对的样本权重减少,上次分错的样本权重增加,样本权重D代表了上次分类后每个样本的分类难度——分对了难度下降,分错了难度上升

这是trick中的trick。

D(t+1)right=D(t)eαsum(D)D(t+1)wrong=D(t)eαsum(D)(3)

有了D,虽然每次构建决策桩,数据是一样的,但数据的权重不一样了,所谓最小错误率变成了最小带权错误率。
再审视下上次迭代给我们留下的权重,用这个权重乘以错分记录向量
DerrorArrT ,其中 errorArr=[1,0,1,0...] ,样本类别分错时对应位置记为1,在这里最小化带权错误率是受权重影响的。
再直白地说,上次错分的样本由于权重较大,这次要尽力分对才能缩小整个错误率。

这样整个迭代逻辑就通顺了,迭代的退出可以在固定k次后,也可以在公式(2)计算的累计分类估计和训练集分类一致时提前退出。

迭代过程

第k次迭代:

    训练集、分类标签、D_{k-1}->决策桩stump,带权错误率ε,分类估计向量  # D_{k-1}:k-1次迭代算出的样本权重
    ε->α
    stump列表 append stump{dim,value,ltOrGt,alpha}  # 一个决策桩包含四个键值对分别是维度、分界值、大于或小于号、分类器权重
    α->D_k
    累计分类估计 += α*分类估计向量
    if 累计分类估计==训练集分类:
        退出迭代
返回stump列表    

猜你喜欢

转载自blog.csdn.net/zhengwei223/article/details/79150009