现实生活中,人们遇到不会的问题常常会向多个人寻求答案,再三斟酌后确定最终答案。为什么要这样大费周章而不只问一个人呢?因为大家都不是权威专家,为了保险起见,通过结合多个人的答案来提高答案的正确性。
与该思想类似,集成学习(ensemble learning)的思路:通过训练集 D D 训练出多个不同的学习器,在预测某一新样本时,每个学习器都会给出一个预测结果,综合考虑所有结果,确定最终结果。
那么,问题就来了!问题一:训练集只有一个,如何训练出不同的学习器?问题二:如何综合每个学习器的预测结果,进而获取靠谱的最终结果?
针对问题一,主要有以下三种方法:
1、采用不同类型的算法(如,分类问题可同时采用决策树、逻辑回归等不同类型算法);
2、采用同类型的算法,但对训练集进行采样,形成不同的训练子集;
3、采用同类型的算法,但改变训练集的样本分布。
针对问题二,主要有以下三种方法:
1、采用所有学习器的预测结果的平均结果;
2、采用所有学习器的预测结果的投票结果;
3、采用所有学习器的预测结果的映射结果。
根据采用的方法,集成学习可以细分为三种类型:Boosting,Bagging,Stacking。
Boosting
①利用训练集
训练出一个学习器;
②根据该学习器的表现改变训练集的样本分布,使预测不好的训练样本在以后得到重视;
③利用改变后的训练集训练出另一个学习器;
④重复②③步骤,直到满足预先设定的停止条件;
⑤预测新样本时,通常将所有学习器的预测结果加权结合(包括加权平均、加权投票等)。
Bagging
①对训练集 D D 进行 次自助采样,生成 m m 个训练子集;
自助采样(bootstrap sampling):现有训练集 ,包含 n n 个样本。从 中有放回地抽取 n n 个样本,形成训练子集 ( D D 中部分样本在 中重复出现,部分样本在 D′ D ′ 中从未出现)。 m m 次自助采样就能形成 个训练子集。
②每个训练子集训练出一个学习器,共训练出 m m 个学习器;
③预测新样本时,通常将所有学习器的预测结果简单结合(包括简单平均、简单投票等)。Stacking
该方法较前两种方法理解起来要复杂些。
首先,我相信大部分人在看到前述问题二的第3种解决办法“采用所有学习器的预测结果的映射结果”时,都有些丈二和尚摸不着头脑。那我为大家解释一下,眼睛看过来!!!
对某一样本(带标记)来说,学习器 对它的预测看作特征 X1 X 1 ,学习器 h2 h 2 对它的预测看作特征 X2 X 2 ,…,学习器 hm h m 对它的预测看作特征 Xm X m ,它的真实标记看作标记 Y Y 。收集若干个样本对应的( , X2 X 2 ,…, Xm X m , Y Y ),形成数据集 :
序号 X1 X 1