将一些简单的机器学习模型组合起来使用,可以得到一个强大的模型。
集成学习是指通过构建并结合多个学习器来完成学习任务的一种机器学习方法。
根据个体学习器的特点,可以分为以下两类:
同类型(如全是神经网络)的个体学习器,又称基学习器,构成同质集成。
不同类型的个体学习器,又称组件学习器,构成异质集成。
一般而言,个体学习器是所谓的弱学习器,即泛化能力略优于随机猜测的学习器。
理想的个体学习器应该具有好而不同的特点,即:
好:有一定的准确性
不同:个体学习器之间应该具有差异
如何寻找好而不同的个体学习器,是集成学习要研究的重点。
集成学习有两个主要的分支:Bagging 和Boosting。
一般而言,要取得好而不同的学习器,有以下两大类:
个体学习器之间存在着依赖关系,必须串行的生成个体学习器。典型方法例如 AdaBoost。
个体学习器之间不存在强依赖关系,可以并行的生成。典型方法例如 bagging、随机森林。
前者通过对原始训练样本集进行随机抽样,形成不同的训练样本集来训练每个弱学习器,各个弱学习器之间可以认为近似是独立的,典型代表是随机森林;后者为训练样本增加权重(AdaBoost),或者构造标签值(GBDT)来依次训练每个弱学习器,各个弱学习器之间相关,后面的弱学习器利用了前面的弱学习器的信息。下面分别对这两类算法进行介绍。
Boost的含义是增强,Boosting方法就是从弱学习算法出发,在前一个学习器的基础上反复学习,得到一系列弱分类器,然后组合弱分类器,得到一个强分类器。Boosting方法在学习过程中通过改变训练数据的权值分布,针对不同的数据分布调用弱学习算法得到一系列弱分类器。
根据定义可以知道:
boost是迭代算法,是通过前一个弱学习器进行优化,改变训练数据分布,从而得到下一个弱学习器,最终将所有的学习器进行组合的算法。
boosting算法要求基学习器可以对特定的数据分布进行学习,一般以下两种方法:
采用重赋值法,根据样本分布对不同样本数据进行赋值,这要求基学习器可以对带权数据进行学习
采用重采样法:根据样本分布对原训练集进行重新采样以满足某个分布,进行下一轮次的学习。
AdaBoost最终的模型是对于基学习器的线性组合,即:
其中,D为样本分布,f(x)为真实标记函数,H(x)为集成输出函数,E代表期望。
可以证明,当损失函数最小时,分类错误率也将最小化。
AdaBoost 主要关注减低偏差,而非方差,故可以通过很弱的弱学习器构建较强的集成学习器。
bagging 属于 无依赖型 并行算法,它主要通过变换不同的数据集来得到不同的算法,然后通过简单投票法得到最后的结果。
可以采用之前介绍过的自助采样法变换不同数据集:
自助法:假设有m个数据的数据集,每次有放回的从其中抽取一个样本,执行m次,最终大概有36.8%的数据未被抽取到,当做测试集,其余当做训练集。
优点:在数据集较小时用处较大,划分出的多个数据集有利于集成学习
缺点:改变了原数据样本的分布,会引入偏差
可以将上述方法重复T次,得到T个不同的数据集,便可以训练得到T个不同的弱学习器。
然后这多个弱学习器,通过简单投票,票多的结果胜出的方法,集成得到最终的强学习器。
bagging算法主要是降低方差,故它在一些易受到扰动的基学习器上使用效果更佳明显——例如神经网络,非剪枝决策树等。
和 bagging 不同,随机森林采用另一种方法来达到好而不同的效果。随机森林是在决策树的基础上进行的。
在普通决策树的构建过程中,节点的划分是在剩余属性集合中找一个最优的属性集合——信息增益最大
在随机森林的构建过程中,现在属性集合中先随机选出一个容量为k(推荐为log(d),其中d为属性总数)的属性子集,在从中找到最好的分类属性。
显然,k=d时,退化为普通决策树,k=1时,相当于随机划分。
随机森林在很多现实任务中都表现出了强大的泛化能力。
参考
Machine Learning笔记 - XGBOOST 教程
1
2
3
4
5
6
参考: