About Adaboost

本文详细介绍了Adaboost算法的工作原理及其实现过程。通过不断调整样本权重,算法能重点学习先前分类器未能正确识别的数据。文章还提供了Adaboost算法的具体实现代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

大部分博客中关于Adaboost算法的讲解都大同小异,算法很容易看明白,但是一些细节只有在编程实现的时候才会真正弄明白。

Adaboost算法如下图:


  • 初始化样本权值向量,使得每个样本的权重相同;
  • 对每次迭代:

        找到当前样本分布下,使得误差权重之和最小的弱分类器,并计算其误差

                  如果误差大于50%:

            

                             (则还不如瞎猜呢,果断舍弃)

                  否则:

1.计算当前弱分类器在最终的分类器中的权重,分类错误率小的弱分类器对应的权重较大。

2.更新样本权值向量,被当前弱分类器分类错误的样本的权重将被放大,反之被缩 小。(相当于在原来的样本权值向量的每个元素上面乘以一个权值,使得分类错误的样本在新的权值向量中所占比重较大)

          3.计算组合分类器的分类错误率,当满足一定条件时终止迭代

  • 输出最终的组合分类器


算法的精髓在于通过改变样本的重要性,即分类错误的样本权重更大,分类正确的样本权重较小,从而训练出了不同的弱分类器。那么如何改变样本的重要性分布呢?有两种方法:

  1. 正如在上面的算法流程图里面,通过最小化样本加权分类误差,使得分类器格外重视那些权重系数较大的样本,即在上一轮中分类错误的样本:


  2. 根据计算得到的新的样本权值向量来对样本进行重采样,从而在每次迭代之后都产生一个新的样本集。这种重采样的方法可以通过python的random.choice函数实现:
    from numpy.random import choice
    new_dataset = choice(list_of_samples, number_of_items_to_pick, p=weight_vector)
    
    例如:
    elements = ['one', 'two', 'three'] #原来的样本分布
    weights = [0.2, 0.3, 0.5]  #样本权值
    
    from numpy.random import choice
    print(choice(elements, p=weights))  #新的样本分布


这两种改变样本重要性的方法可以根据实际需要进行选择,比如

    1。对于采用神经网络为弱分类器的Adaboost算法,采用第一种方式比较方便,即在原来的代价函数上面加上样本权重系数,使其最小。

    2。对于采用多层决策树为弱分类器的Adaboost算法,采用第二种方法较为方便。

    3。对于采用单层决策树为弱分类器的Adaboost算法,采用两种方式均可。


一个二分类的Adaboost代码及注释可以在我的github上找到:https://github.com/plz717/Machine-Learning-Algorithms/tree/master/adaboost

代码是在https://github.com/jakezhaojb/adaboost-py/blob/master/adaboost.py上面修改得到,加入了数据集的K-fold交叉检验及对训练误差的可视化。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值