热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

PRML读书会第十四章CombiningModels(committees,Boosting,AdaBoost,决策树,条件混合模型)...

主讲人网神(新浪微博:豆角茄子麻酱凉面)网神(66707180)18:57:18大家好,今天我们讲一下第14章combiningmodel

主讲人 网神

(新浪微博: @豆角茄子麻酱凉面)

网神(66707180) 18:57:18 

大家好,今天我们讲一下第14章combining models,这一章是联合模型,通过将多个模型以某种形式结合起来,可以获得比单个模型更好的预测效果。包括这几部分:
committees, 训练多个不同的模型,取其平均值作为最终预测值。

boosting: 是committees的特殊形式,顺序训练L个模型,每个模型的训练依赖前一个模型的训练结果。
决策树:不同模型负责输入变量的不同区间的预测,每个样本选择一个模型来预测,选择过程就像在树结构中从顶到叶子的遍历。
conditional mixture model条件混合模型:引入概率机制来选择不同模型对某个样本做预测,相比决策树的硬性选择,要有很多优势。

本章主要介绍了这几种混合模型。讲之前,先明确一下混合模型与Bayesian model averaging的区别,贝叶斯模型平均是这样的:假设有H个不同模型h,每个模型的先验概率是p(h),一个数据集的分布是:
整个数据集X是由一个模型生成的,关于h的概率仅仅表示是由哪个模型来生成的 这件事的不确定性。而本章要讲的混合模型是数据集中,不同的数据点可能由不同模型生成。看后面讲到的内容就明白了。
首先看committes,committes是一大类,包括boosting,首先将最简单的形式,就是讲多个模型的预测的平均值作为最后的预测。主要讲这么做的合理性,为什么这么做会提高预测性能。从频率角度的概念,bias-variance trade-off可以解释,这个理论在3.5节讲过,我们把这个经典的图copy过来:

这个图大家都记得吧,左边一列是对多组数据分别训练得到一个模型,对应一条sin曲线,看左下角这个图,正则参数lamda取得比较小,得到一个bias很小,variance很大的一个模型 。每条线的variance都很大,这样模型预测的错误就比较大,但是把这么多条曲线取一个平均值,得到右下角图上的红色线,红色线跟真实sin曲线也就是蓝色线 基本拟合。所以用平均之后模型来预测,variance准确率就提高了很多,这是直观上来看,接下里从数学公式推导看下:
有一个数据集,用bootstrap方法构造M个不同的训练集bootstrap方法就是从数据集中随机选N个放到训练集中,做M次,就得到M个训练集,M个训练集训练的到M个模型,用表示,那么用committees方法,对于某个x,最终预测值是:

我们来看这个预测值是如何比单个预测值准确的,假设准确的预测模型是h(x),那么训练得到的y(x)跟h(x)的关系是:

后面那一项是模型的error
ZealotMaster(850458544) 19:24:34 
能使error趋近于0嘛?
网神(66707180) 19:25:13 
模型越好越趋近于0,但很难等于0,这里committes方法就比单个模型更趋近于0
ZealotMaster(850458544) 19:25:28 
求证明
网神(66707180) 19:25:39 
正在证明,平均平方和错误如下:

也就是单个模型的期望error是:


如果用M个模型分别做预测,其平均错误是:


而如果用committes的结果来做预测,其期望错误是:

这个跑到了平方的里面,如果假设不同模型的error都是0均值,并且互不相关,也就是:

就可以得到:

在不同模型error互不相关的假设的下,committes错误是单个模型error的1/M,但实际上,不同模型的error通常是相关的,因此error不会减少这么多,但肯定是小于单个模型的error,接下来讲boosting,可以不考虑那个假设,取得实质的提高.boosting应该是有不同的变种,其中最出名的就是AdaBoost, adaptive boosting. 它可以将多个弱分类器结合,取得很好的预测效果,所谓弱分类器就是,只要比随即预测强一点,大概就是只要准确率超50%就行吧,这是我的理解。
boosting的思想是依次预测每个分类器,每个分类器训练时,对每个数据点加一个权重。训练完一个分类器模型,该模型分错的,再下一个模型训练时,增大权重;分对的,减少权重,具体的算法如下,我把整个算法帖出来,再逐步解释:

大家看下面这个图比较形象:

