集成学习(ensenble learning)
定义:
对于训练集数据,我们通过训练若干个个体学习器,通过一定的结合策略,就可以最终形成一个强学习器,以此达到博采众长的目的。
集成学习方法
根据个体学习器的生成方式,目前集成学习方法可以大致分为两类(学习方法其实也是框架)
-
Boosting:个体学习器存在强依赖关系,必须串行生成序列化方法。
-
串行:下一个分类器只在前一个分类器预测不够准的实例上进行训练或检验。
-
Bagging个体学习器之间不存在强依赖关系,可同时生成的并行化方法。
-
并行:所有弱分类器都给出各自的预测结果,通过组合把这些预测结果转化为最终结果。
-
**注意:**通过Boosting或Bagging框架生成的个体学习器可以是强学习器,也可以是弱学习器,具体如何分类看选择的框架和具体算法的实现
集成学习有两个主要的问题要解决
- Q1:如何得到若干个个体学习器
- Q2:如何选择一种结合策略,将这些个体学习器集合成一个强学习
- PS:学习法指的是在结合策略的基础上在套一层分类器,以此得到最终的强学习器。
- 在概率近似正确(PAC)学习的框架中,如果正确率很高,称这个概念是强可学习;如果正确率不高,仅比随机猜测好,那么称这个概念是弱可学习
后来证明弱可学习和强可学习是等价的
解决的问题
该图上就是通过划分得到三个弱学习器,然后将这三个进行组合,达到最终分类的目的
- 个体学习器之间是怎样的关系?
- 关系:第一种是所有的个体学习器都是一个种类,或者说是同质的
- 例如:随机森林RF中的个体学习器都是同质的,即它们属于同一类型的学习算法(通常为决策树)
- 关系:第二种是所有的个体学习器不全是一个种类的,或者说是异质的。
- 例如:
- 组合时,如何选择学习器?
- 选择个体时秉承一个原则:好而不同
-好:个体学习器个体的准确性高;不同:个体学习器之间的差异大,具有多样性 - 两种选择:第一种就是所有个体学习器都是同一种类的— 同质
- 例如:都是决策树个体学习器或都是神经网络个体学习器
- 两种选择:第二种是所有的个体学习器不全是一个种类—异质
- 例如:我们有一个分类问题,对训练集采用支持向量机的个体学习器,逻辑回归个体学习器和朴素贝叶斯个体学习器来学习,再通过某种结合策略来确定最终的分类强学习器。
- 总结:我们一般使用同质个体学习器,同质个体学习器使用最多的模型是CART决策树和神经网络
- 数学解释(以分类为例)
假设有 T 个分类器,每个分类器的错误率为
ϵ,且错误相互独立,集成模型的错误率:
当超过半数分类器错误时集成失败,概率为:
若模型完全相关(无多样性):集成错误仍为ϵ,无提升。
- 个体学习器可以选择同质和异质,但具体各个是弱学习器还是强学习器要看框架如何选择,后面详细说明
- 怎样组合弱分类器?
- 以下方法是弱学习器组合策略的具体技术实现
- 平均法:对于数值类的回归预测问题
- 思想:对于若干个若学习器的输出进行平均得到最终的预测输出
- 投票法:对于分类问题的 预测
- 思想:多个基本分类器都进行分类预测,然后根据分类结果用某种投票的原则进行投票表决,按照投票原则使用不同投票法
- 一票否决、一致表决、少数服从多数
- 阙值表决:首先统计出把实例x划分为Ci和不划分为Ci的分类器数目分别是多少,然后当这两者比例超过某个阈值的时候把x划分到Ci
即:设定一个临界值(比如概率>70%才算赢,否则算输) - 学习法
- 代表方法:Stacking
- 思想:不是对弱学习器做简单的逻辑处理,而是再加上一层学习器,分成2层
- 第一层是用不同的算法形成T个弱分类器,同时产生一个与原数据集大小相同的新数据集,利用这个新数据集和一个新算法构成第二层的分类器
- 同质个体学习器之间是否存在强依赖关系?
- 个体学习器之间存在强依赖关系,一系列个体学习器基本都需要串行生成;代表算法:boosting系列算法
- 个体学习器之间不存在强依赖关系,一系列个体学习器可以并行生成;代表算法:bagging和随机森林RF系列算法
弱学习器和个体学习器的区别
- **弱学习器:**指性能略优于随机猜测的模型(如二分类中准确率51%的模型)
- **个体学习器:**基模型,可以是弱学习器也可以是强学习器
- 纠正一下:弱学习器本身就是独立的个体学习器,内部不再含有其他学习器
记忆:个体学习器泛指全部学生,包括小学生(弱),中学生(强)
框架下生成学习器的差异
SVM(支持向量机)是一种经典的监督学习算法,主要用于分类和回归任务【详细知识点见向量机支持向量机章节】
Boosting与Adaboost
Boosting框架
定义
- boosting是集成学习的一种学习方法,也是一个宏观框架,简单来说boosting、bagging、stacking框架负责生成和协调弱学习器(串行vs并行、加权vs平等),而上面的具体技术(平均法、投票法、阈值法、学习法)则是用来对生成的弱学习器进行组合输出。
- 通过串行训练多个弱模型,每一个模型都重点学习前一个模型中的错误(重赋权法),它的目的是降低偏差(bais),通过增强弱模型来形成一个强模型
- Boosting是一种思想,Adaboost是Boosting的一种具体结合策略,具体实现。
Boosting思想的过程:
1.文字概述
- 我们在拿到数据集后,初始化所有样本的权重为1/N(N为样本总数)
- 生成第一个弱学习器,对其中分类错误的样本权重进行增加,对分类正确的样本权重进行减少,整体归一化权重(保证所有权重总和=1)
- 接着生成第二个弱学习器,根据已经修改的权重样本进行处理,对本次产生的错误样本再进行加权,正确样本进行减权(重赋权法)
- 重复这个过程直至T轮之后得到T个弱学习器,然后通过加权组合所有弱学习器得到最终强学习器
2.公式概述
代表算法
AdaBoost
- Adaboost是根据boosting的思想对其进行具体实现的一种算法
- Adboost :决策树+adboost=提升树
- 优点:
1简单易处理,适合小规模数据集
2对噪声数据敏感,容易过拟合 - 缺点:
1只能处理二分类问题(需要扩展才能处理多分类)
2对异常值敏感,因为权重会无限放大错误样本的影响【如果有异常值,adaboost会 一直揪着不放,导致后面数据带偏,容易过拟合】
3使用浅层决策树(简单模型)作为弱学习器,因为它没有很强的数学工具来处理复杂模型
XGBoost(eXtreme Gradient Boosting)极限梯度提升
- XGBoost实际上为不同的训练样本分配不同的权重,因此它不需要生成大量随机选择的样本集,这使得它比采样替换过程更加高效
- XGBoost通过梯度下降和二阶导数优化来是实现目标,而非直接调整样本权重(隐式)
-口语解释:考试结束后,adaboost是对错误的题目进行练习;XGBoost不仅知道题哪错了,还知道题目错误的程度(梯度提升)和错误的变化速度(二阶导) - XGBoost用于分类
可以按照如上方式导入XG Boost库,并将模型初始化为 XGBoost分类器,拟合模型,最后,这允许你使用这个提升决策树算法进行预测
XGBoost用于回归
先导入XGBoost库,再将模型初始化为XGBoost回归器,拟合模型,这时就可以使用这个提升决策树来进行预测
GBDT(梯度提升决策树)
GBDT(Gradient BoostDecision Tree) 梯度提升决策树**
- 其他叫法:Gradient Tree Boosting=GBDT
-
- 决策树+Gradient Boosting(梯度提升)=GBDT(梯度提升决策树)
- XGBoost是GBDT的加强版本,两者都采用CART(分类与回归树)作为弱学习器
- XGBoost引入了二阶导数、正则化、分裂策略、并行化。XGBoost ≈ GBDT + 二阶导数 + 正则化 + 工程优化。,速度更快,精度更高,更抗过拟合
其他算法
- GBRT(Gradient BoostRegression Tree)梯度提升回归树
- MART(MultipleAdditive Regression Tree)多决策回归树
- Tree Net 决笛树网络
AdaBoost和XGBoost的对比
数学基础:
AdaBoost权重更新
第t轮样本权重更新规则:
XGBoost权重更新:
目标函数(第t轮):
梯度大的样本(难样本)对损失函数影响更大,相当于隐式赋予更高权重。
Bagging与随机森林
Bagging框架
Bagging工作流程
- 数据采样:从训练集中有放回采样(bootstrap)生成多个子数据集(每个子集的大小与原始训练集相同)
- 独立训练:对每个子集并行训练一个个体学习器3
- 结果整合:对个体学习器的预测结果进行投票或者平均
- 特点:每个个体学习器相互独立,没有关系;减少单个模型的高方差,避免过拟合
- Bagging不仅对样本随机取样,通常还对特征随机取样(RF每次分裂仅用部分特征),增强多样性
- 降低平均的波动—降低方差
- 代表算法:RF随机森林
随机森林RF?
随机森林定义
- 随机森林算法是bagging的一个扩展体,bagging+决策树=随机森林
- 决策树:每次选择最优属性作为当前节点的划分属性
- 随机森林:先从当前结点的属性集合中随机选择一个包含k个属性的子集;再从子集中选择最优属性
- 优点:
- RF简单易实现;训练效率优于bagging,计算开销较小
- 因为相比决策树在所有属性中择优,随机森林只在k个属性中择优
随机森林工作流程
1.Booststrap采样:从原始数据集中随机有放回取样,生成多个子集(大小与原始数据集相同)
2. 对每个子集训练为一棵决策树,部分样本可能未选中(袋外数据)
3. 对于每棵树,在每个结点分裂时随机选取一部分特征,并从中选择最优分裂点**(如基尼系数最小)**;重复以上分裂,直至满足以下条件终止分裂
- 节点样本数少于阈值
- 所有样本属于同一类别或节点纯度达到阈值
- 树达到最大深度
4.分类任务:对所有树的预测结果进行投票;回归任务:对所有树的预测结果取平均值
Boosting和Bagging的区别差异总结
像神经网络这种及其消耗时间的算法,使用bagging可通过并行节约大量时间
Stacking(堆叠泛化)
实现流程
- Stacking有两层,一层是不同的基学习器(classifiers/regressors),第二个是用于组合基学习器的元学习器(meta_classifier/meta_regressor)
- 第一层:
- 基学习器的训练,使用训练数据训练多个基学习器(如:决策树、SVM、神经网络等),每个基学习器独立工作,生成预测结果
- 生成元数据集,将基学习器对训练集的预测结果作为新的特征,生成一个新数据集训练元学习器,在这个新数据集中,基学习器的输出被当作样例输入持征,而初始样本的标记仍被当作样例标记.
第二层: - 训练元学习器,使用新数据集训练一个元学习器,它学会如何组合基学习器的预测结果
- 最终预测:在测试阶段,基学习器对测试数据进行预测,并将预测结果输入元学习器中,输出最终的预测结果
特点
Stacking通过基学习器生成预测→元学习器学习组合策略,实现模型融合的终极增强版,但需权衡计算开销。
总结梳理
1. 是否在生成基学习器后“选择”组合策略?
不可以,Stacking的组合策略是通过元学习器从数据中学习得到的,而非人为选择。
例如:
基学习器1(决策树)对某类样本预测效果更好,元学习器会自动赋予其输出更高权重。
基学习器2(SVM)对另一类样本更有效,元学习器会调整其贡献比例。
2. 组合策略—学习法
当训练数据很多时,一种更为强大的结合策略是使用“学习法”,即通过另一个学习器来进行结合.Stacking是学习法的典型代表.
决策树详细内容见决策树章节
模型评价——方差&偏差
偏差
偏差:预测值的期望与真实值之间的差距,偏差越大,越偏离真实数据
方差
方差:描述预测值的变化范围,离散程度,也就是离其期望值的距离;方差越大,数据越分散
- 选个体分类器的时候选择 方差大的
- Boosting主要关注降低偏差
- boosting是把许多弱的分类器组合成一个强的分类器。
- 串行进行,通过重复的重赋权值来使系统的误差降低;偏差指的是测量值的期望与真实值之间的差距,为了使结果更加准确,那就是要降低偏差
- Bagging主要是降低方差:通过平均抑制波动
补充知识点:
过拟合
- 过拟合是指机器学习模型在训练数据上表现的极好(如准确率接近100%),但是新数据(测试集或者在实际应用)上表现的显著下降的现象
- 本质原因:模型过度学习了训练数据中的噪声或无关细节,而非真实的通用规律,导致泛化能力差
- 为什么会出现过拟合?
- 模型复杂度过高:神经网络层数过多、决策树深度过大、模型“死记硬背”训练数据
- 训练数据不足或噪声多
- 特征过多或冗余
整体梳理
- 集成学习概念:
- 先产生一组个体学习器
- 个体学习器之间是相同类型的就是同质,同质之间存在强依赖关系则是串行,boosting算法;不存在强依赖关系则是并行,bagging算法
- 个体学习器由不同学习算法生成就是异质
- 再用某种策略把它们结合起来
- 优点:通过多个学习器进行结合,常可获得比单一学习器显著优越的泛化性能
- 缺点:学习器数量多时时间复杂度高
- 好的集成的要求:好而不同
- 个体学习器要有一定的准确性
- 个体学习器之间 要有差异性,具有多样性
- 集成学习分类:
- 串行化分类:个体学习器间存在强依赖关系,必须串行生成序列方法
- 并行化方法:个体学习器之间不存在强依赖的关系,可同时生成的并行化方法
- 什么是boosting算法?
- 先从初始训练集中训练出一个基学器
- 再根据基学习器的表现调整训练样本的数据分布(调整使得先前基学习器做错的样本得到更多的关注-加权错误的)
- 使用调整后的训练样本来训练下一个学习器
- 重复上述步骤直到基学习器达到指定数目T
- 对T个基学习器进行加权结合
- 什么是Bagging算法?
- 采样出T个含m个训练样本的训练集(用自助采样法boostrap sampling有放回)
- 再基于每个采样集训练出出一个基学习器
- 最后将这些基学习器进行结合(结合方法:分类任务-投票法;回归任务:平均法)
- 什么是随机森林RF?
- 随机森林算法是bagging的一个扩展体,bagging+决策树=随机森林
- 决策树:每次选择最优属性作为当前节点的划分属性
- RF:先从当前结点的属性集合中随机选择一个包含k个属性的子集;再从子集中选择最优属性
- 优点:RF简单易实现;训练效率优于bagging,计算开销较小;因为相比决策树在所有属性中择优,随机森林只在k个属性中择优
- Bagging:通过生成多个数据集的随机子样本来训练多个独立的弱学习器(通常是决策树),然后将它们的预测结果进行平均(回归任务)或投票(分类任务)
降低平均的波动—降低方差
2.工作流程:
- 数据采样:从训练集中有放回采样生成多个子数据集(每个子集的大小与原始训练集相同)
- 独立训练:在每个子集上训练一个弱模型(如决策树)
- 结果整合:对弱模型的预测结果进行投票或者平均
- 特点:每个弱模型相互独立,没有关系;减少单个模型的高方差,避免过拟合
- 代表算法:RF随机森林,随机森林是bagging的一个扩展体,决策树+bagging=随机森林
boosting
- 核心思想:通过串行训练多个弱模型,每一个模型都重点学习前一个模型中的错误(重赋权法),它的目的是降低偏差,通过增强弱模型来形成一个强模型
- 工作流程:训练第一个弱模型,对样本进行预测
- 调整权重:根据第一个模型的错误,增加错误样本的权重,使后续模型更加关注这些难以预测的样本
- 串行迭代:继续训练后续的弱模型,每次都对前一轮的错误进行修正
- 结果整合:将所有弱模型的预期结果按权重加权,最终形成输出
- 特点:弱模型之间是串行依赖的,每一个模型都依赖于前一个模型的结果
- 目标:降低偏差(bais),提高预测能力
- 代表算法:adaboost
bagging和boosting的区别
- bagging:并行独立训练——减少方差,避免过拟合——有放回采样生成多个子集——每个模型的权重相同——决策树——计算复杂度低
- boosting:串行依赖训练——减少偏差,提高模型精度——使用全数据集,但调整样本权重——根据性能动态调整每个弱模型的权重——adaboost——线性模型——计算复杂度较高,但精度较高