需要集成的原因:普通弱分类器具有较高的偏差(过于简单,算法本身的拟合能力较差)或较大的方差(过于复杂,稳定性、鲁棒性不强)。
集成算法分类
Bagging:该方法通常考虑的是同质弱学习器,相互独立地并行学习这些弱学习器,重点在于获得一个方差小的集成模型。代表模型——随机森林。
Boosting:该方法通常考虑的也是同质弱学习器。顺序地学习这些弱学习器(每个基础模型都依赖于前面的模型),并按照某种确定性的策略将它们组合起来。将主要生成偏差小的强模型(即使方差也可以被减小)。代表模型——Adaboost、GBDT、XGBOOST。
Stacking:该方法通常考虑的是异质弱学习器,并行学习,并通过训练一个「元模型」将它们组合起来,根据不同弱模型的预测结果输出一个最终的预测结果。将主要生成偏差小的强模型(即使方差也可以被减小)。
随机森林
总述:集成决策树模型,输出结果集成了所有的分类投票结果,将投票次数最多的类别指定为最终的输出,这就是一种最简单的Bagging 思想。假设训练集大小N,每棵树都“随机&有放回”地抽取N个训练样本(即Bootstrap取样方法)作为训练集进行训练。
算法:
训练集大小N,特征数M
1. 输入特征数目m,用于确定决策树上一个节点的决策结果(m<<M),从N个训练用例(样本)中以有放回抽样的方式,取样N次,形成一个训练集(即bootstrap取样),未抽到的样本作预测,评估其误差。
2. 对于每一个节点,随机选择m个特征,决策树上每个节点的决定都是基于这些特征确定的。根据这m个特征,计算其最佳的分裂方式。
3. 每棵树都不需要剪枝。
特点:
1)基学习器是CART决策树;
2)随机的从原始数据集中随机的抽取m个子样本;而且在训练每个基学习器的时候,也是随机的选取k个特征,从这k个特征中选择最优特征来切分节点,从而更进一步的降低了模型的方差。
优点:
1)准确度高;
2)高度并行化,可处理大量的输入变量,训练速度快,适用于大数据;
3)随机划分特征,在样本特征维度很高的时候,仍然能高效的训练模型;
4)可以给出各个特征对于输出的重要性(sklearn中feature_importances_可以输出特征的重要性);
5)RF实现比较简单;
6)对部分特征缺失不敏感;
7)随机采样,训练出的模型的方差小,泛化能力强;
8)无偏估计:没有必要对它进行交叉验证或者用一个独立的测试集来获得误差的一个无偏估计。它可以在内部进行评估,也就是说在生成的过程中就可以对误差建立一个无偏估计。
缺点:
1)在噪声大的回归&分类问题上容易过拟合;
2)取值划分较多的属性会对随机森林产生更大的影响,所以随机森林在这种数据上产出的属性权值是不可信的。
AdaBoost
算法:
输入:训练集T={(x1,y1),……,(xn,yn)},y:{-1,1}
输出:终分类器Gm(x)
初始化:训练数据权值 D1=(w11,w12,w13……,w1n),w=1/n
循环:m=1……M
a)使用Dm训练数据集学习,得到Gm
b)计算Gm(x)的分类误差率em=P(Gm(xi)!=yi)
c)计算Gm(x)的系数(即分类器em<0.5时,话语权才>0),此时分类器
d)更新训练集权值
循环结束条件:em小于某个阈值(一般是0.5),或是达到最大迭代次数(注:AdaBoost 方法中使用的分类器可能很弱(比如出现很大错误率),但只要它的分类效果比随机好一点(比如两类问题分类错误率略小于0.5),就能够改善最终得到的模型。)
组合分类器:
最终分类器:
特点:
1)集中关注分类器错分的那些数据来获得新的分类器;
2)boosting中分类器的权值并不相等,错误率低的分类器“话语权”高。
优点:
1)精度很高的分类器;
2)提供的是框架,可以使用各种方法构建弱分类器;
3)弱分类器构造极其简单,不需要做特征筛选;
4)不会过拟合。
缺点:
1)易受噪声干扰;
2)顺序训练,时间长;
3)执行效果依赖于弱分类器的选择;
4)迭代次数(即弱分类器个数)需要交叉验证得到;
5)数据不平衡时准确率下降。
GBDT 梯度提升树
综述:效果确实挺不错;可以用于分类&回归;可以筛选特征。GBDT的迭代,使用了前向分布算法,但是弱学习器使用CART回归树模型。每轮迭代要求找到一个CART回归树模型的弱学习器,让本轮的损失函数最小。
总体思路:
假设t-1轮迭代得到的强分类器,对应损失函数,本轮想要找到一个CART回归树模型的弱学习器,让本轮损失函数最小。也就是说,本轮迭代找到决策树,要让样本的损失尽量变得更小,即
比较GBDT和AdaBoost:
比较GBDT和AdaBoost
负梯度拟合:
第t轮的第i个样本的损失函数的负梯度表示为
利用可以拟合一颗CART回归树,得到第t棵回归树,对应的叶节点区域(J为叶节点个数)。针对每个叶节点里的样本,求使孙叔函数最小的输出值
综上得到本轮决策树拟合函数
t轮后的强学习器表达式为
GBDT回归算法
GBDT二分类
GBDT多分类
GBDT常用损失函数
GBDT正则化
优点:
1) 灵活处理各种类型数据(连续值&离散值);
2) 调参时间相对少,准确率较高。
3)使用一些健壮的损失函数,对异常值的鲁棒性非常强,e.g.:Huber和Quantile损失函数。
缺点:
1)由于弱学习器之间存在依赖关系,难以并行训练数据。(注:但是可以通过自采样的SGBT来达到部分并行。)
XGBoost
总述:能够自动利用 CPU 的多线程进行并行,同时在算法上加以改进提高了精度。
网友评论