集成学习—Boosting,Bagging,Stacking概述

  现实生活中,人们遇到不会的问题常常会向多个人寻求答案,再三斟酌后确定最终答案。为什么要这样大费周章而不只问一个人呢?因为大家都不是权威专家,为了保险起见,通过结合多个人的答案来提高答案的正确性。

  与该思想类似,集成学习(ensemble learning)的思路:通过训练集 D D 训练出多个不同的学习器,在预测某一新样本时,每个学习器都会给出一个预测结果,综合考虑所有结果,确定最终结果。

  那么,问题就来了!问题一:训练集只有一个,如何训练出不同的学习器?问题二:如何综合每个学习器的预测结果,进而获取靠谱的最终结果?

  针对问题一,主要有以下三种方法:
  1、采用不同类型的算法(如,分类问题可同时采用决策树、逻辑回归等不同类型算法);
  2、采用同类型的算法,但对训练集进行采样,形成不同的训练子集;
  3、采用同类型的算法,但改变训练集的样本分布。

  针对问题二,主要有以下三种方法:
  1、采用所有学习器的预测结果的平均结果;
  2、采用所有学习器的预测结果的投票结果;
  3、采用所有学习器的预测结果的映射结果。

根据采用的方法,集成学习可以细分为三种类型:Boosting,Bagging,Stacking。

Boosting

①利用训练集 D D 训练出一个学习器;
根据该学习器的表现改变训练集的样本分布,使预测不好的训练样本在以后得到重视;
③利用改变后的训练集训练出另一个学习器;
④重复②③步骤,直到满足预先设定的停止条件;
⑤预测新样本时,通常将所有学习器的预测结果加权结合(包括加权平均、加权投票等)。

Bagging

①对训练集 D D 进行 m m 自助采样,生成 m m 个训练子集;

自助采样(bootstrap sampling):现有训练集 D D ,包含 n n 个样本。从 D D 中有放回地抽取 n n 个样本,形成训练子集 D D ′ D D 中部分样本在 D D ′ 中重复出现,部分样本在 D D ′ 中从未出现)。 m m 次自助采样就能形成 m m 个训练子集。

②每个训练子集训练出一个学习器,共训练出 m m 个学习器;
③预测新样本时,通常将所有学习器的预测结果简单结合(包括简单平均、简单投票等)。

Stacking

  该方法较前两种方法理解起来要复杂些。
  首先,我相信大部分人在看到前述问题二的第3种解决办法“采用所有学习器的预测结果的映射结果”时,都有些丈二和尚摸不着头脑。那我为大家解释一下,眼睛看过来!!!
  对某一样本(带标记)来说,学习器 h1 h 1 对它的预测看作特征 X1 X 1 ,学习器 h2 h 2 对它的预测看作特征 X2 X 2 ,…,学习器 hm h m 对它的预测看作特征 Xm X m ,它的真实标记看作标记 Y Y 。收集若干个样本对应的( X1 X 1 X2 X 2 ,…, Xm X m Y Y ),形成数据集 d d

序号 X1 X 1 X2 X 2 Xm X m Y Y
1 x11 x 11 x12 x 12 x1m x 1 m y1 y 1
2 x21 x 21 x22 x 22 x2m x 2 m y2 y 2

利用数据集 d d 训练出的学习器 h h ′ (通常使用回归算法,且务必注意该学习器的不同之处),就是所述的( X1 X 1 X2 X 2 ,…, Xm X m )与 Y Y 的映射关系,即学习器 h1 h 1 h2 h 2 、…、 hm h m 的预测结果与真实结果的映射关系。有了学习器 h h ′ ,我们就能找到“所有学习器的预测结果的映射结果”了。
  那么,如何收集到数据集 d d 以及如何训练出学习器 h1 h 1 h2 h 2 、…、 hm h m 就成了亟待解决的问题。
  需要运用到 m m 种不同类型的算法 k k 折交叉验证

k k 折交叉验证( k k -fold cross validation):通过分层采样将训练集 D D 划分为 k k 个大小相似的训练子集,且 D=D1D2DkDiDj=ij D = D 1 ⋃ D 2 ⋃ … ⋃ D k , D i ⋂ D j = ∅ ( i ≠ j ) 。每次用其中的 k1 k − 1 个子集的并集作 training set t r a i n i n g   s e t ,剩下的1个子集做 test set t e s t   s e t 。这样就能获得 k k training set t r a i n i n g   s e t & test set t e s t   s e t

①利用 k k 折交叉验证,训练集 D D 划分为 training set1 t r a i n i n g   s e t 1 & test set1 t e s t   s e t 1 training set2 t r a i n i n g   s e t 2 & test set2 t e s t   s e t 2 ,…, training set k t r a i n i n g   s e t   k & test set k t e s t   s e t   k
②确定使用算法 i i i1,2m i ∈ ( 1 , 2 , … , m ) );
③在该算法下,利用 training set1 t r a i n i n g   s e t 1 训练出的学习器记为 hi h i ,该学习器对 test set1 t e s t   s e t 1 的预测结果记为 a1 a 1 (1列若干行),对新样本的预测结果记为 A1 A 1 ;利用 training set2 t r a i n i n g   s e t 2 训练出的学习器也记为 hi h i ,该学习器对 test set2 t e s t   s e t 2 的预测结果记为 a2 a 2 (1列若干行),对新样本的预测结果记为 A2 A 2 ;…;利用 training set k t r a i n i n g   s e t   k 训练出的学习器也记为 hi h i ,该学习器对 test set k t e s t   s e t   k 的预测结果记为 ak a k (1列若干行),对新样本的预测结果记为 Ak A k
④将 a1 a 1 a2 a 2 、…、 ak a k 合并为1列,这便是学习器 hi h i 对训练集 D D 的预测结果,即数据集 d d Xi X i 列;
⑤取 A1 A 1 A2 A 2 、…、 Ak A k 的均值,这便是学习器 hi h i 对新样本的预测结果;
⑥改变②中的算法,重复③④⑤ m m 次,就能得到学习器 h1 h 1 h2 h 2 、…、 hm h m ,由 X1 X 1 列、 X2 X 2 列、…、 Xm X m 列、标记 Y Y 列组合成的数据集 d d ,以及 h1 h 1 h2 h 2 、…、 hm h m 对新样本的预测结果;
④最后,利用数据集 d d 训练出学习器 h h ′ ,将 h1 h 1 h2 h 2 、…、 hm h m 对新样本的预测结果代入 h h ′ 就能得出最终结果了。

你可能感兴趣的:(集成学习—Boosting,Bagging,Stacking概述)