1 集成学习概念
集成学习通过构建并结合多个个体学习器,形成一个强学习器,来完成学习任务。
2 个体学习器概念
集成学习按个体学习器分类,可分为同质个体学习器和异质个体学习器。同质个体学习器的意思是个体学习器种类相同,异质反之。
同质个体学习器使用最多的模型是CART决策树和神经网络。同质个体学习器按照个体学习器之间是否存在依赖关系可以分为两类,第一个是个体学习器之间存在强依赖关系,一系列个体学习器基本都需要串行生成,代表算法是Boosting算法,第二个是个体学习器之间不存在强依赖关系,一系列个体学习器可以并行生成,代表算法是Bagging和随机森林算法。
3 boosting和bagging
3.1 Boosting算法
Boosting算法,即提升算法,其工作机制是首先从训练集用初始权重训练出一个 弱学习器1 ,根据 弱学习器1 的学习误差率表现来更新训练样本的权重,使得之前 弱学习器1 学习误差率高的训练样本点的权重变高,使得这些误差率高的点在后面的 弱学习器2 中得到更多的重视。然后基于调整权重后的训练集来训练 弱学习器2 。如此重复进行,直到弱学习器数达到事先指定的数目
N
N
N,最终将这
N
N
N个弱学习器通过集合策略进行整合,得到最终的强学习器。
Boosting系列算法里最著名算法主要有AdaBoost算法和提升树算法。
3.2 Bagging算法
Bagging算法原理和 Boosting不同,弱学习器之间没有依赖关系,可以并行生成。
Bagging的个体弱学习器的训练集是通过随机采样得到的。通过
N
N
N次的随机采样,我们就可以得到
N
N
N个采样集,对于这
N
N
N个采样集,我们可以分别独立的训练出
N
N
N个弱学习器,再对这
N
N
N个弱学习器通过集合策略来得到最终的强学习器。
对于随机采样,一般采用的是自助采样法(Bootstrap sampling),即对于
m
m
m个样本的原始训练集,我们每次先随机采集一个样本放入采样集,接着把该样本放回,也就是说下次采样时该样本仍有可能被采集到,这样采集
m
m
m次,最终可以得到
m
m
m个样本的采样集,由于是随机采样,这样每次的采样集是和原始训练集不同的,和其他采样集也是不同的,这样得到多个不同的弱学习器。
随机森林是Bagging的一个特例,随机森林的弱学习器都是决策树,它在Bagging的样本随机采样基础上,又加上了特征的随机选择,其基本思想没有脱离Bagging的范畴,下文将再次介绍。
4 结合策略(平均法,投票法,学习法)
假设得到N个弱学习器: { h 1 , h 2 , . . . h T } \left\{h_1,h_2,...h_T\right\} {h1,h2,...hT}.
4.1 平均法
对于数值类的回归预测问题,通常使用的结合策略是平均法,也就是说,对于若干个弱学习器的输出进行平均得到最终的预测输出。
最简单的平均是算术平均,也就是说最终预测是
H
(
x
)
=
1
T
∑
1
T
h
i
(
x
)
H(x)=\frac{1}{T}\sum_{1}^Th_i(x)
H(x)=T11∑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\ge0,\sum_{i=1}^Tw_i=1
wi≥0,i=1∑Twi=1
4.2 投票法
对于分类问题的预测,我们通常使用的是投票法。假设我们的预测类别是
{
c
1
,
c
2
,
.
.
.
c
K
}
\left\{c_1,c_2,...c_K\right\}
{c1,c2,...cK},对于任意一个预测样本
x
x
x,我们的
N
N
N个弱学习器的预测结果分别是
(
h
1
(
x
)
,
h
2
(
x
)
,
.
.
.
h
T
(
x
)
)
(h_1(x),h_2(x),...h_T(x))
(h1(x),h2(x),...hT(x))。
最简单的投票法是相对多数投票法,也就是我们常说的少数服从多数,也就是
N
N
N个弱学习器的对样本
x
x
x的预测结果中,数量最多的类别
c
i
c_i
ci为最终的分类类别。如果不止一个类别获得最高票,则随机选择一个做最终类别。
稍微复杂的投票法是绝对多数投票法,也就是我们常说的要票过半数。在相对多数投票法的基础上,不光要求获得最高票,还要求票过半数,否则会拒绝预测。
更加复杂的是加权投票法,和加权平均法一样,每个弱学习器的分类票数要乘以一个权重,最终将各个类别的加权票数求和,最大的值对应的类别为最终类别。
4.3 学习法
前两节的方法可能学习误差较大,于是就有了学习法这种方法,对于学习法,代表方法是Stacking。当使用Stacking的结合策略时, 我们不是对弱学习器的结果做简单的逻辑处理,而是再加上一层学习器,也就是说,我们将训练集弱学习器的学习结果作为输入,将训练集的输出作为输出,重新训练一个学习器来得到最终结果。
在这种情况下,我们将弱学习器称为初级学习器,将用于结合的学习器称为次级学习器。对于测试集,我们首先用初级学习器预测一次,得到次级学习器的输入样本,再用次级学习器预测一次,得到最终的预测结果。
5 随机森林概念
随机森林是一种有监督学习算法,随机森林建立了多个决策树,并将它们合并在一起以获得更准确和稳定的预测。
6 随机森林的推广
根据其他博主观点,extra trees是随机森林的一个变种,原理几乎和RF一模一样,仅有区别有:
(1)对于每个决策树的训练集,RF采用的是随机采样bootstrap来选择采样集作为每个决策树的训练集,而extra trees一般不采用随机采样,即每个决策树采用原始训练集。
(2)在选定划分特征后,RF的决策树会基于信息增益,基尼系数,均方差之类的原则,选择一个最优的特征值划分点,这和传统的决策树相同。但是extra trees比较的激进,他会随机的选择一个特征值来划分决策树。
由于随机选择了特征值的划分点位,而不是最优点位,这样会导致生成的决策树的规模一般会大于RF所生成的决策树。也就是说,模型的方差相对于RF进一步减少,但是bias相对于RF进一步增大。在某些时候,extra trees的泛化能力比RF更好。
7 优缺点
7.1 优势
(1)随机森林既可用于分类,也可用于回归问题。
(2)随机森林算法中树的增长会给模型带来额外的随机性,产生多样性。每个节点被分割成最小化误差的最佳特征,随机森林选择随机的特征来构建最佳分割。因此,仅考虑用于分割节点的随机子集,甚至可以通过在每个特征上使用随机阈值来使树更加随机,而不是如正常的决策树一样搜索最佳阈值。
(3)容易地测量每个特征对预测的相对重要性。 Sklearn为此提供了一个很好的工具,它通过查看使用该特征减少了森林中所有树多少的不纯度,来衡量特征的重要性。它在训练后自动计算每个特征的得分,并对结果进行标准化,以使所有特征的重要性总和等于1。
(4)随机森林对于高维数据集的处理能力很好,它可以处理成千上万的输入变量,并确定最重要的变量,因此被认为是一个不错的降维方法。
(5)可以应对缺失数据.
(6)当存在分类不平衡的情况时,随机森林能够提供平衡数据集误差的有效方法。
(7)高度并行化,易于分布式实现。
(8)由于是树模型 ,不需要归一化即可之间使用。
7.2 劣势
(1)随机森林在解决回归问题时并没有像它在分类中表现的那么好,这是因为它并不能给出一个连续型的输出。当进行回归时,随机森林不能够作出超越训练集数据范围的预测,这可能导致在对某些还有特定噪声的数据进行建模时出现过度拟合。
(2)对于许多统计建模者来说,随机森林给人的感觉像是一个黑盒子,只能在不同的参数和随机种子之间进行尝试。
(3)忽略属性之间的相关性
(4)随机森林构建的树数决定计算速度快慢,会导致计算速度变慢。
8 sklearn参数
8.1 调参方法:
(1)grid search 网格搜索。 sklearn 提供GridSearchCV,用cross validation,对模型迭代的选用候选参数进行交叉验证,取结果最好的参数。
(2)基于贪心的坐标下降搜索。即固定其他参数,把某个参数取得最好。这样迭代一遍得到最终结果。
(3)随机网格搜索。防止网格搜索间隔过大而跳过最优值,而随机可以相对单个参数取到更多的值。
8.2 参数
(1)n_estimators:越多结果更稳定,方差越小,所以只要允许内,数目越大越好,但计算量会大增。只有这个参数对结果的影响是越大越好,其他参数都是中间取得最优值。
(2)max_features:每棵树最大特征数。
(3)max_leaf_nodes:可以粗粒度地调整树的结构,叶节点越多或者树越深,意味着子模型的偏差越低,方差越高。
(4)min_samples_split(分裂所需最小样本数)、min_samples_leaf(叶节点最小样本数)、min_weight_fraction_leaf(叶节点最小权重总值),可以更细粒度地调整树的结构,分裂所需样本数越少或者叶节点所需样本越少,也意味着子模型越复杂。
9 应用场景
数据维度相对低(几十维),同时对准确性有较高要求时。希望不需要很多参数调整就可以达到不错的效果,可以先试一下随机森林。