zoukankan      html  css  js  c++  java
  • 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$作为基分类器前的权重 - 待编辑]

  • 相关阅读:
    HNU 12906 Battleship
    codeforces 261 D
    HDU 4939 Stupid Tower Defense(dp)
    HDU 4941 Magical Forest(map映射+二分查找)杭电多校训练赛第七场1007
    HDU 4902 Nice boat 2014杭电多校训练赛第四场F题(线段树区间更新)
    【转载】使用Pandas对数据进行筛选和排序
    【转载】使用pandas进行数据清洗
    【转载】VC维的来龙去脉
    Python-时间操作
    Pandas-数据导入
  • 原文地址:https://www.cnblogs.com/shayue/p/AdaBoost-suan-fa.html
Copyright © 2011-2022 走看看