热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

adaboost深入剖析(上)

真的是太久不写博客了,两个原因,一是懒,二是机器学习这个领域真的是浩如烟海,我要学的东西太多了,不知道该从何说

真的是太久不写博客了,两个原因,一是懒,二是机器学习这个领域真的是浩如烟海,我要学的东西太多了,不知道该从何说起,但是又总会有某个瞬间,感觉自己如获至宝,学到了某些很奇妙的东西,就会有一种想要立刻把它给写下来的冲动。今天这一篇主要想给大家介绍一下adaboost这个算法,前几天听了向世明老师的课,自己课下又推了几遍,简直神奇。

一)基础知识

可能有的朋友刚刚接触这个领域,为了方便大家都能看得懂,我先说一些基础知识。假如有一组数据,分布在一维平面上,数据和标签如下图所示:

那么大家一看就知到这不是一个简单的线性可分的问题,为了跟直观的给大家感受,做个这样的图

那么什么分类器,你给我画一条线,把这些点分为左边和右边。

什么叫线性可分,通过你构建一个分类器,能够完整的把这些点给分开,左边全是红圈,右边都是篮框,这叫线性可分

那么什么叫线性不可分,上图所示就是线性不可分,你通过一条线分不开

在给大家介绍两个概念,什么叫弱分类器,就是通过你画的一条线,虽然不能完全画分,但是准确率是比随机猜测要好的,比如我以x=3.5作为分类器,准确率为0.7,要大于随机猜测的0.5,但是效果又不是很好,所以我们叫它弱分类器。

那么什么叫做强分类器呢,我构建的这个分类器的正确率很高,所以叫强分类器。

那么很明显,本题所举的例子中,通过直接在一维空间没有办法构造出强分类器,那么怎么办呢?

有人就提出了,弱可学习问题能否向强可学习问题转化

1990年, Schapire通过一个构造性方法对“等价性” 问题作出了肯定的回答。 证明多个弱分类器可以集成为一个强分类器。 这就形成了集成学习的理论基础。

我们今天介绍的adaboost算法就是一种经典的集成学习的方法。

二)adaboost算法介绍

adaboost算法可以用这么一句话简单概括:从弱学习算法出发, 反复学习, 得到一系列弱分类器;然后组合这些弱分类器, 构成一个强分类器。具体方法是:提高那些被前一轮弱分类器分错的样本的权重, 降低已经被正确分类的样本的权重。 错分的样本将在下一轮弱分类器中得到更多关注。

1)训练数据集

T={(x_1,y_1),(x_2,y_2),(x_3,y_3)........(x_n,y_n)}

其中x_n代表第n个数据点的数据,y_n代表第i个的标签,值为1或-1.

弱学习算法

2)会给每个数据一开始都分配一个权重,一开始这个权重是相等的都是\frac{1}{n},等到一个弱训练器训练结束之后,会对分对的数据减小权重,对分错的数据增大权重,也就是说在下一个弱分类器中将注意力更多的关注到被错分的数据中去。

权重表示为:D_1={w_{11},w_{12},w_{13},.......,w_{1n}},

权重初始化为w_{1,n}=\frac{1}{n}

3)循环:m=1,2,3......n:

训练第m个弱分类器:G_m(x),输出结果为1或者-1,

4)计算G_m(x)在数据集上的分类错误率:e_m=p(G_m(x)\neq y)=\sum_{i=1}^n w_{mi}I(G_m(x)\neq y)

这里需要提醒一点,这个错误率不能高于0.5,不然瞎猜都比你分类器正确率高,要你何用?嗯,学术点讲是,不然这个所分类器就没有办法对最后的集成学习带来正面效果。

5)计算G_m(x)在最终集成分类器中的贡献系数\alpha_m,我们所有的弱分类器最终都是要通过加权集成算法来合并为一个强分类器,所以这个贡献系数\alpha_m就显得特别重要

\alpha_m=\frac{1}{2}ln\frac{1-e_m}{e_m}

从公式可以得知\alpha_m将随着e_m的减小而增大。也就是说分类错误率越低的分类器最终对于集成分类器的贡献是越大的

6)从D_m=\left \{ {w_{m1},w_{m2},w_{m3},.......,w_{mn} \right \}更新各数据点权重,这一步是很关键的一步,也可以说是整个adaboost算法的灵魂。

w_{m+1,i}=\frac{w_{mi}}{Z_m}\left\{\begin{matrix} exp(-\alpha_m) if G_m(x)=y_i\\ exp(\alpha_m) if G_m(x)\neq y_i \end{matrix}\right.

可以观察到这个式子中上下只差了一个负号,就是说如果预测结果与真实标签相同则是正号,如果不同就是负号。则上述公式可以改写为:

w_{m+1,i}=\frac{w_{mi}}{Z_m}exp(-\alpha_my_iG_m(x))

同时Z_m是个归一化因子,可写为{Z_m}=\sum_{i=1}^n w_{mi}exp(-\alpha_my_iG_m(x))

对4,5,6三步进行循环

7)构建弱分类器的线性组合f(x)=\sum \alpha_mG_m(x)

最后一句话如果不讲,很多朋友可能会掉坑里,对于最后的分类器我们需要在加一个符号函数G(x)=sign(f(x)),因为如果是一个二分类问题,则我们简单的通过区别正负号就可以获得两类的标签,所以加个符号函数实际上就是从输出到最终标签的转化过程。

三)看一个例子

