AdaBoost原理与代码实现
步骤:

而alpha的计算公式如下:

D的计算方法如下(始终把握一个原则:正确分类时权重要降低,错误分类时权重要升高,权重升高意味着提升关注度,需要重点优化):
如果某个样本被正确分类,那么该样本的权重更改为:

而如果某个样本被错分,那么该样本的权重更改为:

在计算出D之后,AdaBoost又开始进入下一轮迭代。AdaBoost算法会不断地重复训练和调整权重的过程,知道训练错误率为0或者分类器的数目达到用户
的指定值为止。
AdaBoost算法原理
假设我们的训练样本是

训练集的在第k个弱学习器的输出权重为

由于多元分类是二元分类的推广,这里假设我们是二元分类问题,输出为{-1,1},则第k个弱分类器Gk(x)在训练集上的加权误差率为:

看弱学习器权重系数,对于二元分类问题,第k个弱分类器Gk(x)的权重系数为:

更新更新样本权重D。假设第k个弱分类器的样本集权重系数为 

代码实现
输入数据
这里同样是使用一个训练数据文件 horseColicTraining2.txt 和一个测试数据文件 horseColicTest2.txt
horseColicTraining2.txt
训练数据集horseColicTest2.txt
测试数据集AdaBoost算法实现(myAdaboost.py)
每个方法的作用,以及每行代码的作用,同样我都做了详细的注解。
值得一提的是,我将 找到分类器错误率最小的算法buildStump进行了改造(相比于机器学习实战中对应的样例,可以明显提升运行速度),
在阈值不等式遍历时,如果在“lt”符号遍历的差错率 weightedError < 1 - weightedError,该阈值不等式遍历就结束,
不需要进行“gt”的遍历。运行结果和机器学习实践还是一样的。
AdaBoost算法实现测试代码(testMyAdaboost.py)
测试代码运行结果



如果将分类器数目设定为1 - 500之前不同的数字,并运行上述过程。这时,得到的结果如下所示:

由上表可以看出,测试错误率在达到了一个最小值之后又开始上升了,这类现象称之为过拟合(overfitting)。理论上,
AdaBoost是不会存在过拟合的,只会到达一个最小值后趋于稳定。这里是因为数据集的问题。
参考文献
《机器学习实战》
《统计学习方法》
知乎:https://zhuanlan.zhihu.com/p/23987221
不要让懒惰占据你的大脑,不要让妥协拖垮了你的人生。青春就是一张票,能不能赶上时代的快车,你的步伐就掌握在你的脚下。https://www.cnblogs.com/further-further-further/p/9642899.html
