机器学习算法总结--提升方法

参考自:

  • 《统计学习方法》
  • 浅谈机器学习基础(上)
  • Ensemble learning:Bagging,Random Forest,Boosting

简介

提升方法(boosting)是一种常用的统计学习方法,在分类问题中,它通过改变训练样本的权重,学习多个分类器,并将这些分类器进行线性组合,提供分类的性能。

boosting和bagging

boosting和bagging都是集成学习(ensemble learning)领域的基本算法,boosting和bagging使用的多个分类器的类型是一致的。

Bagging

bagging也叫自助汇聚法(bootstrap aggregating),比如原数据集中有N个样本,我们每次从原数据集中有放回的抽取,抽取N次,就得到了一个新的有N个样本的数据集,然后我们抽取S个N次,就得到了S个有N个样本的新数据集,然后拿这S个数据集去训练S个分类器,之后应用这S个分类器进行分类,选择分类器投票最多的类别作为最后的分类结果。一般来说自助样本的包含有63%的原始训练数据,因为:

假设共抽取N个样本,则N次都没有抽到的概率是p=(11N)N

则一个样本被抽到的概率有p=1(11N)N

所以,当N很大时有:p=11e=0.632

这样,在一次bootstrap的过程中,会有36%的样本没有被采样到,它们被称为out-off-bag(oob),这是自助采样带给bagging的里一个优点,因为我们可以用oob进行“包外估计”out-of-bag estimate

bagging通过降低基分类器的方差改善了泛化误差,bagging的性能依赖于基分类器的稳定性。如果基分类器是不稳定的,bagging**有助于减少训练数据的随机波动导致的误差,如果基分类器是稳定的,即对训练数据集中的微小变化是鲁棒的,则组合分类器的误差主要由基分类器偏移所引起的,这种情况下,**bagging可能不会对基分类器有明显的改进效果,甚至可能降低分类器的性能。

boosting与bagging的区别

  • bagging通过有放回的抽取得到了S个数据集,而boosting用的始终是原数据集,但是样本的权重会发生改变。
  • boosting对分类器的训练是串行的,每个新分类器的训练都会受到上一个分类器分类结果的影响。
  • bagging里面各个分类器的权重是相等的,但是boosting不是,每个分类器的权重代表的是其对应分类器在上一轮分类中的成功度。

AdaBoost是boosting方法中最流行的版本

AdaBoosts算法

AdaBoost(adaptive boosting)是元算法,通过组合多个弱分类器来构建一个强分类器。我们为训练数据中的每一个样本都赋予其一个权重,这些权重构成了向量D,一开始,这些权重都初始化成相等值,然后每次添加一个弱分类器对样本进行分类,从第二次分类开始,将上一次分错的样本的权重提高,分对的样本权重降低,持续迭代。此外,对于每个弱分类器而言,每个分类器也有自己的权重,取决于它分类的加权错误率,加权错误率越低,则这个分类器的权重值α越高,最后综合多个弱分类器的分类结果和其对应的权重α得到预测结果,AdaBoost是最好的监督学习分类方法之一。

其算法过程如下所示:

这里写图片描述

其中,注意:

这里写图片描述

训练误差分析

AdaBoost算法的最基本性质是在学习过程中不断减小训练误差,对训练误差的上界有如下定理:

定理1:AdaBoost最终分类器的训练误差界为:

>1Ni=1NI(G(xi)yi)1Niexp(yif(xi))=mZm>

定理2:二类分类问题