第一步,初始化每个数据点的权重为1/N.接下来依次训练M个分类器,每个分类器训练时,最小化加权的错误函数(14.15),错误函数看上面贴的算法,从这个错误函数可以看出,权重相同时,尽量让更多的x分类正确,权重不同时,优先让权重大的x分类正确,训练完一个模型后,式(14.16)计算,既分类错误的样本的加权比例. 然后式(14.17)计算:


只要分类器准确率大于50%,就小于0.5, 就大于0。而且越小(既对应的分类器准确率越高),就越大,然后用更新每个数据点的权重,即式(14.18):

可以看出,对于分类错误的数据点,大于0,所以exp(a)就大于1,所以权重变大。但是从这个式子看不出,对于分类正确的样本,权重变小。这个式子表明,分类正确的样本,其权重不变 ,因为exp(0)=1.这是个疑问。如此循环,训练完所有模型,最后用式(14.19)做预测:


从上面过程可以看出,如果训练集合中某个样本在逐步训练每个模型时,一直被分错,他的权重就会一直变大,最后对应的也越来越大,下面看一个图例:

图中有蓝红两类样本 ,分类器是单个的平行于轴线的阈值 ,第一个分类器(m=1)把大部分点分对了,但有2个蓝点,3个红点不对,m=2时,这几个错的就变大了,圈越大,对应其权重越大 ,后面的分类器似乎是专门为了这个几个错分点而在努力工作,经过150个分类器,右下角那个图的分割线已经很乱了,看不出到底对不对 ,应该是都已经分对了吧。
网神(66707180) 19:59:59 
@ZealotMaster 不知道是否明白点了,大家有啥问题?
ZealotMaster(850458544) 20:00:14 
嗯,清晰一些了,这个也涉及over fitting嘛?感觉m=150好乱……
苦瓜炒鸡蛋(852383636) 20:02:23 
是过拟合
网神(66707180) 20:02:25

不同的分割线,也就是不同的模型,是主要针对不同的点的,针对哪些点,由模型组合时的系数来影响。
苦瓜炒鸡蛋(852383636) 20:04:50 

这是韩家炜 那个数据挖掘书的那一段:
网神(66707180) 20:04:56 
嗯,这章后面也讲到了boosting对某些错分的样本反应太大,一些异常点会对模型造成很大的影响。

================================================================

接下来讲boosting的错误函数,我们仔细看下对boosting错误函数的分析,boosting最初用统计学习理论来分析器泛化错误的边界bound,但后来发现这个bound太松,没有意义。实际性能比这个理论边界好得多,后来用指数错误函数来表示。从优化指数损失函数来解释adaboost比较直观,每次固定其他分类器和系数将常量分出来,能推出单分类器的损失函数及系数,再根据常量的形式能得出下一步数据权重的更新方式。指数错误函数如下:

其中N是N个样本点,是多个线性分类器的线性组合:

是分类的目标值。我们的目标是训练系数和分类器的参数,使E最小。
最小化E的方法,是先只针对一个分类器进行最小化,而固定其他分类器的参数,例如我们固定和其系数,只针对做优化,这样错误函数E可以改写为:

也就是把固定的分类器的部分都当做一个常量:,只保留相关的部分。我们用表示分对的数据集,表示分错的数据集,E又可以写成如下形式:
上式中,因为将数据分成两部分,也就确定了是否相等,所以消去了这两个变量
看起来清爽点了:

这里面后一项是常量,前一项就跟前面boosting的算法里所用的错误函数:形式一样了。

上面是将:做最小化得出的结论,即指数错误函数就是boosting里求单个模型时所用的错误函数.类似,也可以得到指数错误函数里的就是boosting里的,确定了根据以及

可以得到,更新w的方法:


又因为有:这又跟boosting里更新数据点权重的方法以一致。
总之,就是想说明,用指数错误函数可以描述boosting的error分析,接下来看看指数错误函数的性质,再贴一下指数错误函数的形式:


其期望error是:

然后最所有的y(x)做variational minimization,得到: 
这是half the log-odds ,看下指数错误函数的图形:


绿色的线是指数错误函数可以看到&#xff0c;对于分错的情况&#xff0c;既z<0时&#xff0c;绿色的线呈指数趋势上升&#xff0c;所以异常点会对训练结果的影响很大。图中红色的线是corss-entropy 错误&#xff0c;是逻辑分类中用的错误函数&#xff0c;对分错的情况&#xff0c;随错误变大&#xff0c;其函数值基本是线性增加的&#xff0c;蓝色线是svm用的错误函数&#xff0c;叫hinge 函数。

 

 

