随机森林算法梳理

集成学习概念

集成学习通过构建并结合多个学习器(分类器)来完成分类任务。集成学习的一般结构:先产生一组“个体学习器”(individual learner),再用某种策略将它们结合起来。集成学习有两个关键的东西,第一,就是一组个体学习器;第二,结合策略

个体学习器概念

集成学习通过对多个学习器进行组合,通常可获得比单一学习器更优的泛化性能。这对“弱学习器”(weak learner)尤为明显,因此集成学习很多研究是针对弱学习器,而基学习器有时也被直接称为弱学习器。在不正式的说法下,基学习器、弱学习器、弱分类器、个体学习器说的都是一个东西。

个体学习器通常由一个现有的学习算法从训练数据产生,是为了集成学习而产生的个体,通常有以下几种:

  • 只包含同种类型的个体学习器,这样的集成是“同质”的(homogeneous)。同质集成中的个体学习器亦称为”基学习器“(base learning)。
  • 集成也可包含不同类型的个体学习器,这样集成是”异质“的(heterogeneous)。相应的个体学习器,常称为”组件学习器“(component learning)或直接称为个体学习器。

集成学习把多个学习器集合起来,获得比最好的单一学习器获得更好的性能,就要让个体学习器尽量的有差异

根据个体学习器的生成方式,集成学习可分成两大类:

  1. 个体学习器之间存在强依赖关系必须串行生成,例如:Boosting
  2. 个体学习器之间不存在强依赖关系可同时生成的,例如:Bagging和随机森林(Random Forest)

Boosting Bagging

Boosting 和 Bagging 都是将弱分类器组装成强分类器的算法。

Boosting

Boosting算法的工作机制:

先从初始训练集训练出一个基学习器,在根据基学习器的表现对样本分布权重进行调整,使得先前基学习器做错的训练样本在后续收到更多的关注,然后基于调整后的样本分布来训练下一个基学习器,如此重复进行,直至基学习器数目达到事先指定的值T,最终将这T个基学习器进行加权结合。

Boosting系列算法里最著名算法主要有AdaBoost算法提升树(boosting tree)系列算法。提升树系列算法里面应用最广泛的是梯度提升树(Gradient Boosting Tree)。

Boosting 主要关注降低偏差

Bagging

Bagging 的个体弱学习器的训练集是通过随机采样得到的。通过T次的随机采样,我们就可以得到T个采样集,对于这T个采样集,我们可以分别独立的训练出T个弱学习器,再对这T个弱学习器通过集合策略来得到最终的强学习器。

Bagging 使用装袋采样来获取数据子集训练基础学习器。通常分类任务使用投票的方式集成,而回归任务通过平均的方式集成。

其算法过程如下:

  1. 从原始样本集中抽取训练集。每轮从原始样本集中使用 Bootstraping 的方法抽取 $n$ 个训练样本(在训练集中,有些样本可能被多次抽取到,而有些样本可能一次都没有被抽中)。共进行 $k$ 轮抽取,得到 $k$ 个训练集。($k$ 个训练集相互独立)
  2. 每次使用一个训练集得到一个模型,$k$ 个训练集共得到 $k$ 个模型.
  3. 对分类问题:将上步得到的 $k$ 个模型采用投票的方式得到分类结果;
    对回归问题:计算上述模型的均值作为最后的结果。

常用的集成算法模型是随机森林随机树

Bagging 主要关注降低方差

两者的区别

样本选择上:

  • Boosting:每一轮的训练集不变,只是训练集中每个样例在分类器中的权重发生变化。而权值是根据上一轮的分类结果进行调整。
  • Bagging:训练集是在原始集中有放回选取的,从原始集中选出的各轮训练集之间是独立的。

    样例权重:

  • Boosting:根据错误率不断调整样例的权值,错误率越大则权重越大
  • Bagging:使用均匀取样,每个样例的权重相等

    预测函数:

  • Boosting:每个弱分类器都有相应的权重,对于分类误差小的分类器会有更大的权重
  • Bagging:所有预测函数的权重相等

    并行计算:

  • Boosting:各个预测函数只能顺序生成,因为后一个模型参数需要前一轮模型的结果。
  • Bagging:各个预测函数可以并行生成