>m=1MZm=m=1M[2em(1em)]=m=1M[14γ2mexp(2m=1Mγ2m)>

算法解释

AdaBoost算法还可以解释为模型是加法模型,损失函数是指数函数,学习算法是前向分步算法的二类分类学习方法。

加法模型是形如f(x)=Mi=1βmb(x;γm)的函数形式,其中b(x;γm)是基函数,而βm是基函数的系数,γm是基函数的参数。对于AdaBoost算法,其基本分类器的线性组合为f(x)=Mm=1αmGm(x)正是一个加法模型。

AdaBoost算法的损失函数是指数函数,公式为E=Ni=1exp(yiGm(xi))

此外,经过m轮迭代可以得到fm(x)=fm1(x)+αmGm(x)。而前向分步算法的过程如下所示:

这里写图片描述

通过上述步骤,前向分步算法将同时求解从m=1M所有参数βm,γm的优化问题简化为逐步求解各个βm,γm的优化问题。

优缺点

优点

  1. 泛化误差低
  2. 容易实现,分类准确率较高,没有太多参数可以调

缺点

对异常值比较敏感

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

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

相关文章

matlab画x的1 3次方,如何用Matlab画出f(x)=f(x-1)+2的x次方*3的图像

如何用Matlab画出f(x)f(x-1)2的x次方*3的图像以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!如何用Matlab画出f(x)f(x-1)2的x次方*3的图像你要画的范围假设是0到10Fzeros(1,10);F(1)1;要有初…

wu** C语言注意点

1 函数的注释2.1 文档的结构2.2 头文件的结构 static, extern2.3 目录结构3 函数设计: 函数输出参数:返回正常值;return返回错误值。 函数中定义局部数组,char str[] "……"影响堆栈 内存泄露检测工具。4 …

机器学习算法总结--GBDT

参考如下 机器学习(四)— 从gbdt到xgboost机器学习常见算法个人总结(面试用)xgboost入门与实战(原理篇) 简介 GBDT是一个基于迭代累加的决策树算法,它通过构造一组弱的学习器(树&a…

matlab画半球面,Matlab 绘制3D半球

R10;zreal(zeros(201,201));m0;n0;step 0.1;for x-R:step:Rm m 1;%xfor y-sqrt(R*R - x*x):step:sqrt(R*R - x*x)%yn int32(y / step) R / step 1;%nz(n, m) real(sqrt(R*R - x*x - y*y));endforendfor%zmesh(z);另一种方法(from octave):function [xx, yy, …

机器学习算法总结--EM算法

参考自 《统计学习方法》机器学习常见算法个人总结(面试用)从最大似然到EM算法浅解(EM算法)The EM Algorithm 简介 EM算法,即期望极大算法,用于含有隐变量的概率模型的极大似然估计或极大后验概率估计&am…

流程平台:子表控件(二) - 属性、事件、方法

子表控件的元数据如下:属性、事件、方法: public class SheetSubTableSZ : WebControl, ISheetControl{// 分隔符public const char Separator ;;public const string SeqNoColumnName "序号";// 添加按钮public Button Add;// …

nginx php7 win,Win7配置Nginx+PHP7

NginxNginx有官方native build的32bit版本, 也有cygwin build的64bit版本, 出于稳定性的考虑, 还是选了官方的32bit.解压, 本例中使用的路径是 C:\Servers\nginx-1.9.12 , 创建两个bat, 用于启动和关闭nginx:start_nginx.bat1234echooffsetNGINX_HOMEC:\Servers\nginx-1.9.12st…

(转)Thrift在Windows及Linux平台下的安装和使用示例

转载自Thrift在Windows及Linux平台下的安装和使用示例 thrift介绍 Apache Thrift 是 Facebook 实现的一种高效的、支持多种编程语言的RPC(远程服务调用)框架。 本文主要目的是分别介绍在Windows及Linux平台下的Thrift安装步骤,以及实现一个简单的demo演示Thrif…

CPP第四版第四章:创建动态数组

数组类型的变量有三个重要限制: 数组长度固定不变 在编译时必须知道其长度 数组只在定义它的块语句内存在 每一个程序在执行时都占用一块可用的内存空间,用于存放动态分配的对象,此内存空间称为程序的自由存储区或堆…

matlab中数据变为nan,字符转化为数值型中出现NAN

我将字符型转化为数值型,然后画图,结果图形没有曲线,这是怎么回事?我用的函数是str2double和str2num都试了,都不行。我的程序如下,其中的E2(i)的值我用matlab计算了,为什么是这么庞大的一个数?这…

(转)在Windows上安装GPU版Tensorflow

转载自在Windows上安装GPU版Tensorflow。 1. 下载安装Anaconda 简单说就是下载 64位 python 3.5 版本的Anaconda https://www.continuum.io/downloads#windows 安装情况:新机,未装python。 注意 a. Windows只支持64位 python 3.5 https://www.ten…

(转载)Linux僵死进程的产生与避免

(转载)http://blog.chinaunix.net/uid-23089249-id-210808.html一个进程在调用exit命令结束自己的生命的时候,其实它并没有真正的被销毁, 而是留下一个称为僵死进程(Zombie)的数据结构(系统调用…

php怎么查询数据库密码,如何验证php中的密码是通过mysql查询手动散列插入到数据库中的?...

有没有办法通过自己的散列方法插入mysql数据库的php验证密码?例如,如果我手动在表中插入用户数据,请假设用户表,如下所示:INSERT INTO users (email, pswd) VALUES (demoexample.com, SHA1(pass123));让我们假设mysql数据库中的哈希密码是:--…

(转)非极大抑制(Non-Maximum Suppression)

转载自非极大抑制(Non-Maximum Suppression)。 参考文章: 1. Non-Maximum Suppression for Object Detection in Python 2. NMS非极大值抑制 最近在做人脸识别的项目,其中在人脸检测算法中MTCNN算法是用到了NMS算法来筛选候选…

安装配置Eclipse开发PHP环境配置

文章结束给大家来个程序员笑话:[M] Eclipse发开PHP环境配置 首先准备好件软: 1. Apache,到这里找个最新本版 2. PHP,到这里下载 3. Eclipse IDE for Java EE Developers,到这里下载 4. DLTK Core Frameworks 1.0 Integration buil…