目前,有三种常见的集成学习框架:bagging,boosting和stacking。国内,南京大学的周志华教授对集成学习有很深入的研究,其在09年发表的一篇概述性论文《Ensemble Learning》对这三种集成学习框架有了明确的定义,概括如下:
bagging:
从训练集从进行子抽样组成每个基模型所需要的子训练集,对所有基模型预测的结果进行综合产生最终的预测结果:
详解可参考:机器学习 —— Bagging算法
boosting:
训练过程为阶梯状,基模型按次序一一进行训练(实现上可以做到并行),基模型的训练集按照某种策略每次都进行一定的转化。对所有基模型预测的结果进行线性综合产生最终的预测结果:
详解可参考:机器学习 —— Boosting算法 stacking:
将训练好的所有基模型对训练基进行预测,第j个基模型对第i个训练样本的预测值将作为新的训练集中第i个样本的第j个特征值,最后基于新的训练集进行训练。同理,预测的过程也要先经过所有基模型的预测形成新的测试集,最后再对测试集进行预测:
详解可参考:机器学习 —— stacking 有了这些基本概念之后,直觉将告诉我们,由于不再是单一的模型进行预测,所以模型有了“集思广益”的能力,也就不容易产生过拟合现象。
在统计学中,一个模型好坏,是根据偏差和方差来衡量的,偏差和方差可以描述模型在训练集上的准确度和防止过拟合的能力:
偏差(Bias): 描述的是预测值(估计值)的期望E’与真实值Y之间的差距。偏差越大,越偏离真实数据。Bias是由于模型太简单而带来的估计不准确的部分。
高偏差的情况: 方差(Variance): 描述的是预测值P的变化范围,离散程度,是预测值的方差,也就是离其期望值E的距离。方差越大,数据的分布越分散。Variance是由于模型太复杂而带来的更大的变化空间和不确定性。
高方差的情况:
模型的真实误差是两者之和 即Error = Bias + Variance。如下图:
在实际中,为了让Error尽量小,我们在选择模型的时候需要平衡Bias和Variance所占的比例,也就是平衡over-fitting和under-fitting。
偏差和方差与模型复杂度的关系: 当模型复杂度上升的时候,偏差会逐渐变小,而方差会逐渐变大。
对于模型中的偏差和方差,有以下几点总结:
如果是小训练集,高偏差/低方差的分类器(例如,朴素贝叶斯NB)效果更好。如果是大训练集,低偏差/高方差的分类器(例如,KNN)效果更好。bagging和stacking中的基模型为强模型(偏差低方差高),boosting中的基模型为弱模型。对于bagging来说,整体模型的偏差和基模型近似,随着训练的进行,整体模型的方差降低对于boosting来说,整体模型的初始偏差较高,方差较低,随着训练的进行,整体模型的偏差降低(虽然也不幸地伴随着方差增高),当训练过度时,因方差增高,整体模型的准确度反而降低。整体模型的偏差和方差与基模型的偏差和方差息息相关(1)模型选择(Model Selection) 假设各弱分类器间具有一定差异性(如不同的算法,或相同算法不同参数配置),这会导致生成的分类决策边界不同,也就是说它们在决策时会犯不同的错误。将它们结合后能得到更合理的边界,减少整体错误,实现更好的分类效果。
(2)数据集过小或过大(Too much or too little data) 数据集较大时,可以分为不同的子集,分别进行训练,然后再合成分类器。 数据集过小时,可使用自举技术(bootstrapping),从原样本集有放回的抽取m个子集,训练m个分类器,进行集成。
(3)分治(Divide and Conquer) 若决策边界过于复杂,则线性模型不能很好地描述真实情况。因此先训练多个线性分类器,再将它们集成。 (4)数据融合(Data Fusion) 当有多个不同数据源,且每个数据源的特征集抽取方法都不同时(异构的特征集),需要分别训练分类器然后再集成。
参考链接:
https://www.cnblogs.com/jasonfreak/p/5657196.html