结合策略(平均法,投票法,学习法)

平均法

  • 简单平均法(simple average)

  • 加权平均法(weighted average)

投票法

  • 绝对多数投票法:某标记超过半数;
  • 相对多数投票法:预测为得票最多的标记,若同时有多个标记的票最高,则从中随机选取一个。
  • 加权投票法:提供了预测结果,与加权平均法类似。

学习法

当训练数据很多时,一种更为强大的结合策略是使用“学习法”,即通过另一个学习器来进行结合。Stacking是学习法的典型代表。我们把个体学习器称为初级学习器,用于结合的学习器称为次级学习器或元学习器。Stacking算法本身是一种著名的集成学习方法,且有不少集成学习算法可视为其变体或特例,它也可以看做是一种结合策略。

Stacking描述:先从初始数据集中训练出初级学习器,然后“生成”一个新数据集用于训练次级学习器。在新数据集中,初级学习器的输出被当做样例输入特征,初始样本的标记仍被当做样例标记。

随机森林思想

在以决策树为基学习器构建Bagging集成的基础上,进一步在决策树的训练过程中引入了随机属性选择。

  • 传统决策树在选择划分属性时是在当前节点的属性集合(假设有 $d$ 个属性)中选择一个最优属性
  • 在RF中,从该点属性集合中随机选择一个包含 $k$ 个属性的子集(若 $k=d$,则基决策树的构建与传统决策树相同)——推荐$k=logd$

随机选择样本

给定一个训练样本集,数量为N,我们使用有放回采样到N个样本,构成一个新的训练集。然后把这个样本集作为训练集,进入下面的一步。

随机选择特征

在随机森林中,不计算所有特征的增益,而是从总量为M的特征向量中,随机选择m个特征,然后计算m个特征的增益,选择最优特征(属性)

随机森林投票分类

通过上面的三步走,我们可以得到一棵决策树,我们可以重复这样的过程H次,就得到了H棵决策树。然后来了一个测试样本,我们就可以用每一棵决策树都对它分类一遍,得到了H个分类结果。这时,我们可以使用简单的投票机制,或者该测试样本的最终分类结果。

优缺点

优点

  1. 在当前的很多数据集上,相对其他算法有着很大的优势,表现良好
  2. 它能够处理很高维度(feature很多)的数据,并且不用做特征选择
  3. 在训练完后,它能够给出哪些feature比较重要
  4. 在创建随机森林的时候,对generlization error使用的是无偏估计,模型泛化能力强
  5. 训练时树与树之间是相互独立的,训练速度快,容易做成并行化方法
  6. 在训练过程中,能够检测到feature间的互相影响
  7. 实现比较简单
  8. 对于不平衡的数据集来说,它可以平衡误差。
  9. 对缺失值不敏感,如果有很大一部分的特征遗失,仍可以维持准确度。

缺点

  1. 随机森林已经被证明在噪声较大的分类或回归问题上会过拟
  2. 对于有不同取值的属性的数据,取值划分较多的属性会对随机森林产生更大的影响,所以随机森林在这种数据上产出的属性权值是不可信的。

sklearn参数

1
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)

具体参数查看:
3.2.4.3.1. sklearn.ensemble.RandomForestClassifier
sklearn随机森林分类类RandomForestClassifier

应用场景

数据维度相对低(几十维),同时对准确性有较高要求时。

因为不需要很多参数调整就可以达到不错的效果,基本上不知道用什么方法的时候都可以先试一下随机森林。

-------------本文结束感谢您的阅读-------------
您的支持将是我前进的动力!