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


推荐阅读
  • 深入理解C++中的KMP算法:高效字符串匹配的利器
    本文详细介绍C++中实现KMP算法的方法,探讨其在字符串匹配问题上的优势。通过对比暴力匹配(BF)算法,展示KMP算法如何利用前缀表优化匹配过程,显著提升效率。 ... [详细]
  • 机器学习中的相似度度量与模型优化
    本文探讨了机器学习中常见的相似度度量方法,包括余弦相似度、欧氏距离和马氏距离,并详细介绍了如何通过选择合适的模型复杂度和正则化来提高模型的泛化能力。此外,文章还涵盖了模型评估的各种方法和指标,以及不同分类器的工作原理和应用场景。 ... [详细]
  • 2023年京东Android面试真题解析与经验分享
    本文由一位拥有6年Android开发经验的工程师撰写,详细解析了京东面试中常见的技术问题。涵盖引用传递、Handler机制、ListView优化、多线程控制及ANR处理等核心知识点。 ... [详细]
  • Google最新推出的嵌入AI技术的便携式相机Clips现已上架,旨在通过人工智能技术自动捕捉用户生活中值得纪念的时刻,帮助人们减少照片数量过多的问题。 ... [详细]
  • libsodium 1.0.15 发布:引入重大不兼容更新
    最新发布的 libsodium 1.0.15 版本带来了若干不兼容的变更,其中包括默认密码散列算法的更改和其他重要调整。 ... [详细]
  • 毕业设计:基于机器学习与深度学习的垃圾邮件(短信)分类算法实现
    本文详细介绍了如何使用机器学习和深度学习技术对垃圾邮件和短信进行分类。内容涵盖从数据集介绍、预处理、特征提取到模型训练与评估的完整流程,并提供了具体的代码示例和实验结果。 ... [详细]
  •   上一篇博客中我们说到线性回归和逻辑回归之间隐隐约约好像有什么关系,到底是什么关系呢?我们就来探讨一下吧。(这一篇数学推导占了大多数,可能看起来会略有枯燥,但这本身就是一个把之前算法 ... [详细]
  • 探索如何使用公共数据集为您的编程项目提供动力。无论您是编程新手还是有经验的开发者,本文将为您提供实用建议和资源,帮助您启动并运行一个创新的数据驱动型项目。 ... [详细]
  • 尽管深度学习带来了广泛的应用前景,其训练通常需要强大的计算资源。然而,并非所有开发者都能负担得起高性能服务器或专用硬件。本文探讨了如何在有限的硬件条件下(如ARM CPU)高效运行深度神经网络,特别是通过选择合适的工具和框架来加速模型推理。 ... [详细]
  • 深入理解K近邻分类算法:机器学习100天系列(26)
    本文详细介绍了K近邻分类算法的理论基础,探讨其工作原理、应用场景以及潜在的局限性。作为机器学习100天系列的一部分,旨在为读者提供全面且深入的理解。 ... [详细]
  • Coursera ML 机器学习
    2019独角兽企业重金招聘Python工程师标准线性回归算法计算过程CostFunction梯度下降算法多变量回归![选择特征](https:static.oschina.n ... [详细]
  • 机器学习核心概念与技术
    本文系统梳理了机器学习的关键知识点,涵盖模型评估、正则化、线性模型、支持向量机、决策树及集成学习等内容,并深入探讨了各算法的原理和应用场景。 ... [详细]
  • 随着生活节奏的加快和压力的增加,越来越多的人感到不快乐。本文探讨了现代社会中导致人们幸福感下降的各种因素,并提供了一些改善建议。 ... [详细]
  • Python中HOG图像特征提取与应用
    本文介绍如何在Python中使用HOG(Histogram of Oriented Gradients)算法进行图像特征提取,探讨其在目标检测中的应用,并详细解释实现步骤。 ... [详细]
  • Python 工具推荐 | PyHubWeekly 第二十一期:提升命令行体验的五大工具
    本期 PyHubWeekly 为大家精选了 GitHub 上五个优秀的 Python 工具,涵盖金融数据可视化、终端美化、国际化支持、图像增强和远程 Shell 环境配置。欢迎关注并参与项目。 ... [详细]
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社区 版权所有