集成学习,顾名思义,通过将多个单个学习器集成/组合在一起,使它们共同完成学习任务,有时也被称为“多分类器系统(multi-classifier system)”、基于委员会的学习(Committee-based learning)。这里的【学习器】就是指机器学习算法训练得到的假设。而我们之所以有直觉要把多个学习器组合在一起,是因为单个学习器往往可能效果不那么好,而多个学习器可以互相帮助,各取所长,就可能一起合作把一个学习任务完成得比较漂亮。
个体学习器通常是用一个现有的学习算法从训练数据产生,例如C4.5决策树算法、BP神经网络算法等。此时集成中只包含同种类型的个体学习器,例如“决策树集成”中的个体学习器全是决策树,“神经网络集成”中就全是神经网络,这样的集成是“同质”(homogeneous)的,同质集成中的个体学习器也称为“基学习器”(base learner),相应的学习算法称为“基学习算法”(base learning algorithm)。有同质就有异质(heterogeneous),若集成包含不同类型的个体学习器,例如同时包含决策树和神经网络,那么这时个体学习器一般不称为基学习器,而称作“组件学习器”(component leaner)或直接称为个体学习器。
Boosting是一族可将弱学习器提升为强学习器的算法。这一族算法的工作机制都是类似的:先从初始训练集训练出一个基学习器,再根据基学习器的表现对训练样本分布进行调整,使得先前基学习器做错的训练样本在后续受到更多关注,然后基于调整后的样本分布来训练下一个基学习器;如此重复进行,直至基学习器数目达到事先指定的值T,最终将这T个基学习器进行加权结合。
假设集成中包含T个基学习器 h 1 , h 2 , . . . , h T h_1,h_2,...,h_T h1,h2,...,hT,其中 h i h_i hi在示例 x x x上的输出为 h i ( x ) h_i(x) hi(x)。那么对 h i h_i hi进行结合的常见策略有以下几种:
平均法
平均法主要针对回归类任务。
对数值型输出 h i ( x ) ∈ R h_i(x)∈R hi(x)∈R,最常见的结合策略是平均法(averaging)。
简单平均法( averaging)
H ( x ) = 1 T ∑ i = 1 T h i ( x ) H(x) = {1 \over T}\textstyle\sum_{i=1}^T h_i(x) H(x)=T1∑i=1Thi(x)
加权平均
H ( x ) = ∑ i = 1 T w i h i ( x ) H(x) = \textstyle\sum_{i=1}^T w_ih_i(x) H(x)=∑i=1Twihi(x)
这里 w i w_i wi表示个体学习器 h i h_i hi的权重,通常要求 w i ≥ 0 , ∑ i = 1 T w i = 1 w_i≥0,\textstyle\sum_{i=1}^Tw_i=1 wi≥0,∑i=1Twi=1。
加权平均法的权重一般是从训练数据中学习而得,现实任务中的训练样本通常不充分或存在噪声,这将使得学出的权重不完全可靠。因此,实验和应用均显示出,加权平均分未必一定优于朴素的简单平均法。一般而言,在个体学习器的性能相差较大时宜使用加权平均法,而在个体学习器性能相近时宜使用简单平均法。
投票法
投票法主要针对分类任务。
对分类任务来说,学习器hihi将从类别标记集合 c 1 , c 2 , . . . , c N c_1,c_2,...,c_N c1,c2,...,cN中预测出一个标记,最常见的结合策略是使用投票法。为便于讨论,我们将 h i h_i hi在样本 x x x上的预测输出表示为一个N维向量 ( h i 1 ( x ) ; h i 2 ( x ) ; … ; h i N ( x ) ) (h_i^1(x);h_i^2(x);…;h_i^N(x)) (hi1(x);hi2(x);…;hiN(x)),其中 h j i ( x ) h_j^i(x) hji(x)是 h i h_i hi在类别标记 c j c_j cj上的输出。
加权投票法(weighted voting)
学习法
当训练数据很多时,一种更为强大的结合策略是使用“学习法”,即通过另一个学习器来进行结合。Stacking是学习法的典型代表,这里我们把个体学习器称为初级学习器,用于结合的学习器称为次级或者元学习器。
Stacking先从初始训练集训练出初级学习器,然后“生成”一个新数据集用于训练次级学习器。在这个新数据集中,初级学习器的输出被当作样例输入特征,而初始样本的标记仍被当做样例标记。Stacking的算法描述如下图所示,这里假定初始学习器使用不同学习算法产生(例如可同时包含决策树,神经网络算法),即初级集成是异质的。
随机森林(Random Forest,简称RF)是Bagging的一个扩展变体。其在以决策树作为基学习器构建Bagging集成的基础上,进一步在决策树的训练过程中引入了随机属性选择。
具体来说,传统决策树在选择划分属性时是在当前结点的属性集合(假定有 d d d个属性)中选择一个最有属性;而在RF中,对基决策树的每个结点,先从该结点的属性集合中随机选择一个包含k个属性的子集,然后再从这个子集中选择一个最优属性用于划分。这里的参数k控制了随机性的引入程度:若令 k = d k=d k=d,则基决策树的构建与传统决策树相同;若令 k = 1 k=1 k=1,则是随机选择一个属性用于划分;一般情况下,推荐值 k = l o g 2 d k=log_2d k=log2d。
RF简单、容易实现、计算开销小,而令人惊奇的是,它在很多学习任务中展现出强大的性能,被誉为“代表集成学习技术水平的方法”。
RF的收敛性与Bagging相似。如下图所示,随机森林的起始性能往往相对较差,特别是在集成中只包含一个基学习器时,这很容易理解,因为通过引入属性扰动,随机森林中个体学习器的性能往往有所降低。然而,随着个体学习器数目的增加,随机森林通常会收敛到更低的泛化误差。
随机森林的优点有:
对于很多种数据,它可以产生高准确度的分类器。
它可以处理大量的输入变量。
它可以在决定类别时,评估变量的重要性。
在建造森林时,它可以在内部对于一般化后的误差产生不偏差的估计。
它包含一个好方法可以估计丢失的数据,并且,如果有很大一部分的数据丢失,仍可以维持准确度。
它提供一个实验方法,可以去侦测variable interactions。
对于不平衡的分类数据集来说,它可以平衡误差。
它计算各例中的亲近度,对于数据挖掘、侦测离群点(outlier)和将数据可视化非常有用。
使用上述。它可被延伸应用在未标记的数据上,这类数据通常是使用非监督式聚类。也可侦测偏离者和观看数据。
class sklearn.ensemble.RandomForestClassifier(n_estimators=’warn’,
criterion=’gini’, max_depth=None, min_samples_split=2, min_samples_leaf=1,
min_weight_fraction_leaf=0.0, max_features=’auto’, max_leaf_nodes=None,
min_impurity_decrease=0.0, min_impurity_split=None, bootstrap=True,
oob_score=False, n_jobs=None, random_state=None, verbose=0,
warm_start=False, class_weight=None)
class sklearn.ensemble.``RandomForestRegressor(n_estimators=’warn’,
criterion=’mse’, max_depth=None, min_samples_split=2, min_samples_leaf=1,
min_weight_fraction_leaf=0.0, max_features=’auto’, max_leaf_nodes=None,
min_impurity_decrease=0.0, min_impurity_split=None, bootstrap=True,
oob_score=False, n_jobs=None, random_state=None, verbose=0,
warm_start=False)