文章目录
- 一、集成学习概述
- 二、个体学习器
- 三、Boosting
- 四、Bagging
- 五、结合策略
-
- 1、平均法
- 2、投票法
- 3、学习法
-
- (1)核心图解
-
- a、构建新的训练集
- b、构建新的测试集
- c、最终的训练与预测
- (2)示例
-
- a、构建新的训练集
- b、构建新的测试集
- c、多模型的处理
- d、最终的训练与预测
集成学习(ensemble learning) 不是一个单独的机器学习算法,而是通过构建并结合多个机器学习器来完成学习任务。集成学习可以用于分类问题集成,回归问题集成,特征选取集成,异常点检测集成等等,可以说所有的机器学习领域都可以看到集成学习的身影。
一、集成学习概述
基本思想:对于训练集数据,我们通过训练若干个个体学习器,通过一定的结合策略,就可以最终形成一个强学习器。
集成学习的两个主要问题:
- 如何得到若干个体学习器;
- 如何选择一种结合策略,将若干个体学习器集成一个强学习器。
二、个体学习器
- 个体学习器是异质的,即所有个体学习器都是不全是同一个种类的。eg:有一个分类问题,对训练集采用支持向量机个体学习器,逻辑回归个体学习器和朴素贝叶斯个体学习器来学习,再通过某种结合策略来确定最终的分类强学习器。
- 个体学习器是同质的(使用最广泛),即所有个体学习器都是同一个种类的。eg:决策树、神经网络。
同质个体学习器
- 最常用的个体学习器:CART决策树和神经网络
- 按个体学习器之间的依赖关系分类:
- 强依赖关系,一系列个体学习器基本都需要串行生成,代表算法是 boosting 系列算法;
- 不存在强依赖关系,一系列个体学习器可以并行生成,代表算法是 bagging 系列算法。
三、Boosting
基本思想:个体学习器之间存在强依赖关系,必须串行序列化生成的集成学习方法。对训练样本分布调整,主要是通过增加误分类样本的权重,降低正确分类样本的权重。
工作机制如下:
- 先从初始训练集中学习一个基学习器;
- 根据基学习器的表现对训练样本分布进行调整,使得先前基学习器做错的训练样本在后续收到更多关注;
- 基于调整后的样本分布来训练下一个基学习器;
- 如此反复,直到基学习器数目达到 T,最终将这 T 个基学习器进行加权结合。
Boosting系列算法里最著名算法主要有AdaBoost算法和提升树(boosting tree)系列算法。
四、Bagging
Bagging 的弱学习器之间没有依赖关系,可以并行生成。
bagging的个体弱学习器的训练集是通过随机采样得到的。
通过
T
次的随机采样,我们就可以得到
T
个采样集,对于这
T
个采样集,我们可以分别独立的训练出
T
个弱学习器,再对这
T
个弱学习器通过集合策略来得到最终的强学习器。
随机采样
这里一般采用的是自助采样法(Bootstrap sampling),即有放回的采样
m
次,可以得到
m
个样本的采样集。由于是随机采样,这样每次的采样集是和原始训练集不同的,和其他采样集也是不同的,这样得到多个不同的弱学习器。
随机森林
bagging的典型算法,个体分类器为决策树。随机森林的随机体现在两方面:
- 样本随机采样;
- 特征随机选择。
五、结合策略
不妨假设得到T个弱分类器为 { h 1 , h 2 , . . . , h T } \{h_1, h_2,...,h_T\} {h1,h2,...,hT}
1、平均法
常用于回归预测问题,即对于若干个弱学习器的输出进行平均得到最终的预测输出。
算术平均:最简单的平均,其最终预测为
H ( x ) = 1 T ∑ i = 1 T h i ( x ) H(x)=\frac{1}{T}\sum_{i=1}^Th_i(x) H(x)=T1i=1∑Thi(x)
加权平均:对于每个弱分类器有一个权重 w w w,则最终预测为
H ( x ) = ∑ i = 1 T w i h i ( x ) H(x)=\sum_{i=1}^Tw_ih_i(x) H(x)=i=1∑Twihi(x)
其中, w i w_i wi是弱分类器 h i h_i hi 的权重,通常有
w i ≥ 0 , ∑ i = 1 T w i = 1 w_i\geq0,\ \ \ \sum_{i=1}^Tw_i=1 wi≥0, i=1∑Twi=1
2、投票法
常用于分类问题。假设我们的预测类别是 { c 1 , c 2 , . . . , c k } \{c_1,c_2,...,c_k\} {c1,c2,...,ck},对于任意一个样本 x x x,则T个弱分类器的预测结果分别是 ( h 1 ( x ) , h 2 ( x ) , . . . , h T ( x ) ) (h_1(x),h_2(x),...,h_T(x)) (h1(x),h2(x),...,hT(x))。
相对多数投票法,即少数服从多数,预测结果中最多的类别为最终的分类类别。若不止一个类别获得最高票,则随机选择一个作为最终类别。
绝对多数投票法,也就是常说的票数过半,否则拒绝预测。
加权投票法,在每个弱分类器的分类票数要乘以一个权重,最终将各个类别的加权票数求和,最大的值对应的类别为最终类别。
3、学习法
平均法和投票法简单,但是可以学习误差大,则有了学习法,典型方法为 stacking。
概述:将个体机器学习器的结果结合在一起,即对学习器的结果再加上一层学习器。将训练集学习器的学习结果作为输入,将训练集的输出作为输出,重新训练一个学习器来得到最终结果。(也就是常说的两层)
术语:
- 弱学习器称为初级学习器,将用于结合的学习器称为次级学习器;
- 对于测试集,我们首先用初级学习器预测一次,得到次级学习器的输入样本,再用次级学习器预测一次,得到最终的预测结果。
(1)核心图解
对于每一轮的 5-fold,Model 1都要做满5次的训练和预测。
a、构建新的训练集
- 先将训练集 D ( T r a i n i n g D a t a ) D(Training Data) D(TrainingData) 拆成 k k k 个大小相似但互不相交的子集 D 1 , D 2 , … , D k D_1,D_2,…,D_k D1,D2,…,Dk;
- 令 D j ′ = D − D j D_j'= D - D_j Dj′=D−Dj,在 D j ′ D_j' Dj′ 上训练一个弱学习器 L j L_j Lj 。将 D j D_j Dj 作为测试集,获得 L j L_j Lj 在 D j D_j Dj 上的输出 D j ′ ′ D_j'' Dj′′ ;
- 步骤2可以得到 k k k 个弱学习器以及 k k k 个相应的输出 D j ′ ′ D_j'' Dj′′ ,这个 k k k 个输出加上原本的类标构成新的训练集 D n D_n Dn ;
- 在 D n D_n Dn 训练次学习器 L L L , L L L 即为最后的学习器。
b、构建新的测试集
- 对于每个训练好的一个弱学习器 L j L_j Lj,在测试集(Test Data,图中所示绿色部分,不要与上面的“测试集”混淆。注意:此处是测试集的全部)进行预测,将 k k k 次的预测结果取平均作为新的预测集。
c、最终的训练与预测
- 训练集为构建新的训练集步骤得到的训练集,测试集为构建新的测试集得到的测试集
- 训练分类器并预测。
(2)示例
a、构建新的训练集
Train Data有890行。(请对应图中的上层部分)
每1次的fold,都会生成 713行 小train, 178行 小test。我们用Model 1来训练 713行的小train,然后预测 178行 小test。预测的结果是长度为 178 的预测值。
这样的动作走5次! 长度为178 的预测值 X 5 = 890 预测值,刚好和Train data长度吻合。这个890预测值是Model 1产生的,我们先存着,因为,一会让它将是第二层模型的训练来源。
重点:这一步产生的预测值我们可以转成 890 X 1 (890 行,1列),记作 P1 (大写P)
b、构建新的测试集
Test Data 有 418 行。(请对应图中的下层部分,对对对,绿绿的那些框框)
每1次的fold,713行 小train训练出来的Model 1要去预测我们全部的Test Data(全部!因为Test Data没有加入5-fold,所以每次都是全部!)。此时,Model 1的预测结果是长度为418的预测值。
这样的动作走5次!我们可以得到一个 5 X 418 的预测值矩阵。然后我们根据行来就平均值,最后得到一个 1 X 418 的平均预测值。
重点:这一步产生的预测值我们可以转成 418 X 1 (418行,1列),记作 p1 (小写p)
c、多模型的处理
走到这里,你的第一层的Model 1完成了它的使命。
第一层还会有其他Model的,比如Model 2,同样的走一遍, 我们有可以得到 890 X 1 (P2) 和 418 X 1 (p2) 列预测值。
这样吧,假设你第一层有3个模型,这样你就会得到:
来自5-fold的预测值矩阵 890 X 3,(P1,P2, P3) 和 来自Test Data预测值矩阵 418 X 3, (p1, p2, p3)。
d、最终的训练与预测
来自5-fold的预测值矩阵 890 X 3 作为你的Train Data,训练第二层的模型
来自Test Data预测值矩阵 418 X 3 就是你的Test Data,用训练好的模型来预测他们吧。