1.1 集成学习概述
集成学习在机器学习算法中具有较高的准去率,不足之处就是模型的训练过程可能比较复杂,效率不是很高。目前接触较多的集成学习主要有2种:基于Boosting的和基于Bagging,前者的代表算法有Adaboost、GBDT、XGBOOST、后者的代表算法主要是随机森林。
1.2 集成学习的主要思想
集成学习的主要思想是利用一定的手段学习出多个分类器,而且这多个分类器要求是弱分类器,然后将多个分类器进行组合公共预测。核心思想就是如何训练处多个弱分类器以及如何将这些弱分类器进行组合。
1.3、集成学习中弱分类器选择
一般采用弱分类器的原因在于将误差进行均衡,因为一旦某个分类器太强了就会造成后面的结果受其影响太大,严重的会导致后面的分类器无法进行分类。常用的弱分类器可以采用误差率小于0.5的,比如说逻辑回归、SVM、神经网络。
1.4、多个分类器的生成
可以采用随机选取数据进行分类器的训练,也可以采用不断的调整错误分类的训练数据的权重生成新的分类器。
1.5、多个弱分类区如何组合
基本分类器之间的整合方式,一般有简单多数投票、权重投票,贝叶斯投票,基于D-S证据理论的整合,基于不同的特征子集的整合。
2.1 基本概念
Boosting方法是一种用来提高弱分类算法准确度的方法,这种方法通过构造一个预测函数系列,然后以一定的方式将他们组合成一个预测函数。他是一种框架算法,主要是通过对样本集的操作获得样本子集,然后用弱分类算法在样本子集上训练生成一系列的基分类器。他可以用来提高其他弱分类算法的识别率,也就是将其他的弱分类算法作为基分类算法放于Boosting 框架中,通过Boosting框架对训练样本集的操作,得到不同的训练样本子集,用该样本子集去训练生成基分类器;每得到一个样本集就用该基分类算法在该样本集上产生一个基分类器,这样在给定训练轮数 n 后,就可产生 n 个基分类器,然后Boosting框架算法将这 n个基分类器进行加权融合,产生一个最后的结果分类器,在这 n个基分类器中,每个单个的分类器的识别率不一定很高,但他们联合后的结果有很高的识别率,这样便提高了该弱分类算法的识别率。在产生单个的基分类器时可用相同的分类算法,也可用不同的分类算法,这些算法一般是不稳定的弱分类算法,如神经网络(BP) ,决策树(C4.5)等。
2.2、Adaboost
Adaboost是boosting中较为代表的算法,基本思想是通过训练数据的分布构造一个分类器,然后通过误差率求出这个若弱分类器的权重,通过更新训练数据的分布,迭代进行,直到达到迭代次数或者损失函数小于某一阈值。
Adaboost的算法流程:
假设训练数据集为T={(X1,Y1),(X2,Y2),(X3,Y3),(X4,Y4),(X5,Y5)} 其中Yi={-1,1}
1、初始化训练数据的分布
训练数据的权重分布为D={W11,W12,W13,W14,W15},其中W1i=1/N。即平均分配。
2、选择基本分类器
这里选择最简单的线性分类器y=aX+b ,分类器选定之后,最小化分类误差可以求得参数。
3、计算分类器的系数和更新数据权重
误差率也可以求出来为e1.同时可以求出这个分类器的系数。基本的Adaboost给出的系数计算公式为
然后更新训练数据的权重分布,
(图片来自李航的统计学习方法)
4、分类器的组合
当然这种组合方式基于分类器的系数的,而分类器的系数又是根据误差率求出来的,所以Adaboots最后影响的就是如何使用误差率,以及训练数据更新权重的的计算系数。
5、Adaboost的一些问题
Adaboost中涉及到一些可以进行调整的参数和计算公式的选择主要有以下几点:
**弱分类器如何选择
**如何更好的实验误差率计算分类器的系数
**如何更好的计算训练数据的权重的分布
**弱分类器如何进行组合
**迭代次数
**损失函数的阈值选取多少
bagging方法bootstrap aggregating的缩写,采用的是随机有放回的选择训练数据然后构造分类器,最后组合。这里以随机森林为例进行讲解。
随机森林算法概述
随机森林算法是上世纪八十年代Breiman等人提出来的,其基本思想就是构造很多棵决策树,形成一个森林,然后用这些决策树共同决策输出类别是什么。随机森林算法及在构建单一决策树的基础上的,同时是单一决策树算法的延伸和改进。在整个随机森林算法的过程中,有两个随机过程,第一个就是输入数据是随机的从整体的训练数据中选取一部分作为一棵决策树的构建,而且是有放回的选取;第二个就是每棵决策树的构建所需的特征是从整体的特征集随机的选取的,这两个随机过程使得随机森林很大程度上避免了过拟合现象的出现。
随机森林算法具体的过程:
1、从训练数据中选取n个数据作为训练数据输入,一般情况下n是远小于整体的训练数据N的,这样就会造成有一部分数据是无法被去到的,这部分数据称为袋外数据,可以使用袋外数据做误差估计。
2、选取了输入的训练数据的之后,需要构建决策树,具体方法是每一个分裂结点从整体的特征集M中选取m个特征构建,一般情况下m远小于M。
3、在构造每棵决策树的过程中,按照选取最小的基尼指数进行分裂节点的选取进行决策树的构建。决策树的其他结点都采取相同的分裂规则进行构建,直到该节点的所有训练样例都属于同一类或者达到树的最大深度。
4、 重复第2步和第3步多次,每一次输入数据对应一颗决策树,这样就得到了随机森林,可以用来对预测数据进行决策。
5、 输入的训练数据选择好了,多棵决策树也构建好了,对待预测数据进行预测,比如说输入一个待预测数据,然后多棵决策树同时进行决策,最后采用多数投票的方式进行类别的决策。
随机森林算法图示
随机森林算法的注意点:
1、 在构建决策树的过程中是不需要剪枝的。
2、 整个森林的树的数量和每棵树的特征需要人为进行设定。
3、 构建决策树的时候分裂节点的选择是依据最小基尼系数的。
随机森林有很多的优点:
a. 在数据集上表现良好,两个随机性的引入,使得随机森林不容易陷入过拟合。
b. 在当前的很多数据集上,相对其他算法有着很大的优势,两个随机性的引入,使得随机森林具有很好的抗噪声能力。
c. 它能够处理很高维度(feature很多)的数据,并且不用做特征选择,对数据集的适应能力强:既能处理离散型数据,也能处理连续型数据,数据集无需规范化。
d. 在创建随机森林的时候,对generlization error使用的是无偏估计。
e. 训练速度快,可以得到变量重要性排序。
f. 在训练过程中,能够检测到feature间的互相影响。
g 容易做成并行化方法。
h. 实现比较简单。
(也是面试常考)
主要思想:利用一定的手段学习出多个分类器,而且这多个分类器要求是弱分类器,然后将多个分类器进行组合公共预测。核心思想就是如何训练处多个弱分类器以及如何将这些弱分类器进行组合,个体分类器应该“好而不同”。
弱分类器如何选择:一般采用弱分类器的原因在于将误差进行均衡,因为一旦某个分类器太强了就会造成后面的结果受其影响太大,严重的会导致后面的分类器无法进行分类,,常用的弱分类器可以采用误差小于0.5的,比如逻辑斯蒂回归,SVM,神经网络等。
如何生成个体学习器:
(1)个体学习器间存在强依赖关系,必须串行生成的序列化方法,例如基于Booosting;
(2)个体学习器间不存在强依赖关系,可同时生成的并行化方法,例如基于Bagging和随机森林。
Boosting算法:
(1)基本思想:先从初始训练集上训练一个基学习器,再根据基学习器的表现对训练样本分布进行调整,使得先前基学习器做错的训练样本在后续受到更多关注,然后基于调整后的样本分布来训练下一个基学习器,如此反复进行,直至基学习器数目达到实现指定的值T,最终将这T个基学习器进行加权结合。
(2)Adaboost算法
基本思想:通过训练数据的分布构造一个分类器,然后通过误差率求出这个弱分类器的权重,通过更新训练数据的分布,迭代进行,直到达到迭代次数或者损失函数小于某一阈值。
算法流程:a.初始化训练数据的分布,训练数据的权重设置为平均分配;b.选择合适的基本分类器;c.计算分类器的系数和更新数据权重:
其中
d.构建基本分类器的线性组合
特点:关注降低偏差,能基于泛化性能相当弱的学习器构建出很强的集成。
Bagging算法:
(1)基本思想:自助采样法,给定包含m个样本的数据集,随机取出一个样本放入采样集中,再把该样本放回初始数据集,这样经过m次随机采样操作,可以得到含m个样本的采样集。照这样,可以采样出T个含m个训练样本的采样集,然后基于每个采样集训练出一个基学习器,再将这些基学习器进行结合。结合时对多分类任务使用简单投票法,对回归任务使用简单平均法。
(2)优点: a.训练一个Bagging集成与直接使用基学习算法训练一个学习器的复杂度同阶,高效;b.标准的AdaBoost只适用于二分类,Bagging能直接用于多分类,回归等任务;c.因为自助采样,每个基学习器只使用了出事训练集中约63.2%的样本,剩下的样本可以用作验证集等等。
(3) 特点:关注降低方差,在易受样本扰动的学习器上效用更为明显。
(4)随机森林算法(RandomForest,简称RF)
基本思想:RF在以决策树为基学习器构建Bagging集成的基础上,进一步在决策树的训练过程中引入了随机属性选择。(即先从节点的属性集合M中随机选择一个包含k个属性的子集,然后再从这个子集中选择一个最优属性用于划分,一般k远小于M,取k= )
特点:两个随机过程避免了过拟合现象的出现(一是输入数据是随机的从整体的训练数据中选取一部分作为一棵决策树的构建,而且是有放回的选取,第二个是随即特征的选取)。
过程:a. 从训练数据中选取n个数据作为训练数据输入,有放回的选取,这样会造成一部分数据无法被取到,这部分数据被称为袋外数据,可以使用其做误差估计;b.选取了输入的训练数据之后,需要构建决策树,随机选取k个特征;c.构造决策时,按照选取最小的基尼指数进行分裂节点的选取进行决策树的构建,直到该节点所有训练样例都属于同一类或达到树的最大深度;d,重复b、c,得到随机森林;e. 多数投票进行决策。
注意点:不需要剪枝,构建决策树时分裂点的选择是依据最小基尼系数的。
基尼系数:
优点:1.两个随机性的引入使得随机森林不容易陷入过拟合还具有很好的抗噪声能力;2.容易做成并行化方法;3.实现简单;4.能够处理高纬度的数据,并且不需要做特征选择。
缺点:对噪声敏感。
如何在随机森林中避免出现过拟合?1.对树的深度进行控制;2.把模型训练比较复杂,看合并节点后的子树能否降低泛化误差。
组合策略
为什么要结合学习器:(1)统计方面,由于假设空间往往很大,可能有多个假设在训练集上达到同等性能。此时若使用单学习器可能因误选导致泛化性能不佳;(2)计算方面,单个学习算法容易陷入局部极小;(3)表示方面,某些学习任务的真实假设可能不在当前学习算法的假设空间,此时使用多个学习器扩大假设空间。
算法:平均法(加权(个体学习器性能相差较大),简单(性能相近)),投票法(绝对多数(超过半数标记。否则拒绝预测),相对多数,加权投票),学习法(通过另一个学习器来进行结合,Stacking算法)
Stacking算法:
基本思想:先从初始数据集训练出初级学习器,然后生成一个新数据集用于训练次级学习器。在这个新数据集中,初级学习器的输出被当作样例输入特征,而出事样本的标记仍被当作样例标记。
注意点:若直接用初级学习器的训练集来产生次级训练集,则过拟合风险会比较大;一般会通过交叉验证等方式,用训练初级学习器未使用的样本来产生次级学习器的训练样本。
如何增强集成学习的多样性?
(1) 数据样本扰动(基于采样法,给定初始数据集,可以产生不同的数据子集,例如Bagging的自助采样,AdaBoost的序列采样),适合不稳定的基学习器(决策树,神经网络等)。
(2) 输入属性扰动(不同的属性子集提供了观察数据的不同视角),适合于冗余属性多的数据集。
(3) 输出表示扰动(对训练样本的类标记稍作变动或者对输出表示进行转化)
(4) 算法参数扰动(修改基学习器的参数,如神经网络层数等等)。
GBDT(gradient boosting decision tree)
基本思想:积跬步以至千里,每次学习一点。先用一个初始值来学习一棵决策树,叶子处可以得到预测的值,以及预测之后的残差,然后后面的决策树就是要基于前面决策树的残差来学习,直到预测值和真实值的残差为0。最后对于测试样本的预测值,就是前面许多棵决策树预测值的累加。
Shrinkage(缩减):仍以残差作为学习目标,但对于残差学习出来的结果,只累加一小部分(step*残差)逐步逼进目标。原因:每次走一小步逐渐逼近结果的效果要比每次迈一大步很快逼近结果的方式更容易避免过拟合。本质:为每棵树设置一个weight,累加时要乘以这个weight。
基于梯度的版本:代价函数是对数似然函数形式。沿着残差减小的梯度方向学习到回归树。
GBDT和随机森林对比
相同点:1.都是由多棵树组成;2.最终的结果都是由多棵树一起决定;
不同点:1.随机森林的子树可以是分类或回归树,而GBDT只能是回归树;2.随机森林可以并行生成,而GBDT只能是串行;3.输出结果,随机森林采用多数投票,GBDT将所有结果累加起来;4随机森林对异常值不敏感,GBDT敏感;5:随进森林减少方差,GBDT减少偏差;6:随机森林对数据集一视同仁,GBDT是基于权值的弱分类器的集成。
GBDT和随机森林哪个容易过拟合?
随机森林,因为随机森林的决策树尝试拟合数据集,有潜在的过拟合风险,而boostingd的GBDT的决策树则是拟合数据集的残差,然后更新残差,由新的决策树再去拟合新的残差,虽然慢,但是难以过拟合。
http://blog.csdn.net/cppjava_/article/details/68485565