PRML读书会讲稿PDF版本以及更多资源下载地址&#xff1a;http://vdisk.weibo.com/u/1841149974

转:https://www.cnblogs.com/Nietzsche/p/4256729.html



推荐阅读
  • Stanford机器学习第九讲. 聚类
    原文:http:blog.csdn.netabcjenniferarticledetails7914952本栏目(Machinelearning)包括单参数的线性回归、多参数的线性 ... [详细]
  • MySQL多表数据库操作方法及子查询详解
    本文详细介绍了MySQL数据库的多表操作方法,包括增删改和单表查询,同时还解释了子查询的概念和用法。文章通过示例和步骤说明了如何进行数据的插入、删除和更新操作,以及如何执行单表查询和使用聚合函数进行统计。对于需要对MySQL数据库进行操作的读者来说,本文是一个非常实用的参考资料。 ... [详细]
  • 本文介绍了南邮ctf-web的writeup,包括签到题和md5 collision。在CTF比赛和渗透测试中,可以通过查看源代码、代码注释、页面隐藏元素、超链接和HTTP响应头部来寻找flag或提示信息。利用PHP弱类型,可以发现md5('QNKCDZO')='0e830400451993494058024219903391'和md5('240610708')='0e462097431906509019562988736854'。 ... [详细]
  • 1.活体相关文献综述调研参考:https:blog.csdn.netCVAIDLarticledetails845673192.基于LBP纹理特征的检测1)基于LBP_256特征提 ... [详细]
  • 深度学习与神经网络——邱锡鹏
    深度学习与神经网络——邱锡鹏-一、绪论人工智能的一个子领域神经网络:一种以(人工))神经元为基本单元的模型深度学习:一类机器学习问题,主要解决贡献度分配问题知识结构:路线图:顶 ... [详细]
  • matlab开发笔记: 使用svmlib工具包进行机器学习
    虽然网络上已经有了很多的类似的东西了吧。但是呢,我自己还是要写一写的。 安装:对于libsvm工具包,我 ... [详细]
  • 知识点1.Relu(RectifiedLinerUints整流线性单元)激活函数:max(0,z)神经网络中常用ReLU激活函数,与机器学习课程里面提到的sigmoid激活函数 ... [详细]
  • EPICS Archiver Appliance存储waveform记录的尝试及资源需求分析
    本文介绍了EPICS Archiver Appliance存储waveform记录的尝试过程,并分析了其所需的资源容量。通过解决错误提示和调整内存大小,成功存储了波形数据。然后,讨论了储存环逐束团信号的意义,以及通过记录多圈的束团信号进行参数分析的可能性。波形数据的存储需求巨大,每天需要近250G,一年需要90T。然而,储存环逐束团信号具有重要意义,可以揭示出每个束团的纵向振荡频率和模式。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • Windows下配置PHP5.6的方法及注意事项
    本文介绍了在Windows系统下配置PHP5.6的步骤及注意事项,包括下载PHP5.6、解压并配置IIS、添加模块映射、测试等。同时提供了一些常见问题的解决方法,如下载缺失的msvcr110.dll文件等。通过本文的指导,读者可以轻松地在Windows系统下配置PHP5.6,并解决一些常见的配置问题。 ... [详细]
  • 本文介绍了在Linux下安装Perl的步骤,并提供了一个简单的Perl程序示例。同时,还展示了运行该程序的结果。 ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • 本文介绍了Linux系统中正则表达式的基础知识,包括正则表达式的简介、字符分类、普通字符和元字符的区别,以及在学习过程中需要注意的事项。同时提醒读者要注意正则表达式与通配符的区别,并给出了使用正则表达式时的一些建议。本文适合初学者了解Linux系统中的正则表达式,并提供了学习的参考资料。 ... [详细]
  • 开源真香 离线识别率高 Python 人脸识别系统
    本文主要介绍关于python,人工智能,计算机视觉的知识点,对【开源真香离线识别率高Python人脸识别系统】和【】有兴趣的朋友可以看下由【000X000】投稿的技术文章,希望该技术和经验能帮到 ... [详细]
author-avatar
神秘的穿越火线99_628
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有