(15)监督学习-分类问题-集成学习
集成多个弱分类器来改善分类器的泛化性能和鲁棒性。多个弱分类器线性组合成一个强分类器。可以是不同算法的集成,也可以是同一算法不同设置,还可以是数据集不同部分分配给不同分类器后的集成。
工业上一般喜欢使用集成模型,虽然需要耗费更多时间,但是可以获得更好的性能(抵抗过你和)和稳定性。
如果弱分类器之间有很强的相关性,只能串行生成的方法——boost
如果弱分类器之间没有很强的相关性,可以并行的生成的方法——bagging和随机森林
Boosting主要关注降低偏差,因此Boosting能基于泛化性能相当弱的学习器构建出很强的集成;Bagging主要关注降低方差,因此它在不剪枝的决策树、神经网络等学习器上效用更为明显。偏差指的是算法的期望预测与真实预测之间的偏差程度,反应了模型本身的拟合能力;方差度量了同等大小的训练集的变动导致学习性能的变化,刻画了数据扰动所导致的影响。
Bagging 有放回抽样,各个分类器权重相同。如随机深林;主要关注降低方差;各分类器之间并行。
Boosting 无放回 集中关注被错分的数据 各个分类器权重不同 ,其权重表示上一轮迭代过程中的成功度。如AdaBoost(adaptive boost 自适应 boost);主要关注降低偏差。各分类器之间串行。通过迭代过程对分类器的输入输出进行加权处理。
可参见:https://blog.csdn.net/qq_28031525/article/details/70207918
(1)Bagging
Bagging 采取的基分类器,最好是本身对样本分布较为敏感的,即所谓不稳定的分类器。线性分类器或者K-近邻都是较为稳定的分类器,本身方差就不大,可能因为bagging采样,导致在训练中难以收敛。
(2)随机森林
随机森林为啥随机?
随机森林是选择n棵不相关的决策树,每棵树随机的有放回的选取m个数据,最后通过投票法则来进行决断。因此可以概括RF包括四个部分:1、随机选择样本(放回抽样);2、随机选择特征;3、构建决策树;4、随机森林投票(平均)。
随机森林的优点较多,简单总结:1、在数据集上表现良好,相对于其他算法有较大的优势(训练速度、预测准确度);2、能够处理很高维的数据,并且不用特征选择,而且在训练完后,给出特征的重要性;3、容易做成并行化方法。
RF的缺点:在噪声较大的分类或者回归问题上回过拟合。
(3)Adaboost
Adaboost 是Adaptive Boost的缩写。在训练过程中,训练数据的每一个样本,都被赋予一个权重。开始时,这些权重被初始化成了相等值。首先在一个弱分类器上训练,计算该分类器的错误率,然后再在相同数据集上再次训练。上次分对的数据的权重减弱,分错的数据上的权重增加。同时每个分类器都有一个权重,这个权重基于弱分类器的错误率计算出来。当多个弱分类器差距比较大时,可以缓解过拟合问题。
adaptive boost(4) GBDT
梯度提升与梯度下降算法,两者都在每一轮的迭代中,利用损失函数相对于模型的负梯度方向的信息来对当前模型进行更新。不同的是,在梯度下降中,模型是以参数化形式表示,而模型的更新等于参数的更新。在梯度提升中,模型并不需要进行参数化表示,而是定义在函数空间中,从而大大提升了可以使用的模型种类。
其优点是:
树与树之间可并行化计算;泛化能力较好;不需要对数据进行归一化等
其缺点是:
在高维稀疏的数据集上和文本特征问题上,效果不好;训练过程需要串行训练。
其公式为:,即决策树的加法模型。
提升树算法采用前向分步算法,首先确定提升树,第m步的模型为;其中为当前模型,通过经验风险最小化确定下一棵决策树的参数,即
当采用平方差损失函数时,,,并采用梯度下降法进行优化,其一阶导即为,即当前模型的残差。
(5)GDBT与随机森林的区别
GBDT是以决策树为基学习器的迭代算法,注意GBDT里的决策树都是回归树而不是分类树。Boost是”提升”的意思,一般Boosting算法都是一个迭代的过程,每一次新的训练都是为了改进上一次的结果。
GBDT的核心就在于:每一棵树学的是之前所有树结论和的残差,这个残差就是一个加预测值后能得真实值的累加量。比如A的真实年龄是18岁,但第一棵树的预测年龄是12岁,差了6岁,即残差为6岁。那么在第二棵树里我们把A的年龄设为6岁去学习,如果第二棵树真的能把A分到6岁的叶子节点,那累加两棵树的结论就是A的真实年龄;如果第二棵树的结论是5岁,则A仍然存在1岁的残差,第三棵树里A的年龄就变成1岁,继续学习。
随机森林采用的bagging思想,而GBDT采用的boosting思想。但二者的区别在于:Bagging采用有放回的均匀取样,而Boosting根据错误率来取样(Boosting初始化时对每一个训练样例赋相等的权重1/n,然后用该算法对训练集训练t轮,每次训练后,对训练失败的样例赋以较大的权重),因此Boosting的分类精度要优于Bagging。Bagging的训练集的选择是随机的,各训练集之间相互独立,弱分类器可并行,而Boosting的训练集的选择与前一轮的学习结果有关,是串行的。
组成随机森林的树可以是分类树,也可以是回归树;而GBDT只能由回归树组成。
组成随机森林的树可以并行生成;而GBDT只能是串行生成。
对于最终的输出结果而言,随机森林采用多数投票等;而GBDT则是将所有结果累加起来,或者加权累加起来。
随机森林对异常值不敏感;GBDT对异常值非常敏感。
随机森林对训练集一视同仁;GBDT是基于权值的弱分类器的集成。
随机森林是通过减少模型方差提高性能;GBDT是通过减少模型偏差提高性能。
(6) XGBOOST
有专门的包,可在python环境下直接使用。
特征选择时的并行、缺失值、异常值等的处理。
GBDT只用到了一阶导数;XGBOOST用到了二阶导树。
使用了正则项。加速方法的使用。
XGBOOST支持多种基分类器。
其防止过拟合的方法——增加样本、减少特征、