Adaboost 《统计学习方法》。
Adaboost 下面链接写的详细:
https://blog.csdn.net/guyuealian/article/details/70995333#commentBox
https://blog.csdn.net/qq_24519677/article/details/81910112
随机森林《西瓜书》。
集成学习、个体学习器、弱分类器、强分类器等等的两本书都讲。
1. 集成学习和个体学习器概念
- 集成学习(ensemble learning)先产生一组个体学习器,再用某种策略将它们结合起来.
- 如果集成中只包含同种类型的个体学习器则叫同质集成,其中的个体学习器称为基学习器,相应的学习算法称为基学习算法.
- 如果包含不同类型的个体学习器则叫异质集成,其中的学习器常称为组件学习器.
要获得好的集成,个体学习器应该“好而不同”,要有一定的“准确性”,即学习器不能太坏,并且要有多样性,之间具有差异。互为补充,才可提升效果。(《西瓜书》书上有一个好而不同的图片例子,深入浅出。)
- 集成学习研究核心:如何产生并结合个体学习器。(也就是如何好而不同)
根据个体学习器的生成方式,集成学习大致分为两类:
2. boosting bagging
2.1 - Boosting(提升算法)
- Boosting是一族可将弱学习器提升为强学习器的算法。
(《西瓜书》中将弱学习器定义为:泛化性能略优于随机猜测的学习器,例如在2分类问题上精度略高于50%的分类器。)
- 工作机制:先从初始训练集中训练出一个基学习器,再根据基学习器的表现对训练样本分布进行调整,使得先前基学习器做错的训练样本数据在后续受到更多的关注,然后基于调整后的训练样本来训练下一个基学习器;如此重复进行,直到基学习器数目达到指定的值 T ,最终将这 T 个基学习器进行加权结合。
Boosting算法要求基学习器能对特定的数据分布进行学习,这可通过“重赋权法”(re-weighting)实施,即在训练过程的每一轮中,根据样本分布为每个训练样本重新赋予一个权重。
对无法接受带权样本的基学习算法,则可通过“重采样法”(re-sampling)来处理,即在每一轮学习中,根据样本分布对训练数据集进行重采样,再用重采样而得的样本集对基学习器进行训练。
2.2 - bagging
现实任务中,个体学习器无法做到完全独立,但可设法使得其具有较大差异。
比如对训练集采样,生成若干个子集,每个子集训练一个基学习器。同时为了提高每个的性能,使用相互有交叉的采样子集。
Bagging(Bootstrap AGGregatING,1996)是并行式集成学习最著名的代表。
给定m个样本的数据集,我们先随机选出一个样本放入采样集中,再把该样本放回初始数据集,使得下次采样时该样本仍有可能被选中,这样经过m次随机采样操作,得到一个含m个样本的采样集。
如上可采样出T个含m个训练样本的采样集。基于每个采样集训练出一个基学习器,再将基学习器组合。这就是Bagging的基本流程。
预测时,分类任务使用简单投票法,回归任务使用简单平均法。
训练一个Bagging集成与直接使用基学习器训练一个学习器的复杂度同阶。这是一个很高效的可并行的集成学习算法。
由于每个基学习器仅使用初始集中约63.2%的数据,剩余数据可作为验证集来对泛化性能进行包外估计(out-of-bag estimate)。例如当基学习器是决策树时,可使用包外样本辅助剪枝。
从偏差-方差角度看,Bagging主要关注降低方差,因此它在不剪枝决策树、神经网络等易受样本扰动的学习器上效用更加明显。
3. 结合策略(平均法,投票法,学习法)
(1)平均法,数值型输出
-简单平均法:直接计算均值
-加权平均法:各项系数和为1,各项>=0
注:Breiman研究发现,必须使用非负权重才能确保集成学习性能优于单一最佳个体,因此集成中一般对个体权重做非负约束。
通常,在个体学习器性能相差较大时宜采用加权平均法,性能相近时宜采用简单平均法。
(2)投票法,分类任务
-绝对多数投票法:某标记得票过半数即预测为该类
-相对多数投票法:得票最多的标记即预测为该类
-加权投票法
类概率,相当于后验概率的一个估计,使用类概率的投票称为软投票。
类标记,硬投票。
(3)学习法
当训练数据很多时,一种更为强大的结合策略是使用学习法,通过另一个学习器来进行结合。
4. 随机森林思想
随机森林是一种集成算法(Ensemble Learning),它属于Bagging类型,通过组合多个弱分类器,最终结果通过投票或取均值,使得整体模型的结果具有较高的精确度和泛化性能。其可以取得不错成绩,主要归功于“随机”和“森林”,一个使它具有抗过拟合能力,一个使它更加精准。
RF在以决策树为基学习器构建Bagging集成的基础上,进一步在决策树训练过程中引入随机属性选择。
RF简单,易实现,计算开销小。与Bagging相比,RF中基学习器的多样性不仅来自样本扰动还来自属性扰动。而且训练效率常优于Bagging,因其只需考察一个属性子集。其收敛性与Bagging相似,起始性能往往相对较差,因为属性扰动的缘故,个体学习器性能往往有所降低,随着学习器增多,RF通常会收敛到更低的泛化误差。
5. 随机森林的推广
之前说过,集成学习的核心是:个体学习器要好而不同。
多样性增强:
在集成学习中需要有效的生成多样性大的个体学习器,与构造单一学习器对比而言,一般是通过在学习过程中引入随机性,常见的做法是对数据样本,输入属性,输出表示,算法参数进行扰动.
1)数据样本扰动
- 给定初始数据集,可从中产生生不同的数据子集,再利用不同的数据子集训练出不同的个体学习器.
- 数据样本扰动是基于采样法,例如Bagging采用自助法采样,对很多的常见基学习器,例如决策树,神经网络等,训练样本稍加变动就会导致学习器有显著变化,这些学习器称为‘不稳定基学习器’;
- 但是也有稳定学习器,对于样本扰动,这样的学习器往往不会出现太显著的变化,例如线性学习器,除非特别离群的点,一般的话对拟合直线影响不大;支持向量机,与支持向量关系比较大,其他地方的点对学习器影响不大;朴素贝叶斯,在样本分布相对固定时,样本足够多时样本扰动不足以大幅度改变概率;K近邻学习器,主要与K个邻居有关,而与其他位置的点关系不大,这类学习器称为稳定学习器. 对于这类学习器集成,往往需要属性扰动等机制.但是值得一提的是,数据样本扰动会改变样本初始的分布,会人为的引入偏差,也会影响基学习器的性能.
2)输入属性扰动
- 训练集的输入向量X通常不是一维的,这里我们假设输入数据维度是K维,从而选择不同的子属性集提供了观察数据的不同视角,显然从不同属性子空间训练出来的学习器会有所不同,著名的随机子空算法就依赖于属性扰动,**该算法从初始属性集中抽出若干个子集,再基于每个属性子集训练一个基学习器.**在包含大量属性的情况下,在属性子空间训练个体学习器不仅能产生多样性大的个体,还会因为属性维数减少提高训练效率,但当数据维数较小或数据的属性都有较大重要性时,不宜使用属性扰动.
3)输出表示扰动
- 此类做法的基本思想是对输出表示进行操纵以增强多样性,可对训练样本的类别标记稍作变动,但要注意尺度,如果变动较大,则会人为引入较大偏差,反而得不偿失.
- 例如二分类到多分类问题,MvM中使用的ECOC法,就是通过改变输出表示,最后采用投票法决定样本类别.
4)算法参数扰动
- 这个和我们常说的调参比较相似,一个基学习器算法都对应着或多或少的超参数,通过对算法参数的调整,往往能够得到不同性能的学习器,例如设置神经网络的隐层神经元数,决策树的深度,支持向量机的带宽width等等.
随机森林:
Bagging实际上就是通过样本扰动增加基学习器多样性,最终使用投票法得到最终结果,随机森林是Bagging的一个变体,RF在以决策树为基学习器构建Bagging集成的基础上,进一步在决策树的训练过程中引入了随机属性选择,相当于在样本属性扰动的基础上,在决策树特征选择时加入了属性扰动,又因为决策树是不稳定学习器,所以随机森林中基学习器的多样性大大增强,从而带来了更好的泛化性能.
具体来说就是,传统决策树在选择属性划分时是在当前属性节点(假设有d个属性)进行最优划分属性选择,而随机森林中,则是先生成一个包含k个属性的属性子集(k≤d),然后再从k个属性中选择一个最优划分属性,这里参数k控制了随机性的引入程度,若令K=d,则生成过程与原始决策树一致,一般情况下,推荐使用k = lnd.
RF优点
- 随机森林原理简单,容易实现,计算开同基学习器相当,但是往往展现出强大的性能,可以看出,在样本扰动的基础上,再加入样本扰动,最终集成的泛化性能可能进一步增加.
- 单个决策树模型很容易受到噪音数据的影响,而混合模型就不容易会。
- 随机森林能处理很高维度的数据(也就是很多特征的数据),并且不用做特征选择。
- 训练速度快,容易做成并行化方法(训练时,树与树之间是相互独立的)。
- 在训练完后,它能够给出哪些feature比较重要
- 在创建随机森林的时候,对generlization error使用的是无偏估计,模型泛化能力强
- 对于不平衡的数据集来说,它可以平衡误差
RF缺点
- 随机森林已经被证明在某些噪音较大的分类或回归问题上会过拟
- 对于有不同取值的属性的数据,取值划分较多的属性会对随机森林产生更大的影响,所以随机森林在这种数据上产出的属性权值是不可信的。
6. sklearn参数2
1)函数形式与参数
RandomForestClassifier(n_estimators=10, criterion=’gini’, max_depth=None, min_samples_split=2, min_samples_leaf=1, min_weight_fraction_leaf=0.0, max_features=’auto’, max_leaf_nodes=None, min_impurity_decrease=0.0, min_impurity_split=None, bootstrap=True, oob_score=False, n_jobs=1, random_state=None, verbose=0, warm_start=False, class_weight=None)
这里大部分参数与决策树参数的含义相同,例如特征划分方式,最大深度,最小子叶数等等,这里主要说一下与决策树不同的参数:
n_estimators:决策树的个数,相当于你的森林需要多少棵树,10是默认的,树越多越好,但要考虑系统开销与过拟合的问题。
boostrap:是否有放回采样,不放回采样的话数据不会重复。
oob_score:这里对应前面讲到的自助采样的一个优点-包外估计(out-of-bag esitimate),由于基学习器使用了约63.2%的样本,所以剩下约36.8%的样本可以用作验证集对泛化性能进行评价。
n_jobs:并行数,我们讲到bagging是并行是生成的,所以bagging时可以设置参数大于1,决定并行生成多少学习器,而Adaboost则需要默认1,因为它是串行生成的。