我们知道boost系列是强依赖关系, 有这个依赖, 各个学习器之间还有这些问题没有解决:
- 如何计算学习的误差率
- 如何得到弱学习器的权重
- 如何更新样本权重?
- 使用何种结合策略?
Adaboost
假定这里给一个二分类的数据集:
我们先来看一下Adaboost的步骤
- 输入数据T
- 初始化训练数据的权重分布:
- 对 :
- 使用具有权值分布的训练集进行学习, 得到基本的分类器:
- 计算在训练数据集上的误差率
- 计算的系数:
- 更新训练集的权重分布:
此处是规范化因子:
- 构建基本的纤性分类器组合:
Adaboost的损失函数
Adaboost损失函数采用指数损失, 指数损失比较少见
下面来推导一下其损失函数, 该算法为加法模型, 学习算法为前向分步算法, 前向分步算法其实就是: 通过前一轮学习器的学习, 来更新后一个弱学习器的训练集权重,按照上面的定义, 各轮学习器为:
显然, 是成立的
利用前向分布, 我们可以得到每个新的子分类器的损失函数为:
令,它的值不依赖于或者,仅依赖于,
将其代入损失函数得到:
我们知道其实是一个输出, 我们可以用一个指示函数代替, 那么我们得到
我们对求偏导:
最终, 求实我们的分类误差率
上面提到的四个问题, 基本上都已经解决了, 那么Adaboost如何处理回归问题?
回归问题, 基本上只用修改误差就可以了
- 首先我们计算其在训练集上的最大误差
- 计算每个样本上的误差:
- 如果是线性误差:
- 平凡误差: 略
- 计算误差率
其他步骤都是一样的
Adaboost正则化
为了防止Adaboost过拟合,我们通常也会加入正则化项:
没有加正则化:
加了正则化v:
的取值范围在0~1之间, 更小的代表我们需要更多的迭代次数
总结
理论上任何学习器都可以用于Adaboost.但一般来说,使用最广泛的Adaboost弱学习器是决策树。对于决策树,Adaboost分类用了CART分类树,而Adaboost回归用了CART回归树。
Adaboost的主要优点有:
- Adaboost作为分类器时,分类精度很高
- 在Adaboost的框架下,可以使用各种回归分类模型来构建弱学习器,非常灵活。
- 作为简单的二元分类器时,构造简单,结果可理解。
- 不容易发生过拟合
Adaboost的主要缺点有: - 对异常样本敏感,异常样本在迭代中可能会获得较高的权重,影响最终的强学习器的预测准确性