基本思想:反复使用弱分类器,这是一个迭代过程。在上一次分类的基础上,基于上次分类的错误率和错分样本,调整当次迭代的参数以优化上次分类的结果……
弱分类器——单层决策树
单层决策树其实就是一个树桩,在学得一个树桩(buildStump)的算法中,要尝试每个维度,尝试每种步长,尝试每种正负划分,得到一个分类的估计,在所有分类估计中选择错误最少的来作为结果(即学习结果)。也就是单层的最优划分方式。
特别之处在于,如果就到此为止,那么无论使用多少次对上述过程的迭代,结果都是一样的.
kernel trick
Boost的kernel trick 在于,A.利用错误率(ε)计算出这个分类器在所有分类器中的权重α:
每个分类器都会得到一个分类估计,所有分类器的带权累积分类估计和就是整个boost分类器的分类估计:
其中
Boost的kernel trick 在于,B.给样本也制定权重,上次分对的样本权重减少,上次分错的样本权重增加,样本权重D代表了上次分类后每个样本的分类难度——分对了难度下降,分错了难度上升
这是trick中的trick。
有了D,虽然每次构建决策桩,数据是一样的,但数据的权重不一样了,所谓最小错误率变成了最小带权错误率。
再审视下上次迭代给我们留下的权重,用这个权重乘以错分记录向量
再直白地说,上次错分的样本由于权重较大,这次要尽力分对才能缩小整个错误率。
这样整个迭代逻辑就通顺了,迭代的退出可以在固定k次后,也可以在公式(2)计算的累计分类估计和训练集分类一致时提前退出。
迭代过程
第k次迭代:
训练集、分类标签、D_{k-1}->决策桩stump,带权错误率ε,分类估计向量 # D_{k-1}:k-1次迭代算出的样本权重
ε->α
stump列表 append stump{dim,value,ltOrGt,alpha} # 一个决策桩包含四个键值对分别是维度、分界值、大于或小于号、分类器权重
α->D_k
累计分类估计 += α*分类估计向量
if 累计分类估计==训练集分类:
退出迭代
返回stump列表