巴拉巴拉讲半天,不上点干货朋友们可能还是有点蒙蔽,就拿第一部分举的一维分类的例子来讲好了:

初始化权重D_1={w_{11},w_{12},w_{13},.......,w_{1n}}都为0.1

m=1第一个分类器训练过程

在权值分布为 D_1 的训练数据上&#xff0c;阈值 v 取2.5时分类误差率最低 (取不同的阈值&#xff0c;然后计算加权错误率&#xff0c;选择最小者&#xff0c;故基本分类器 G_1(x)为&#xff1a;G_1(x)&#61;\left\{\begin{matrix} 1,x<2.5\\ -1,x>2.5 \end{matrix}\right.

训练误差为&#xff1a;e_1&#61;p(G_1(x)\neq y_1)&#61;0.3

计算G_1(x)的系数\alpha_1\alpha_1&#61;\frac{1}{2}log\frac{1-e_1}{e_1}&#61;0.4236

更新训练的权值分布w_{2,i}&#61;\frac{w_{1i}}{Z_1}exp(-\alpha_1y_iG_1(x))得到的值为

D_2&#61;\left\{0.0715,0.0715,0.0715,0.0715,0.0715,0.0715,0.1666,0.1666,0.1666,0.0715\}\right

分类器f_1(x)&#61;0.4236G_1(x),在数据集上的错误率为0.3

m&#61;2第二个分类器训练过程

在权值分布为 D_2 的训练数据上&#xff0c;阈值 v 取8.5时分类误差率最低 (取不同的阈值&#xff0c;然后计算加权错误率&#xff0c;选择最小者&#xff0c;故基本分类器 G_2(x)为&#xff1a;G_2(x)&#61;\left\{\begin{matrix} 1,x<8.5\\ -1,x>8.5 \end{matrix}\right.

训练误差为&#xff1a;e_2&#61;p(G_2(x)\neq y_2)&#61;0.2143

计算G_2(x)的系数\alpha_2\alpha_2&#61;\frac{1}{2}log\frac{1-e_2}{e_2}&#61;0.6496

更新训练的权值分布w_{3,i}&#61;\frac{w_{2i}}{Z_2}exp(-\alpha_2y_iG_2(x))得到的值为

D_3&#61;\left\{0.0455,0.0455,0.0455,0.1667,0.1667,0.1667,0.1060,0.1060,0.1060,0.0455\}\right

分类器f_2(x)&#61;0.4236G_1(x)&#43;0.6496G_2(x),在数据集上的错误率为0.3

m&#61;3第三个分类器训练过程

在权值分布为 D_3 的训练数据上&#xff0c;阈值 v 取5.5时分类误差率最低 (取不同的阈值&#xff0c;然后计算加权错误率&#xff0c;选择最小者&#xff0c;故基本分类器 G_3(x)为&#xff1a;G_3(x)&#61;\left\{\begin{matrix} 1,x<5.5\\ -1,x>5.5 \end{matrix}\right.

训练误差为&#xff1a;e_3&#61;p(G_3(x)\neq y_3)&#61;0.1820

计算G_3(x)的系数\alpha_3\alpha_3&#61;\frac{1}{2}log\frac{1-e_3}{e_3}&#61;0.7514

更新训练的权值分布w_{4,i}&#61;\frac{w_{3i}}{Z_3}exp(-\alpha_3y_iG_3(x))得到的值为

D_3&#61;\left\{0.125,0.125,0.125,0.102,0.102,0.102,0.065,0.065,0.065,0.125\}\right

分类器f_3(x)&#61;0.4236G_1(x)&#43;0.6496G_2(x)&#43;0.7514G_3(x),在数据集上的错误率为0

哎&#xff0c;有没有很惊讶&#xff0c;仅仅三个弱分类器就组成了一个强分类器&#xff0c;并且完成了貌似不可能的工作

哈哈哈&#xff0c;科普部分到这里就结束了&#xff0c;在下一篇《adaboost深入剖析&#xff08;下&#xff09;》中&#xff0c;我会对为什么adaboost能够有这么好的效果进行理论的证明&#xff0c;有兴趣的同学可以跟下去。

参考&#xff1a;

向世明老师课堂所讲以及李航老师《统计学习原理》

个人学习笔记&#xff0c;欢迎学习交流指正。我是钱多多


