数据及代码在git上:https://github.com/qdbszsj/Ensemble-learning
这里用sklearn实现的代码,4种常用的集成学习的方法,手写有点麻烦,这里重点不是代码,是学习总结。
集成学习(ensemble-learning)通过将多个学习器进行结合,常常可以获得比单一学习器更显著的泛化性能,我们的目标是基于一个大数据集产生若干“好而不同”的学习器,然后用这些学习器去进行预测,少数服从多数,或者根据误差或者主管判断进行加权什么的。
目前的集成学习方法有两大类:
一类是boosting,串行地产生的若干基学习器,后一个基学习器依据前一个基学习器的表现,进行一些参数的调整,从而依次产生若干新的基学习器,这里参数的调整方案不同,因此又分为Adaboost、GradientBoost等等boost,Adaboost相当于是不修改原数据内容,只是进行加权(重赋权法,re-weighting)或者是重采样(re-sampling),从而让错误数据受到更多重视,而gradientBoost是直接根据原数据和预测出的数据的差值,修改当前数据再进行下一次迭代,大概就是这样,具体迭代公式此处篇幅不易展开。
另一类是Bagging、随机森林这些,可以并行产生的。Bagging是用自助采样法,m个样本,独立采m次,根据极限法则,m趋于无穷时,(1-1/m)^m=1/e,也就是说有1/e的样本没有被采到,我们就用剩下的1-1/e=63.2%的样本来生成模型,这样子有很多独立的样本,可以并行计算