集成学习ensemble learning:本身不是一个单独的机器学习算法,而是通过构建并结合多个机器学习器来完成学习任务。
可以用两句话形容:
1、“三个臭皮匠顶个诸葛亮”:一堆弱分类器的组合可以成为一个强分类器;
2、“知错能改,善莫大焉”:不断在错误中学习,迭代来降低放错概率。
投票分类器VotingClassifier:结合多个不同的机器学习分类器,使用多数票(hard)或者平均预测概率(soft)来预测数据标签,可以平衡各个模型的弱点。
一、集成学习概述
1、训练若干个个体学习器(弱学习器)
弱学习器可以是同质或异质的:
同质:boosting系列算法(一系列个体学习器存在强依赖关系,需要串行生成)
例如Ada(adaptive) Boosting算法 以及 提升树Boosting系列算法,Gradient Boosting。
异质:bagging和随机森林(Random Forest)(个体学习器间不存在强依赖关系,一系列个体学习器可以并行生成)。
区别bagging和boosting:
在bagging方法中,特点在于随机化抽样,通过反复的抽样训练新的模型,最终在这些模型的基础上取平均。
boosting的核心思想在于,对多个模型的预测结果做加权平均则是将多个弱学习模型提升为强学习模型,在此过程中权重在不断更新。
2、一定的结合策略
在对个体学习器进行训练后,需要一种结合策略,将其形成一个强学习器。
1)平均法:对若干个弱学习器的输出进行平均(算术平均和加权平均等)得到最终的预测输出,常用于数值类的回归预测问题。
2)投票法:相对多数投票法(少数服从多数)、绝对多数投票法(过半数票)以及加权投票法,常用于分类问题预测。
3)学习法:
为了解决上述两种方法学习误差较大的问题,采用学习法,代表方法时stacking。
当使用stacking的结合策略时,会再加上一层学习器,此时弱学习器为初级学习器,将用于结合的学习器称为次级学习器。对于测试集,我们首先用初级学习器预测一次,得到次级学习器的输入样本,再用次级学习器预测一次,得到最终的预测结果。
3、形成强学习器
二、AdaBoosting以及GBDT(Gradient Boosting Decision Tree)
这两种算法是基于Boosting思想的著名算法,Boosting算法中,初始化时对每个训练样本赋予相等的权重,如1/n,然后利用该学习算法对训练集训练G轮,每次训练后,对训练失败的训练样本进行学习,从而得到一个预测函数序列,预测效果好的预测函数权重较大。
而Adaboosting和GradientBoosting在面对已存在弱分类器组合的shortcomings时表征不同,Adaboosting依据权值高的样本点,而GrandientBoosting依据梯度。
1)Adaboosting算法(记住两点:两个权重)
涉及两个权重的计算:
样本的权值:
在没有先验知识的情况下,初始的分布应为等概分布,样本数目为n,权值为1/n;
每次迭代更新权值,提高分错样本的权重。
弱分类器的权值:
最后的强学习器是多个弱学习器通过权值组合得到的;
通过权值体现不同弱学习器的影响,正确率高的弱学习器权重高(实际上是分类误差的一个函数)。
2)GradientBoosting算法(记住一点:梯度下降)
GradientBoosting算法是一种利用树的集成模型,引入损失函数描述模型的“靠谱”程度,假设模型未过拟合,损失函数越大,则模型错误率越高。
在求解损失函数时,可以通过梯度下降法来一步步迭代求解,得到最小化的损失函数和模型参数值(梯度即导数or偏导)。
GradientBoostingRegressor的函数参数如下(sklearn包中提供):
class sklearn.ensemble.GradientBoostingRegressor(
loss='ls', learning_rate=0.1, n_estimators=100, subsample=1.0,
min_samples_split=2, min_samples_leaf=1, min_weight_fraction_leaf=0.0, max_depth=3,
init=None, random_state=None, max_features=None, alpha=0.9,
verbose=0, max_leaf_nodes=None