机器学习之AdaBoost原理与代码实现

 

        AdaBoost原理与代码实现

                                       本文系作者原创,转载请注明出处: 

1.  初始化了弱分类器 

而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

50000+
5万行代码练就真实本领
17年
创办于2008年老牌培训机构
1000+
合作企业
98%
就业率

联系我们

电话咨询

0532-85025005

扫码添加微信