推荐阅读
  • cs231n Lecture 3 线性分类笔记(一)
    内容列表线性分类器简介线性评分函数阐明线性分类器损失函数多类SVMSoftmax分类器SVM和Softmax的比较基于Web的可交互线性分类器原型小结注:中文翻译 ... [详细]
  • 本文介绍了闭包的定义和运转机制,重点解释了闭包如何能够接触外部函数的作用域中的变量。通过词法作用域的查找规则,闭包可以访问外部函数的作用域。同时还提到了闭包的作用和影响。 ... [详细]
  • 近年来,大数据成为互联网世界的新宠儿,被列入阿里巴巴、谷歌等公司的战略规划中,也在政府报告中频繁提及。据《大数据人才报告》显示,目前全国大数据人才仅46万,未来3-5年将出现高达150万的人才缺口。根据领英报告,数据剖析人才供应指数最低,且跳槽速度最快。中国商业结合会数据剖析专业委员会统计显示,未来中国基础性数据剖析人才缺口将高达1400万。目前BAT企业中,60%以上的招聘职位都是针对大数据人才的。 ... [详细]
  • 本文介绍了C#中生成随机数的三种方法,并分析了其中存在的问题。首先介绍了使用Random类生成随机数的默认方法,但在高并发情况下可能会出现重复的情况。接着通过循环生成了一系列随机数,进一步突显了这个问题。文章指出,随机数生成在任何编程语言中都是必备的功能,但Random类生成的随机数并不可靠。最后,提出了需要寻找其他可靠的随机数生成方法的建议。 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • 不同优化算法的比较分析及实验验证
    本文介绍了神经网络优化中常用的优化方法,包括学习率调整和梯度估计修正,并通过实验验证了不同优化算法的效果。实验结果表明,Adam算法在综合考虑学习率调整和梯度估计修正方面表现较好。该研究对于优化神经网络的训练过程具有指导意义。 ... [详细]
  • 浏览器中的异常检测算法及其在深度学习中的应用
    本文介绍了在浏览器中进行异常检测的算法,包括统计学方法和机器学习方法,并探讨了异常检测在深度学习中的应用。异常检测在金融领域的信用卡欺诈、企业安全领域的非法入侵、IT运维中的设备维护时间点预测等方面具有广泛的应用。通过使用TensorFlow.js进行异常检测,可以实现对单变量和多变量异常的检测。统计学方法通过估计数据的分布概率来计算数据点的异常概率,而机器学习方法则通过训练数据来建立异常检测模型。 ... [详细]
  • 词袋模型的通俗介绍
    词,袋, ... [详细]
  • 本文详细介绍了商汤科技面试中涉及的CV算法面经内容,包括CornerNet的介绍与CornerPooling的解决方案、Mimic知识蒸馏的实现方式、MobileNet的特点、普通卷积和DW PW卷积的计算量推导、Residual结构的来源等。同时还讨论了在人脸关键点和检测中的mimic实现方式、pose对人脸关键点的提升作用、目标检测中可能遇到的问题以及处理检测类别冲突的方法。此外,还涉及了对机器学习的了解程度和相似度分析的问题。 ... [详细]
  • 建立分类感知器二元模型对样本数据进行分类
    本文介绍了建立分类感知器二元模型对样本数据进行分类的方法。通过建立线性模型,使用最小二乘、Logistic回归等方法进行建模,考虑到可能性的大小等因素。通过极大似然估计求得分类器的参数,使用牛顿-拉菲森迭代方法求解方程组。同时介绍了梯度上升算法和牛顿迭代的收敛速度比较。最后给出了公式法和logistic regression的实现示例。 ... [详细]
  • 数据结构与算法的重要性及基本概念、存储结构和算法分析
    数据结构与算法在编程领域中的重要性不可忽视,无论从事何种岗位,都需要掌握数据结构和算法。本文介绍了数据结构与算法的基本概念、存储结构和算法分析。其中包括线性结构、树结构、图结构、栈、队列、串、查找、排序等内容。此外,还介绍了图论算法、贪婪算法、分治算法、动态规划、随机化算法和回溯算法等高级数据结构和算法。掌握这些知识对于提高编程能力、解决问题具有重要意义。 ... [详细]
  • 前言:拿到一个案例,去分析:它该是做分类还是做回归,哪部分该做分类,哪部分该做回归,哪部分该做优化,它们的目标值分别是什么。再挑影响因素,哪些和分类有关的影响因素,哪些和回归有关的 ... [详细]
  • 在本教程中,我们将看到如何使用FLASK制作第一个用于机器学习模型的RESTAPI。我们将从创建机器学习模型开始。然后,我们将看到使用Flask创建AP ... [详细]
  • 【论文】ICLR 2020 九篇满分论文!!!
    点击上方,选择星标或置顶,每天给你送干货!阅读大概需要11分钟跟随小博主,每天进步一丢丢来自:深度学习技术前沿 ... [详细]
author-avatar
0度的浪漫神探
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有