• AdaBoost算法


    本篇笔记是针对二分类的AdaBoost算法总结。主要参考林轩田老师的《机器学习技法》课程,以及李航博士的《统计学习方法》第二版。没错,第二版已经出版了,快去买啊!

    符号声明

    • (D = {(x_1, y_1), (x_2, y_2), (x_3, y_3), cdots, (x_N, y_N)}) - 用于训练的数据集,(x_n)为实例,(y_n)为对应的标签{-1, +1}
    • (T) - 需要训练的基分类器总个数
    • ({g_t}) - 第t轮训练出的基分类器,(t = 1, 2, 3, ..., T)
    • (u^{(t)} = {u_{1}^{(t)}, u_{2}^{(t)}, u_{3}^{(t)}, cdots, u_{N}^{(t)}}) - 第(t)轮的样本权重
    • (G) - 最终的强分类器
    • (left[left[ cdot ight] ight]) - 双中括号内的·若为真,则(left[left[ cdot ight] ight]=1),否则(left[left[ cdot ight] ight]=0)

    算法

    AdaBoost-w600

    为什么这样更新权重

    集成学习的思想主要体现在“多个弱分类器通过某种方式组合得到最终的强分类器”。要想最后的强分类器有好的性能,则需要保证每个弱分类器尽可能的不同。

    那么如何能让每个分类器尽量的不同?

    (t)轮训练的基分类器是({g_t}),然后根据({g_t})在带有权重({{u_n}^{(t)}})的训练集(D)上的表现更新权重至({{u_n}^{(t+1)}})。倘若上一轮的({g_t})在下一轮权重为({{u_n}^{(t+1)}})的训练集(D)上表现得不好,则可以认为({g_t})({g_{t+1}})比较的不同。

    也就是说,如果满足:$$
    egin{equation}
    frac{sum_{n=1}^{N} u_{n}^{(t+1)}left[left[y_{n} eq g_{t}left(mathbf{x}{n} ight) ight] ight]}{sum{n=1}^{N} u_{n}^{(t+1)}}=frac{1}{2}
    end{equation}

    [ $(1)$说明${g_t}$在第$t+1$轮的训练集上表现得就像随机乱猜一样,是$frac{1}{2}$的概率。而在该轮训练集上经过训练后确定下来的${g_{t+1}}$应该是性能比较好的,所以可以说${g_t}$和${g_{t+1}}$是比较不同的。 **那要如何更新第$t$轮的权重能满足$(1)$?** 显然,有]

    egin{equation}
    sum_{n=1}^{N} u_{n}^{(t+1)}left[left[y_{n} eq g_{t}left(mathbf{x}{n} ight) ight] ight] + sum{n=1}^{N} u_{n}^{(t+1)}left[left[y_{n} = g_{t}left(mathbf{x}{n} ight) ight] ight] = sum{n=1}^{N} {u_{n}^{(t+1)}}
    end{equation}

    [ 所以,$(1)$可以写为]

    egin{equation}
    frac{sum_{n=1}^{N} u_{n}^{(t+1)}left[left[y_{n} eq g_{t}left(mathbf{x}{n} ight) ight] ight]}{sum{n=1}^{N} u_{n}^{(t+1)}left[left[y_{n} eq g_{t}left(mathbf{x}{n} ight) ight] ight] + sum{n=1}^{N} u_{n}^{(t+1)}left[left[y_{n} = g_{t}left(mathbf{x}_{n} ight) ight] ight]}=frac{1}{2}
    end{equation}

    [ 为了最后得到的概率为$frac{1}{2}$,那么需要]

    egin{equation}
    sum_{n=1}^{N} u_{n}^{(t+1)}left[left[y_{n} eq g_{t}left(mathbf{x}{n} ight) ight] ight] = sum{n=1}^{N} u_{n}^{(t+1)}left[left[y_{n} = g_{t}left(mathbf{x}_{n} ight) ight] ight]
    end{equation}

    [ 那么更新的做法可以如下所示: ![更新权重-w500](https://img2018.cnblogs.com/blog/1531067/201905/1531067-20190515213116091-29032738.png) 最终将两者一整合,就能得到每次更新的方式,如同上述算法所述。 ### 为什么选择$alpha_t$作为基分类器前的权重 - 待编辑]

  • 相关阅读:
    2013-10-31 《问题儿童居然一天两更!?》
    2013-10-31 《October 31st, 2013》
    2013-10-31 《三天里什么都没干……总之把目前为止的代码发了吧……》
    日怎么没人告诉我这博客可以改博文界面的显示宽度的
    俗话说打脸哦不打铁要趁热所以记录下替换图片的方法
    GUI好看码难写不是难写是难看我是说码难看不是GUI
    虽然保持了连续代码生产量但是仔细想想也没什么必要
    重写了电话本代码全面更新居然连续三天每天一个程序
    专注写字典三十年问你怕未又被编码卡了简直难以置信
    我就写个字典居然卡了两天重申一遍文字编码日你大爷
  • 原文地址:https://www.cnblogs.com/shayue/p/AdaBoost-suan-fa.html
Copyright © 2020-2023  润新知