bagging,随机森林,Adaboost
集成学习通过将多个学习器进行整合,常可获得比单一学习器显著优越的泛化性能,这对弱分类器尤为明显。
bagging
自举汇聚法(booststrap aggregating),也称为bagging方法,是在从原始数据集选择S次后得到S个新数据集的一种技术。
新数据集与原数据集大小相等,每个数据集都是通过在原始数据集中随机选择一个样本来进行替换得到的(这里也可以通过放回取样,新数据集中的每个样本都是从原数据集中有放回地随机抽样得到)
在S个数据集建好之后,将某个学习算法分别作用于每个数据集,就得到了S个分类器。
然后应用这S个分类器对新的数据进行分类,选择分类器投票结果最多的类别作为最后的分类结果。
对于回归任务,采用的是简单平均的方法计算最后的结果。
随机森林
随机森林(Random Forest,RF)是bagging方法的一种扩展变体,以决策树为基学习器,训练过程引入随机属性选择
基本思想
对于基决策树的每个结点,先从该结点的(d个)属性集合中随机选择一个包含k个属性的子集,再从这个子集选择一个最优属性用于划分,一般情况下推荐k=logd
1.如果训练集大小为N,对于每棵树而言,随机且有放回地从训练集中的抽取N个训练样本,作为该树的训练集;
2.随机地从d个特征中选取k个特征子集,每次树进行分裂时,从这k个特征中选择最优的;
3.每棵树都尽最大程度的生长,并且没有剪枝过程。
算法特点
1.基学习器多样性通过样本扰动和属性扰动实现
2.性能强大,被誉为“代表集成学习技术水平的方法”
3.算法简单、容易实现、计算开销小
Adaboost
Adaboost是Adaptive boosting的缩写,它的自适应在于:前一个基本分类器被错误分类的样本的权值会增大,而正确分类的样本的权值会减小,并再次用来训练下一个基本分类器。同时,在每一轮迭代中,加入一个新的弱分类器,直到达到某个预定的足够小的错误率或达到预先指定的最大迭代次数才确定最终的强分类器。
算法流程
Adaboost一般使用单层决策树作为其弱分类器。单层决策树是决策树的最简化版本,只有一个决策点
实例代码
先建立一个简单的数据集,并将其转为我们想要的数据格式,代码如下
|
|
接下来,我们就要通过上述数据集来寻找最佳的单层决策树,最佳单层决策树是具有最低分类错误率的单层决策树,伪代码如下:
|
|
接下来看单层决策树的生成函数代码
|
|
上面已经构建好了基于加权输入值进行决策的单层分类器,那么就已经有了实现一个完整AdaBoost算法所需要的所有信息了。下面先看一下整个AdaBoost的伪代码实现
具体实现代码
测试算法
优缺点
AdaBoost在每一轮的迭代过程中都会基于弱分类器的加权错误率,更新权重向量,从而进行下一次迭代。并且会在每一轮迭代中计算出该弱分类器的系数,该系数的大小将决定该弱分类器在最终预测分类中的重要程度。这两点的结合是adaBoost算法的优势所在。
优点
1.Adaboost提供一种框架,在框架内可以使用各种方法构建子分类器。可以使用简单的弱分类器,不用对特征进行筛选,也不存在过拟合的现象。泛化错误率低,容易实现,可以应用在大部分分类器上,无参数调整
2.Adaboost算法不需要弱分类器的先验知识,最后得到的强分类器的分类精度依赖于所有弱分类器。无论是应用于人造数据还是真实数据,Adaboost都能显著的提高学习精度。
3.Adaboost算法不需要预先知道弱分类器的错误率上限,且最后得到的强分类器的分类精度依赖于所有弱分类器的分类精度,可以深挖分类器的能力。Adaboost可以根据弱分类器的反馈,自适应地调整假定的错误率,执行的效率高。
缺点:
在Adaboost训练过程中,Adaboost会使得难于分类样本的权值呈指数增长,训练将会过于偏向这类困难的样本,导致Adaboost算法易受噪声干扰。此外,Adaboost依赖于弱分类器,而弱分类器的训练时间往往很长。对离散数据点敏感
参考链接:
【1】《机器学习实战》Peter Harrington(美) 人民邮电出版社
【2】[Machine Learning & Algorithm] 随机森林(Random Forest)
【3】机器学习实战之AdaBoost算法
【4】Adaboost原理详解