背景:集成算法是将相同或不同的分类器组合成为一个强分类的方法,这种组合方法包括自聚汇聚法(bagging),还有boosting方法。我们选用最流行的AdaBoos算法。
AdaBoost的运行过程:训练数据集的每一个样本,应赋予一个权重,这些权重构成一个向量D,一开始,这些权重都初始化为相等的值,首先在训练数据集上训练出一个弱分类器并计算该分类器的错误率,然后在同一数据集上再次训练弱分类器,但是在第二次训练时,将会根据分类器的错误率,对数据集中样本的各个权重进行调整,分类正确的样本的权重降低,而分类错的样本权重则上升,但这些权重的总和保持不变为1。AdaBoost为每个分类器分配一个权重值alpha,这些alpha的值是基于每个弱分类的错误率进行计算的。
alpha的计算公式与权重D的公式书上都有,自己去看就行了,就不贴了。
上面的官方定义估计也看不明白,这里我通俗一点讲:
1:首先要选取一个分类器作为弱分类器,什么分类器都可以,这里选择单层决策树作为弱分类器。
2:要明白D是针对每个训练样本的,而alpha是针对每次弱分类器的分类结果的,
3;通过弱分类器先对数据集进行一次分类,将分错的样本的权重加大,这样下次分类时,就会更加考虑该样本的正确率,作为最优分类。分类器得到的分类结果乘上alpha的值,保存下来,经过多次的迭代之后,运用sign函数将累计分类结果转换为最终的结果,这就是构成的强分类器的分类结果。
所以,第一步:基于单层决策树构建弱分类器
简单说一下,单层决策树,就是只依靠一个特征对数据集进行分类。那么为了找到最好的特征,所以第一层循环就是遍历每个特征。在某一特征中,定义一个阈值,通过这个阈值,将大于这个阈值分为一类,小于阈值的分为另一类,那么,这个阈值怎么定义呢,从最小值开始逐步加上一个步长知道最大值为止,所有第二层循环是对每个步长进行循环,寻找最好的阈值。在某一阈值下,是大于阈值归为1,还是小于阈值归为1呢?都要尝试一下以寻找最高的正确率,所以第三层循环就是对每个不等号进行循环。
这是构建单层决策树的伪代码:
将最小错误率minEroor设为无穷大
对数据集中的每一个特征(第一层循环):
对每个步