• 通俗解释Adaboost算法是什么


    从这个贸易战看:强权即是真理,没有所谓的自由贸易和平等。中国之大已容不下一个安静的键盘。不过是又一次鸦片战争。除了愤怒还是愤怒,除了一心想为崛起而澎湃还是一心想为崛起而澎湃。中华文明三四千年的历史都是世界顶级,美国人区区100多年第一就想再占100年这不是无知么中国人有13亿人,是美国人的4倍还要多,4个抵1个也是必然会超过美国
    2019年5月29日 IEEE宣布禁止任何受华为资助的教授或学生参与IEEE审稿。听到这个消息我是愤怒的,说好的科学无国界呢?
    梳理下这个过程:
    2018.12.1,华为CFO(任正非之女)被美国下令逮捕
    2018.12.1 对芯片重大贡献的华人张首晟在美国身亡,就在2年前获得中国国家科学技术奖(中国科技最高奖,最高领导人亲自颁奖,奖金200万美金)
    2019年5月 美国撕毁两国元首已经基本确定的协议,对中国征收25%关税。
    2019年5月中旬 美国禁止全世界任何企业与华为接触或者提供设备,也禁止购买华为手机或通讯设备。理由:“国家安全”(距离美国棱镜门用思科通讯设备和Google监听全世界这个事件不过几年美国人就忘了自己干了什么事。)同时禁止欧洲其他国家使用华为提供的5G服务。
    2019年5月中下旬,Microsoft,ARM,Google纷纷宣布停止和华为任何商业来往,同时Google禁止华为手机使用Google服务
    2019年5月底, IEEE(世界上最大电子电气学术机构禁止任何受华为资助的教授参与审稿禁止其他高校或企业与中国的一些高校合作

    Adaboost本质上讲它不是传统意义上的机器学习算法,而是一种组合多种机器学习算法的组合策略

    Adaboost它的初衷就是每种算法都有它的缺陷,我能不能将多种算法组合在一起融合进行决策。而且不同分类器适合不同数据。这意味着我们将这些算法组合在一起的时候,并不是平等对待它的结果的。而是如果你这个分类器效果好那就我给你的权重大。这个也很容易想通,就是一个团队。如果只有一个人进行决策那就容易失误,如果有多个人一起决策失误概率就降低了。但是不能团队里面小学生得出的结果和研究生得出的结果是同等看待,按投票来确定结果。肯定是研究生的权重更大

    • 规则1:Adaboost就是这么想的,我训练很多个分类器。分类准确的他们的结果对最终结果影响的权重也大。

    现在还有个问题,我们在做决策的时候。很可能第一次错了第二次还会错。换句话说就是老是在同一类数据上分类错误。那么怎么解决这个问题呢?每条数据也有权重,如果你错多了。那么应该要重视这条数据。具体怎么做呢?答:调高能把这条数据分类正确的那个分类器对结果的影响力

    • 规则2:容易分类错的数据,尽可能重视它。因为下次可能会再次犯错

    对规则1进行量化:不同分类器对最终结果影响的权重与它的准确度匹配。准确的分类器对结果应该影响大

    AdaBoost对规则1这个思想的数学上的表达就是:每个分类器都有一个对最终结果影响的权重。这个权重与它的错误率成反比(即与它的准确率成正比)
    那么问题来了,到底每个分类器它对结果的影响权重到底设置多大会使得整体的准确率更高?。于是我们需要设计一个目标函数来量化的分析各个分类器的对结果的权重到底设置多少才是比较合适的。
    现在我们假设一个输入样本xix_i。它被三个分类器进行分类,不同分类器的权重不一样。分类器输出结果要么是-1要么是+1.
    在这里插入图片描述
    下面是这个权重公式怎么来的推导过程。如果你不喜欢,可以跳过
    现在AdaBooost这个分类器可以这么表示:

    • (xi)=w11(xi)+w22(xi)+w33(xi)总分类器(x_i) = w_1*分类器1(x_i) + w_2*分类器2(x_i) + w_3*分类器3(x_i),其中 (xi)总分类器(x_i) 表示总分类器对xix_i的分类结果。w1,w2,w3w_1,w_2,w_3是各个分类器对最终结果的影响权重值(注意w他们必须>0,因为我们的分类器是根据符号来判断数据所属分类,权重只能影响大小不能改变符号)。注意其中分类器1,分类器2,分类器3输出结果都是-1或者+1。最终xix_i的分类结果是(xi)总分类器(x_i)的符号。它大于0就是1,小于0就是-1. Adaboost就是想找到适合当前这个数据的w1,w2,w3w_1,w_2,w_3

    • 我们把上面那个式子中文用字母表示:C3(xi)=w1k1(xi)+w2k2(xi)+w3k3(xi)C_3(x_i)=w_1*k_1(x_i) + w_2*k_2(x_i) + w_3*k_3(x_i)。其中C3(xi)C_3(x_i)表示总分类器的输出值并且它有3个小分类器。k1(xi)k_1(x_i)表示第1个分类器。

    • 现在我们想加一个分类器。那么总分类器就变成了,C4(xi)=C3(xi)+w4k4(xi)C_4(x_i)=C_3(x_i) + w_4*k_4(x_i)。为了确定w4w_4该取多少,我们得确定一个评价指标。这个评价指标一般在机器学习里面叫做目标函数(或叫做误差函数或损失函数或代价函数)。

    • 假设一共有n条样本,并且当前我们暂时给k4k_4这个分类器设置的权重为w4w_4。现在我们计算下在这个取值情况下,如何评估这个w4w_4参数取值好不好。Adaboost它设计的评价指标就是这样子的Error()=i=1neyiC4(xi)Error(所有数据)=sum_{i=1}^n e^{-y_i*C_4(x_i)}。其中,yiy_i是第i条样本xix_i的标签它的取值要么是+1要么是-1。从式子可以看出,如果是分类正确那么C4(xi)C_4(x_i)的符号应该和yiy_i的符号相同。这意味着他们乘起来是正的,而前面有个负号如果C4C_4这个总分类器分类正确那么整个指数部分是负的,那么eyiC4(xi)e^{-y_i*C_4(x_i)}是一个很小的数。如果分类错误,那么可以看出eyiC4(xi)e^{-y_i*C_4(x_i)}指数部分是正的这是一个大的数。我们要做的是选取更好的w4w_4让误差函数尽可能的小

    • 接下来我们计算下w4w_4的最优解是多少。Error()=i=1neyiC4(xi)=i=1neyi(C3(xi)+w4k4(xi))=i=1n(eyiC3(xi)eyiw4k4(xi))Error(所有数据)=sum_{i=1}^n e^{-y_i*C_4(x_i)}=sum_{i=1}^n e^{-y_i*(C_3(x_i) + w_4*k_4(x_i))} = sum_{i=1}^n ( e^{-y_i*C_3(x_i)} * e^{-y_i*w_4*k_4(x_i)})。其实左边那个部分和w4w_4没有任何关系也就是说它根本相对于w4w_4来说就是常数。因此我们用个符号替代乘号左边的那个部分,令ai=eyiC3(xi)a_i = e^{-y_i*C_3(x_i)}。那么Error()=i=1n(aieyiw4k4(xi))Error(所有数据)= sum_{i=1}^n (a_i * e^{-y_i*w_4*k_4(x_i)})。在前面我们提到了yiy_ixix_i的标签要么是1要么是-1。同时k4(xi)k_4(x_i)是第四个分类器对xix_i分类的结果要么是1要么是-1.那么如果第4个分类器分类正确的话有yi=k4(xi)y_i=k_4(x_i)所以yik4(xi)=1y_i*k_4(x_i)=1,如果第4个分类器分类错误的话有yik4(xi)=1y_i*k_4(x_i)=-1

    • 然后我们可以将原来的式子Error()=i=1n(aieyiw4k4(xi))Error(所有数据)= sum_{i=1}^n (a_i * e^{-y_i*w_4*k_4(x_i)}),写为Error()=yi=k4(xi)aiew4+yi!=k4(xi)aiew4Error(所有数据)= sum_{y_i=k_4(x_i)} a_i * e^{-w_4} + sum_{y_i != k_4(x_i)} a_i * e^{w_4}。所以这个式子基本形式就是XXXew4+YYYew4XXX * e^{-w_4} + YYY * e^{w_4}。也就是说Error()=bcorrectew4+berrorew4Error(所有数据)= b_{correct} * e^{-w_4} + b_{error} * e^{w_4}

    • 我们只需要Error()=bcorrectew4+berrorew4Error(所有数据)= b_{correct} * e^{-w_4} + b_{error} * e^{w_4}w4w_4求导。令导数等于0就可以得到最优解。令对w4w_4求导得到的式子等于0,有bcorrectew4+berrorew4=0b_{correct} * -e^{-w_4} + b_{error} * e^{w_4}=0。即bcorrect+berrore2w4=0-b_{correct} + b_{error} * e^{2*w_4}=0。所以算出来w4=12ln(bcorrectberror)w_4 =frac 1 2 ln(frac {b_{correct}} {b_{error}})

    • 为了看看 bcorrectberrorb_{correct} 与 b_{error}之间的关系。现在我们把Error()=bcorrectew4+berrorew4Error(所有数据)= b_{correct} * e^{-w_4} + b_{error} * e^{w_4},与式子Error()=yi=k4(xi)aiew4+yi!=k4(xi)aiew4Error(所有数据)= sum_{y_i=k_4(x_i)} a_i * e^{-w_4} + sum_{y_i != k_4(x_i)} a_i * e^{w_4}对比着看看。bcorrect+berrorb_{correct} + b_{error}它是前3个分类器的误差,前3个分类器的误差跟第4个分类器半毛钱关系都没有。也就是说相对于w4w_4其实他是等于一个常数固定值。我们假设这个固定值为b。那么有bcorrect=bberrorb_{correct} = b-b_{error}

    • 所以w4=12ln(bberrorberror)=12ln(1berrorbberrorb)w_4 =frac 1 2 ln(frac {b-b_{error}} {b_{error}})=frac 1 2 ln(frac {1- frac {b_{error}}{b}} {frac {b_{error}}{b}})。其中berrorbfrac {b_{error}}{b}是加入第4个分类器后的错误率。

    • 伪代码如下所示:
      在这里插入图片描述

    知乎 https://www.zhihu.com/people/yuanmuou/activities
  • 相关阅读:
    简历的快速复制
    使用stringstream对象简化类型转换
    猴子吃桃
    new和delete运算符
    绘制正余弦曲线
    计算学生的平均成绩
    判断是否为回文字符串
    统计各种字符个数
    验证用户名
    回溯法(挑战编程)
  • 原文地址:https://www.cnblogs.com/ailitao/p/11047290.html
Copyright © 2020-2023  润新知