Adaboost\GBDT\GBRT\组合算法
Adaboost\GBDT\GBRT\组合算法(龙心尘老师上课笔记)
一、Bagging (并行bootstrap)& Boosting(串行)
随机森林实际上是bagging的思路,而GBDT和Adaboost实际上是boosting的思路。而bagging和boosting有什么区别呢?怎样从bagging转到boosting呢?
Bagging的假设函数:
如果是二分类问题:,其中T是分类器的总数,g(x)是其中的小分类器的取值(+1或-1),最后根据各个分类器的值求加和,根据和的符号得到最终大分类器是正还是负。
如果是回归问题:,最后取得是各个小分类器的平均值。
Bagging的特点1.各个学习器相互独立,可以同时并行生成;2.各个学习期权重相同
而Boosting特别大的区别就在于,各个学习器强烈依赖(上一个学习器产生,再产生下一个),串行生成,其中,gbdt(每个学习器权重相同),Adaboost(每个学习器权重不同)。
Boosting要解决的核心问题:
产生不同的训练集(训练集各样本标签不同,训练集各样本抽样权重不同)
产生不同的模型(不同的训练集,就能产生不同模型)
产生不同模型对应的权重
二、GBDT(生成新标签,串行生成树)
假设函数:
损失函数:均方损失函数
其中红色部分是之前集成学习器产生的残差,对应来看,这样可以理解成,红色部分相当于可以把之前学习器的残差,作为原来样本的新标签。这样就产生了新的训练集可以生成新的模型(下面右图2)。集成弱模型,得到强模型(下图3,样本x不变,标签Y变),依次下去重复,直到集合成最强模型。
损失函数:
(一阶泰勒展开,因为h(x)不是单位长度,所以需要放缩到单位长度,变成有约束条件下的凸优化问题;chargeboost中试二阶展开,就不用放缩了)
从集成学习器变成基学习器,不优化集成学习器整体,而以之前的学习器为已知项(G(X)),优化增加的那个学习器(损失函数也优化基学习器的)。不优化权重整体,而以之前的权重为已知项,优化权重变化的小量。每一步H(X)实际上就是CART树的生成过程。
三、Adaboost(每次新的学习器是基于上一次分类错误的样本,通过关注样本的权重来实现)
可以证明GDBT也是Adaboost的一种,最本质的区别:损失函数不同,指数损失函数:
另一个区别:假设函数不同:
g(x)的取值实际上是+1,-1,然后给一个权重相加,最后只取符号,正的就是+1,负的就是-1;a会越来越小,后面的学习器会越来越弱,所以尽管后面可能有些前面的被分类错误了,影响也不大。一直经历分对,分错,分对,分错的过程,直到损失函数最小,但后面的学习器的分布权重减少。
理解Adaboost训练过程
1. 新的弱模型来自于上一个弱模型,而不是之前所有模型的集合(GBDT)
2. 每个弱模型到强模型之前有权重(弱模型自身生成的权重)
3. 新权重,是样本的权重
样本权重:不同的样本分布权重对应不同训练集,类比boostrap,每一次boostrap抽样产生的新的训练集各类别样本比例不一样。(类似于上采样,多复制几遍负样本,也就是给予较多的权重)
基于错误分类的样本,给予权重的放大缩小,以使其分类正确。
样本的权重(其实是损失函数的系数):
新的分类器必须是在上一个分类器上表现最差,与上一个分类器不一样,这样才能改进上一个学习器,否者没有什么作用,而二分类问题,表现最差的情况就是拍脑袋分类1/2概率,从而求解权重un. 这种方式求解u过麻烦,因而就有了下图中,构造一种递推的方式。
模型的权重:
误差率越小,模型权重越高,也就是说如果一个模型能把所有的都分对,那我们就给予一个很高的权重。
梯度下降理解Adaboost:
要求解的仍然是增加的新学习器的g(x)和模型权重at
求解h(x),最优解就是h(x)=gt
求解η,最优解就是模型权重at
四、集成学习
精英制是加了权重之后再投票。
偏差是算法可能预测出一系列的值,取平均,与真实结果的偏离。方差是训练集数据的变化对学习结果的影响。如果说一个模型偏差高,则是欠拟合;如果说一个模型方差高,则是过拟合。一个模型的误差是由方差、偏差和噪声共同构成。
损失函数,adaboost基学习器的损失还是是0-1损失函数,只是前面加了权重,集成学习器的损失函数为指数损失函数;CART也可以看做集成学习器,看成是每一个树桩的集成学习。
Adaboost\GBDT\GBRT\组合算法的更多相关文章
- 机器学习总结(一) Adaboost,GBDT和XGboost算法
一: 提升方法概述 提升方法是一种常用的统计学习方法,其实就是将多个弱学习器提升(boost)为一个强学习器的算法.其工作机制是通过一个弱学习算法,从初始训练集中训练出一个弱学习器,再根据弱学习器的表 ...
- 排列组合算法(PHP)
用php实现的排列组合算法.使用递归算法,效率低,胜在简单易懂.可对付元素不多的情况. //从$input数组中取$m个数的组合算法 function comb($input, $m) { if($m ...
- C#语法灵活运用之排列组合算法
今天群里有朋友求一个排列组合算法,题目是给定长度,输出所有指定字母的组合. 如指定字母a.b.c.d.e.f,长度为2,则结果应为:aa.ab.ac ... ef.ff. 有朋友给出算法,很有特色: ...
- JAVA-- M选N的组合算法
M选N的组合算法 只要每个数字出现一次就可以 举例 :也就是说123与321和213属于重复 只算一组 此算法已经排除了重复数据 应用--彩票的注数算法 本程序的思路是开一个数组b,其长度 ...
- Lua版组合算法
高效率的排列组合算法--<编程珠矶>--Lua实现 原文链接 原文是python实现的,这里给出lua版本的实现 组合算法 本程序的思路是开一个数组,其下标表示1到m个数,数组元素 ...
- 基于C#程序设计语言的三种组合算法
目录 基于C#程序设计语言的三种组合算法 1. 总体思路 1.1 前言 1.2 算法思路 1.3 算法需要注意的点 2. 三种组合算法 2.1 普通组合算法 2.2 与自身进行组合的组合算法 2.3 ...
- python实现高效率的排列组合算法-乾颐堂
组合算法 本程序的思路是开一个数组,其下标表示1到m个数,数组元素的值为1表示其下标 代表的数被选中,为0则没选中. 首先初始化,将数组前n个元素置1,表示第一个组合为前n个数. 然后从左到右扫描数组 ...
- 提升学习算法简述:AdaBoost, GBDT和XGBoost
1. 历史及演进 提升学习算法,又常常被称为Boosting,其主要思想是集成多个弱分类器,然后线性组合成为强分类器.为什么弱分类算法可以通过线性组合形成强分类算法?其实这是有一定的理论基础的.198 ...
- 基于Adaboost的人脸检测算法
AdaBoost算法是一种自适应的Boosting算法,基本思想是选取若干弱分类器,组合成强分类器.根据人脸的灰度分布特征,AdaBoost选用了Haar特征[38].AdaBoost分类器的构造过程 ...
随机推荐
- 并行计算提升32K*32K点(32位浮点数) FFT计算速度(4核八线程E3处理器)
对32K*32K的随机数矩阵进行FFT变换,数的格式是32位浮点数.将产生的数据存放在堆上,对每一行数据进行N=32K的FFT,记录32K次fft的时间. 比较串行for循环和并行for循环的运行时间 ...
- phpstorm 无法格式化代码
phpstorm 默认的格式化代码的快捷键是 Ctrl + Alt + L,但是按了没有反应. 原因是当时开着网易云音乐,占用了这个快捷键,关了就好了.另外其他的程序比如QQ也有可能占用这个快捷键.
- Android国际化--I18N
在res下创建对应国家的环境的目录如:values-zh,values-en,然后在对应的目录下将对应的字符串翻译成对应国家的语言即可.
- SQL 基础语法(一)
SQL 语法 数据库表 一个数据库通常包含一个或多个表.每个表由一个名字标识(例如"客户"或者"订单").表包含带有数据的记录(行). 下面的例子是一个名为 & ...
- ftp文件的部署
之前在公司搭建了一个静态资源服务器,现在来记录一下 我们是通过搭建vsftp服务,然后结合apache.访问方式为http的方式 一:VSFTPD环境安装 首先我们就是要查看一下vsftpd是否有安装 ...
- CURL HELP
CURL下载 在windows的系统环境变量中,将CURL的路径(curl.exe存放的路径)复制到"Path"变量的结尾 Usage: curl [options...] < ...
- bzoj2243
2243: [SDOI2011]染色 Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 6753 Solved: 2496[Submit][Status ...
- javascript json字符串与对象相互转换
在实际项目中,经常遇到字符格式的问题,记下来以便日后方便查看.用到两个函数:JSON.stringify() 和 JSON.parse(). 使用ajax向后台请求数据,后台给前端返回数据,明明后端脚 ...
- Servlet学习:实现分页效果的方法
分页的算法:需要定义四个变量,它们有各自的用处int pageSize:每页显示多少条记录int pageNow:希望显示第几页int pageCount:一共有多少页int rowCount:一共有 ...
- pureftp在centos下与MySQL搭配使用
概述 pure-ftpd是linux下的一个ftp服务端,据说安全性较高.我在centos6下用yum安装pure-ftpd,并配置了通过MySQL进行用户的增删改查,以及对应到apache的web目 ...