Ensemble learning 集成学习(一)
一.Ensemble learning(集成学习)
集成学习通过构建并结合多个学习器来完成学习任务,有时也被称为多分类器系统等。要获得好的集成,个体学习器应"好而不同",意味着个体学习器要有一定的准确性,即学习器不能太坏。并且还要有多样性,即学习器间具有差异。但是,一般准确性很高之后,要增加多样性就需要牺牲准确性。
根据个体学习器的生成方式,目前的集成学习方法大致可分为两类,即个体学习器间存在强依赖关系,必须串行生成的序列化方法;以及个体学习器间不存在强依赖关系,可同时生成的并行化方法。前者的代表是Boosting,后者的代表是Bagging和Random Forest(随机森林)。
二.关于Bootstrap(自助法)
Bootstrapping:comes from“pull up by your own bootstraps”,它直接以Bootstrap Sampling(自助采样法)为基础[Efron and Tibshirani,1993],称为自助法。它是一种有放回的抽样方法,它是非参数统计中一种重要的估计统计量方差进而进行区间估计的统计方法。给定包含m个样本的数据集D,我们对它进行采样产生数据集D’:
(1) 每次随机从D中挑选一个样本,将其拷贝放入D’中;
(2) 再将该样本放回初始数据集D中,使得该样本在下次采样时仍有可能被采到;
(3) 以上过程重复执行m次(一般大于1000),得到了包含m个样本的数据集D’。
显然,D中有一部分样本会在D’中多次出现,而另一部分样本不出现。可以做一个简单的估计,样本在m次采样中始终不被采到的概率是,取极限得到:
即通过自主采样,初始数据集D中大约有36.8%的样本未出现在采样数据集D’中。
优缺点:
Bootstrap在数据集较小,难以有效划分训练/测试集时很有用;此外,自助法能从初始数据集产生多个不同的数据集,这对集成学习等方法有很大好处。而且,通过方差的估计可以构造置信区间等,其运用范围得到进一步延伸。但是,自助法产生的数据集改变了初始数据集的分布,会引入估计偏差。
三.关于Jackknife(刀切法)
Jackknife:每次从样本集中删除一个或者几个样本,剩余的样本成为“刀切”样本。由一系列这样的刀切样本计算统计量的估计值。从这一批估计值,不但可以得到算法的稳定性衡量(方差),还可以减少算法的偏差。这个方法暗示,刀切法的样本集需要事先给定,即它的重采样过程是在给定样本集上的进行的。
四.Bootstrap和Jackknife的关系:
(1)自助法通过经验分布函数构建了自助法世界,将不适定的估计概率分布的问题转化为从给定样本集中重采样。
(2)自助法可以解决不光滑参数的问题。遇到不光滑(Smooth)参数估计时,刀切法会失效,而自助法可以有效地给出中位数的估计。
(3)将自助法估计用泰勒公式展开,可以得到刀切法是自助法方法的一阶近似。
(4)对于线性统计量的估计方差这个问题,刀切法或者自助法会得到同样的结果。但在非线性统计量的方差估计问题上,刀切法严重依赖于统计量线性的拟合程度,所以远不如自助法有效。
五.Bootstrapping思想的应用
No1.Boosting
Boosting是一种可以将弱学习器提升为强学习器的算法,其工作机制如下:
(1)从初始训练集训练出一个基学习器;
(2)根据基学习器的表现对训练样本分布进行调整,使得先前基学习器分错的训练样本在后续得到更多的关注;
(3)再基于调整后的样本分布来训练下一个基学习器;
(4)重复以上过程,直至学习器数目达到事先指定的值M;
(5)最终将这M个基学习器进行加权结合。
如下图所示:
上图(图片来自prml_p660)就是一个Boosting的过程,绿色的线表示目前取得的模型(模型是由前M次得到的模型合并得到的),虚线表示当前这次模型。每次分类的时候,会更关注分错的数据。上图中,红色和蓝色的点就是数据,点越大表示权重越高。看看右下角的图片,当m=150的时候,获取的模型已经几乎能够将红色和蓝色的点区分开了。
Boosting可以用如下公式表示:
训练集中一共有n个点,我们可以为里面的每一个点赋上一个权重Wi(0 <= i < n),表示这个点的重要程度,通过依次训练模型的过程,我们对点的权重进行修正,如果分类正确了,权重降低,如果分类错了,则权重提高,初始的时候,权重都是一样的。上图中绿色的线就是表示依次训练模型,可以想象得到,程序越往后执行,训练出的模型就越会在意那些容易分错(权重高)的点。当全部的程序执行完后,会得到M个模型,分别对应上图的y1(x)…yM(x),通过加权的方式组合成一个最终的模型YM(x)。
注意:
Boosting算法要求基学习器能对特定的数据分布进行学习,可通过Re-weighting(重赋权法)实施,即在训练过程的每一轮中,根据样本分布为每一个训练样本重新赋予一个权重。对无法接受带权样本的基学习算法,则可以通过Re-sampling(重采样法)来处理,即在每一轮的学习中,根据样本分布对训练集重新进行采样,在用重采样而来的样本集对基学习器进行训练。
一般而言,这两种做法没有显著的优劣差别。需要注意的是,Boosting算法在训练的每一轮都要检查当前生成的基学习器是否满足基本条件(是否比随机猜测的要好)。一旦不满足条件,则当前基学习器被抛弃,并且学习过程停止。在这种情况下,初始设置的学习轮数T也许远没有达到,因此可能导致最终集成中只包含很少的基学习器而性能不佳。若采用Re-sampling(重采样法),则可获得重启动的机会以避免训练过程过早停止。即在抛弃不满足条件的当前基学习器后,可根据当前分布重新对训练样本进行采样,再基于新的采样结果重新训练出基学习器,从而使得学习过程得以持续进行直至预设的T轮完成。
Boosting族算法中最著名的代表是AdaBoost[Freund and Schapire,1997]
No2.Bagging
bagging:bootstrap aggregating的缩写,是并行式集成学习方法最著名的代表。Bagging直接基于Bootstrap Sampling,可知,初始训练集中约有63.2%的样本出现在采样集中。据此,我们可以采样出T个含m个训练样本的采样集,然后基于每个采样集训练出一个基学习器,再将这些基学习器进行结合。
在对预测输出进行结合时,Bagging通常对分类任务使用简单投票法,对回归任务使用简单平均法。若分类任务预测时两个类收到同样的票数,则最简单的做法是随机选择一个,也可以进一步考察学习器投票的置信度来选择。
优点:
(1)假定基学习器的计算复杂度为O(m),则Bagging的复杂度大致为T(O(m)+O(s)),考虑到采样与投票/平均过程的复杂度O(s)很小,而T通常是一个不太大的常数。因此,训练一个Bagging集成与直接使用基学习器算法训练一个学习器的复杂度同阶,这说明Bagging是一个很高效的集成学习算法;
(2)与标准AdaBoost只适用于二分类任务不同,Bagging能不经修改地用于多分类,回归等任务;
(3)自助采样还给Bagging带来了另一个优点:初始训练集剩下约36.8%的样本可用作验证集来对泛化性能进行out-of-bag estimate(包外估计)。事实上,包外样本还有许多其他用途:当基学习器是决策树时,可用于辅助剪枝,或用于估计决策树中各结点的后验概率以辅助对零样本结点的处理;当基学习器是神经网络时,可用于辅助early stop(早期停止)以减小过拟合的风险。
No3.Boosting和Bagging的区别:
(1)从偏差-方差分解的角度看,Boosting主要关注降低偏差,因此Boosting能基于泛化性能相当弱的学习器构建出很强的集成;而Bagging主要关注降低方差,因此它在不剪枝决策树、神经网络等易受样本扰动的学习器上效用更加明显;
(2)Bagging的训练集的选择是随机的,各轮训练集之间相互独立,而Boosting的各轮训练集的选择与前面各轮的学习结果有关,即Bagging采用均匀取样,而Boosting根据错误率来取样,因此Boosting的分类精度要优于Bagging;
(3)Bagging的各个预测函数没有权重,而Boosting是有权重的;
(4)Bagging的各个预测函数可以并行生成,而Boosting的各个预测函数只能顺序生成;
(5)对于像神经网络这样极为耗时的学习方法,Bagging可通过并行训练节省大量时间开销;
(6)bagging和boosting都可以有效地提高分类的准确性。在大多数数据集中,boosting的准确性比bagging高。但在有些数据集中,boosting会导致Overfit。
Ensemble learning 集成学习(一)相关推荐
- Ensemble learning(集成学习)
定义 集成学习是一种机器学习范式,其中多个学习器被训练来解决相同的问题. 这与试图从训练数据中学习一个假设的普通机器学习方法相反,集成方法尝试构造一组假设并将它们结合使用. 一个集合包含一些通常被称为 ...
- 【机器学习】Ensemble Learning 集成学习 + Python代码实战
文章目录 一.集成学习概述 二.Bagging模型 2.1 随机森林 2.1.1 随机森林介绍 2.2.1 随机森林优势 2.2 KNN 2.3 软投票 2.4 硬投票 2.5 Bagging模型实战 ...
- RDKit |基于集成学习(Ensemble learning)预测溶解度
Ensemble learning 集成学习 集成学习(Ensemble learning)是这样一个过程,按照某种算法生成多个模型,如分类器或者称为专家,再将这些模型按照某种方法组合在一起来解决某个 ...
- EL:集成学习(Ensemble Learning)的概念讲解、问题应用、算法分类、关键步骤、代码实现等相关配图详细攻略
EL:集成学习(Ensemble Learning)的概念讲解.算法分类.问题应用.关键步骤.代码实现等相关配图详细攻略 目录 集成学习Ensemble Learning 1.集成学习中弱分类器选择 ...
- 集成学习_GBDT_XGBoost
1.集成学习(Ensemble Learning) 集成学习就是将多个弱分类器组合成为一个强分类器.比起几千年才出一个的力能扛鼎的项羽来说,我们找十几个匹夫把鼎抬过去会更简单一些.这就是集成学习的思想 ...
- # 联邦学习-安全树模型 SecureBoost之集成学习
文章目录 1 联邦学习背景 2 联邦学习树模型方案 3 Ensemble Learning 3.1 集成学习 3.2 Bagging & Boosting 3.2.1 Bagging (boo ...
- 集成学习--基础概述
集成学习 1.集成学习概述 2.集成学习之基学习器 3.Bagging 4.Boosting 5.结合策略 5.1 均值法 5.2 投票法 5.3 学习法 参考资料 1.集成学习概述 简单来说,集成学 ...
- Ensemble_learning 集成学习算法 stacking 算法
原文:https://herbertmj.wikispaces.com/stacking%E7%AE%97%E6%B3%95 stacked 产生方法是一种截然不同的组合多个模型的方法,它讲的是组合学 ...
- Ensemble learning 概述
在机器学习和统计学习中, Ensemble Learning(集成学习)是一种将多种学习算法组合在一起以取得更好表现的一种方法.与 Statistical Ensemble(统计总体,通常是无限的)不 ...
最新文章
- 实用 | 从Apache Kafka到Apache Spark安全读取数据
- Delphi_04_Delphi_Object_Pascal_基本语法_02
- 在vs code中创建代码片段
- Why Apache Spark is a Crossover Hit for Data Scientists [FWD]
- 电影评论分类:二分类问题
- bootstrap table格式化字符串_你要的PHP字符串处理函数都在这了!
- AliOS Things图形界面开发指南
- 【configure】如何用automake、autoconf指令生成configure并创建自己的linux tar.gz安装包【初级篇:简单建立-测试】
- 计算机数学基础知识点归纳,《计算机数学基础》(一)――离散数学期末复习参考...
- php 中文key_API常用签名验证方法(PHP实现)
- HDOJ1203 I NEED A OFFER!
- python中常量池和堆_JVM详解之:运行时常量池
- 数据驱动安全:数据安全分析、可视化和仪表盘》一3.6 本章小结
- java 局域网广播_java UDP实现局域网广播 | 学步园
- 中级软件设计师笔记全套 看完你就过啦
- linux抓取vlan数据包,如何抓取 带VLAN tag的包
- 数据结构与算法(java):线性表(链表-双向链表)
- java转行失败_转行学JAVA,成功和失败的原因
- “壮士断腕”无人驾驶能够拯救苹果的内忧外困吗?
- Android8.0以上的Service、Notification和广播适配问题
热门文章
- linux no mail for root,Linux定时任务Crontab使用 提示no crontab for root
- MQTT mosquitto
- 【5】Midjourney Prompt
- 您的服务器虚拟内存太低,您的服务器虚拟内存太低
- pwn暑假训练(五) 哇哇好久没打了
- C语言for循环语句的使用方法
- VC6 Project - add to project - files 没反应
- 服务器直接可以做无盘系统吗,云服务器支持无盘系统吗
- linux pstree命令
- 【AbstractReading】Redundancy-Free Computation for Graph Neural Networks