集成学习-Adaboost

Adaboost 中文名叫自适应提升算法,是一种boosting算法。

 

boosting算法的基本思想

对于一个复杂任务来说,单个专家的决策过于片面,需要集合多个专家的决策得到最终的决策,通俗讲就是三个臭皮匠顶个诸葛亮。

对于给定的数据集,学习到一个较弱的分类器比学习到一个强分类器容易的多,boosting就是从弱学习器出发,反复学习,得到多个弱分类器,最后将这些弱分类器组合成强分类器。

 

boosting算法需要解决两个问题

每一轮如何改变训练样本的权重

如何将弱分类器组合成强分类器

 

adaboost是这样做的

1. 提高那些被前一轮弱分类器错误分类的样本的权值,而降低那些被正确分类样本的权值.,这样下个分类器就能专注于那些不好识别的样本,针对性的建立分类器。

2. 对于若分类器的组合,adaboost采取加权多数表决的方式,即加大分类错误率较小的弱分类器的权值,使其在表决中起较大作用,减小分类错误率较高的弱分类器的权值,使其在表决中起较小作用,

这可以理解为有些专家比较权威,他的意见要多采纳,有些只是不知名的专家,可以少采纳。

 

adaboost其实是一个加法模型,损失函数是指数损失函数,学习算法为前向分步算法的二分类学习方法。(其他学习算法如梯度下降)

加法模型

xgboost中其实也是加法模型,应该说boosting算法都是加法模型,而且还有很多算法也是加法模型,那什么是加法模型?

顾名思义,一个模型是由多个模型相加而得

那最终问题转化为基于加法模型的损失最小化,即

通常这是一个十分复杂的优化问题,想要一步到位非常困难,如用梯度下降,所以就有了前向分步算法。

 

前向分步算法

前向分步算法是一种优化算法,可以解决上面加法模型的问题。

大致思路是,从前向后,每一步学习一个基分类器,使得整体损失函数更小一点,从而逐步逼近全局最小值。

 

算法流程

 

解释一点: 新的学习器fm是在上个学习器fm-1的基础上学习的,也就是说在学习fm时fm-1已经确定,所以求L(y, fm)的极小值就是求b(x;r)的极小值,即单个学习器的最小值。

实际上这和梯度下降的思路十分相似,每次减小一点,逼近一点,而且形式也一样 fm=fm-1+βb

 

adaboost算法流程

 

 

 

误差解释

1. 误差计算时除以了Σw,因为每轮迭代时,Σw是一个固定值,而且后面会说明其实它等于1,所以不用除这个。

2. 误差计算时,分类正确为0,其权重被忽略,分类错误为1,其权重累加,所以是I(G!=y)

分类器权重解释

权重更新解释

组合分类器解释

sign函数只能取1和-1,故adaboost为二分类。

当然可以通过修改实现多分类。

 

adaboost有很多种算法,但都大同小异,而且adaboost可以做回归,思路也是大同小异,具体请百度

 

adaboost进阶

正则化

adaboost每个学习器都是弱学习器,为什么还要正则化?其实不是正则化基学习器

fm=fm-1+αb(x,r),这是加法模型,α为基学习器的系数,可以理解为权重,

正则化是对加法模型增加一个学习率v,即fm=fm-1+vαb(x,r),这种方法适合于很多集成学习。

 

基分类器随机化

像随机森林一样,随机选特征,随机选样本

 

总结

理论上来讲,adaboost的弱学习器可以是任何模型,但用的最多的是决策树和神经网络,决策树是cart树

优点:精度高,不容易过拟合

缺点:对异常值敏感,因为异常值可能获得较大权重,最终影响整个模型

 

 

参考资料:

https://www.cnblogs.com/liuwu265/p/4693113.html?ptvd

https://zhuanlan.zhihu.com/p/59751960

https://zhuanlan.zhihu.com/p/42915999

https://blog.csdn.net/hahaha_2017/article/details/79852363

https://blog.csdn.net/guyuealian/article/details/70995333  原理-实例-代码(简明易懂)

转载于:https://www.cnblogs.com/yanshw/p/10631437.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/277905.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

企业数据湖构建之旅

摘要:随着互联网的发展,数据的规模和类型都呈现一个爆炸性的增长,对于这么多类型的数据,如何进行有效的管理和存储,包括数据的分析,这是大家要面临的一个问题。在武汉云栖大会上,阿里云高级产品…

用AzureFunction开发最简单的Teams Bot

之前我有一篇文章讲了如何在azure function上开发最简单的outgoing webhook,收到一些反馈,建议我介绍一下如果在azure function上开发teams bot,那这篇文章就来讲一下如何用function来快速开发bot。 我们先创建一个azure function资源&#…

关于深度学习,这些知识点你需要了解一下

深度学习概述 o 受限玻尔兹曼机和深度信念网络 o Dropout o 处理不平衡的技巧 o SMOTE:合成少数过采样技术 o 神经网络中对成本敏感的学习 深度学习概述 在2006年之前,训练深度监督前馈神经网络总是失败的,其主要原因都是导致…

git add * 提示warning: LF will be replaced by CRLF in 解决办法

