热门标签 | 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;欢迎学习交流指正。我是钱多多


推荐阅读
  • 初探K近邻算法与Scikit-learn API
    本文介绍了Scikit-learn这一强大的机器学习库,重点探讨了其最新稳定版本及其安装方法,并通过一个简单的K近邻算法实例展示了如何使用Scikit-learn进行模型训练和预测。 ... [详细]
  • 京东AI创新之路:周伯文解析京东AI战略的独特之处
    2018年4月15日,京东在北京举办了人工智能创新峰会,会上首次公开了京东AI的整体布局和发展方向。此次峰会不仅展示了京东在AI领域的最新成果,还标志着京东AI团队的首次集体亮相。本文将深入探讨京东AI的发展策略及其与BAT等公司的不同之处。 ... [详细]
  • 随着iPhone 11系列的发布,苹果公司引入了先进的夜间模式,显著提升了夜间摄影的质量,解决了之前版本在低光环境下拍摄效果不佳的问题。 ... [详细]
  • 深入理解Kafka架构
    本文将详细介绍Kafka的内部工作机制,包括其工作流程、文件存储机制、生产者与消费者的具体实现,以及如何通过高效读写技术和Zookeeper支持来确保系统的高性能和稳定性。 ... [详细]
  • 在Ubuntu 16.04中使用Anaconda安装TensorFlow
    本文详细介绍了如何在Ubuntu 16.04系统上通过Anaconda环境管理工具安装TensorFlow。首先,需要下载并安装Anaconda,然后配置环境变量以确保系统能够识别Anaconda命令。接着,创建一个特定的Python环境用于安装TensorFlow,并通过指定的镜像源加速安装过程。最后,通过一个简单的线性回归示例验证TensorFlow的安装是否成功。 ... [详细]
  • 深入探讨机器学习中的查准率、查全率及F1分数
    本文详细解析了机器学习领域中常用的性能评估指标——查准率、查全率及其综合评价指标F1分数,通过具体案例分析这些指标在实际应用中的重要性和差异。 ... [详细]
  • 聚焦法是一种采用穷尽搜索策略的Filter型特征选择方法,其核心在于寻找能有效区分不同样本的最小特征集合。此方法的评估标准主要依赖于一致性测量。 ... [详细]
  • 车载T-BOX智能网联终端的设计与实现
    本文介绍了一款基于瑞萨RH850微控制器、TICC2640R2F蓝牙微控制器和高通MDM9628处理器的T-BOX车载终端的设计。该终端通过集成CAN总线、GPS定位、数据加密、蓝牙通信和LTE无线数据传输技术,实现了车辆信息的高效采集与云端通信,支持远程车辆控制和诊断等功能。 ... [详细]
  • Elasticsearch排序机制详解
    本文深入探讨了Elasticsearch中的排序功能,包括相关性排序、字段值排序、多级排序及字符串和多值字段的排序策略,旨在帮助读者更好地理解和优化搜索结果。 ... [详细]
  • 本文详细探讨了如何在 SparkSQL 中创建 DataFrame,涵盖了从基本概念到具体实践的各种方法。作为持续学习的一部分,本文将持续更新以提供最新信息。 ... [详细]
  • 我的新书已正式上市,可在当当和京东购买。如果您喜欢本书,欢迎留下宝贵评价。本书历时3至4年完成,内容涵盖MySQL的安装、配置、开发、测试、监控和运维等方面,旨在帮助读者系统地学习MySQL。 ... [详细]
  • 机器学习算法(五)—— 最优化方法:梯度下降
    一、什么是梯度下降梯度下降是迭代法的一种,可以用于求解最小二乘问题(线性和非线性都可以)。在求解机器学习算法的模型参数,即无约束优化问题时,梯度下降(GradientDescent ... [详细]
  • 本文探讨了数据挖掘技术的发展及其在大数据环境下的应用流程,重点介绍了统计学、在线分析处理、信息检索、机器学习、专家系统和模式识别等领域的最新进展。 ... [详细]
  • 解决getallheaders函数导致的500错误及8种服务器性能优化策略
    本文探讨了解决getallheaders函数引起的服务器500错误的方法,并介绍八种有效的服务器性能优化技术,包括内存数据库的应用、Spark RDD的使用、缓存策略的实施、SSD的引入、数据库优化、IO模型的选择、多核处理策略以及分布式部署方案。 ... [详细]
  • 大数据核心技术解析
    本文深入探讨了大数据技术的关键领域,包括数据的收集、预处理、存储管理、以及分析挖掘等方面,旨在提供一个全面的技术框架理解。 ... [详细]
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社区 版权所有