在使用git的时候,每次执行 $ git add * 都会提示这样一个警告消息: 虽然说没有什么影响吧。 不过就是觉得太碍眼了, 按照这样设置就没有问题了: git config core.autocrlf false 这样设置git的配置后在执行add操作就没有问题了。 奋斗的年纪你…

Dispatch Queue 之 Invoke 当前队列

 转载于:https://www.cnblogs.com/huahuahu/p/dispatch-queue-zhi-invoke-dang-qian-dui-lie.html

Teams数据统计 - 用户在线离线状态

前几天我在wechat的moments里看到以为朋友发了腾迅会议的对用户个人的年度数据统计,看上去很有大数据感。 实际上 Teams 也具备的类似的能力,只是它把这个能力开放给了开发人员,我们可以通过强大的 Graph API,获取大量的数据信息&…

我们是如何通过全球第一免费开源ERP Odoo做到项目100%交付

传统友商ERP的交付过程 一、先初步需求调研,后选型功能模块 传统友商ERP第一件事情先对客户方进行初步的调研,客户方无论说什么,友商听过算过,只关心你人数多少,有哪些人涉及到哪些模块,接着对模块进行所谓…

Teams数据统计 - 通话记录

上篇文章介绍了如何获取用户的在线状态,这篇文章我们记录介绍如何统计用户通话记录。 首先,Teams为了安全,它要求 app 要有 CallRecords.Read.All 权限。然后就可以通过这个api来获取 call record。 GET /communications/callRecords/{id}这…

解决JS浮点数(小数)计算加减乘除的BUG

2019独角兽企业重金招聘Python工程师标准>>> //浮点数减法运算function FloatSub(arg1,arg2){var r1,r2,m,n;try{r1arg1.toString().split(".")[1].length}catch(e){r10}try{r2arg2.toString().split(".")[1].length}catch(e){r20}mMath.pow(10…

Teams App 如何使用设备的能力

我们以前讲到过,Teams有很多中可以扩展的方面,其中有一种是Tab,开发者可以开发一个web page/app,然后以tab的方式嵌入到teams里面。 除了基本的功能,这种tab也可以使用teams客户端设备所带的一些能力,比如…

实验室3

实验3.1 1 #include<stdio.h>2 int main()3 { long int sum,i;4 sum0;5 for(i22;i<1003;i20){6 sumsumi;7 }8 printf("sum%ld",sum);9 return 0; 10 } 11 1 #include<stdio.h>2 int main()3 { 4 long int…

Teams App自定义

当我们开发的 app 被企业安装后&#xff0c;有些企业挺希望能做一些自定义&#xff0c;如果把app的图标改的更加符合企业风格一点&#xff0c;或者把app的名字改成让本企业员工更容易理解一些&#xff0c;或者把app界面的主题色改成个企业风格更加搭配一些&#xff0c;或者对于…

实验四:xl命令的常见子命令以及操作

实验名称&#xff1a; xl命令的常见子命令以及操作 实验环境&#xff1a; 这里我们需要正常安装一台虚拟机&#xff0c;如下图&#xff1a; 我们这里以一台busybox为例&#xff0c;来进行这些简单的常见的操作&#xff1b; 实验要求&#xff1a; 这里我们准备了5个常见操作&…

Teams App 扫描二维码

上篇文章我们讲了如何在app的manifest里设置设备的权限&#xff0c;这篇文章我们来实际操作开发一个可以扫描二维码的teams app。 首先&#xff0c;我们先到app studio里&#xff0c;创建一个teams app&#xff0c;然后创建tab&#xff0c;重要的一点是&#xff0c;我们确保ma…

关于我的知识星球服务

2019独角兽企业重金招聘Python工程师标准>>> 今天刚开通了我的知识星球-攻城师在路上&#xff0c;欢迎大家加入&#xff0c;目前前50名按最低费用收费50元一年&#xff0c;后面会根据人数情况调整。 希望通过这么一个圈子&#xff0c;让大家信息资源共享&#xff0c…

mysql8用户管理

查看当前登录用户&#xff1a; 创建用户&#xff1a; create user 用户名主机地址 identified with mysql_native_password by 密码; 修改密码&#xff1a; alter user 用户名主机地址 identified with mysql_native_password by 新密码; 原因是&#xff1a;在mysql 5.7.9版本以…

Teams App设备的地理位置能力

我们上一篇文章讲了如何在Teams app里扫描二维码&#xff0c;这篇文章我们来看一下如何获取当前设备的地理位置&#xff0c;并且在地图上显示地理位置。 首先&#xff0c;我们先到app studio里&#xff0c;创建一个teams app&#xff0c;然后创建tab&#xff0c;并且确保我们勾…

Teams App如何选择用户

当我们在开发app的时候&#xff0c;很多时候需要选择一个用户&#xff0c;比如我们开发一个审批的app&#xff0c;就要选择审批人&#xff0c;所以这个app就需要实现选择人的界面&#xff0c;而且需要获取完整的用户列表&#xff0c;但是要获取完整的用户列表又需要app拥有较高…

Python终端如何输出彩色字体

Python终端如何输出彩色字体 Python终端如何输出彩色字体 实现过程&#xff1a;终端的字符颜色是用转义序列控制的&#xff0c;是文本模式下的系统显示功能&#xff0c;和具体的语言无关。转义序列是以ESC开头,即用\033来完成&#xff08;ESC的ASCII码用十进制表示是27&#xf…