机器学习笔记25——Bagging算法之随机森林(Rondoom Forest) 算法原理以及python实现

随机森林

  • 引言
  • 1、概述
  • 2、原理
  • 3、算法
  • 4、基于sklearn实现随机森林算法
    • 4.1 随机森林分类包
    • 4.2 随机森林回归包
  • 5、小结

引言

\quad \quad 在集成学习简介中,简单的介绍了根据个体学习器学习方式不同划分的两大类集成学习方法,个体学习器间存在强依赖关系、必须串行生成的序列化方法,如Boosting;个体学习器间不存在强依赖关系、可同时生成的并行化方法,如Bagging。下面详细的说明一下Bagging 算法的进化版随机森林算法。

1、概述

\quad \quad 随机森林(Random Forest, RF)可以看成是改进的Bagging算法,是一种灵活且易于使用的机器学习算法,即便没有超参数调优,也可以在大多数情况下得到很好的结果。它也是最常用的算法之一,因为它很简易,既可用于分类也能用于回归任务。

\quad \quad Rondom Forest 顾名思义,就是用随机的方式建立一个森林,森林里面由很多的决策树组成,随机森林的每一棵决策树之间是没有关联的。在得到森林之后,当有一个新的输入样本进入的时候,就让森林中的每一棵决策树分别进行一下判断,看看这个样本应该属于哪一类(对于分类算法),然后看看哪一类被选择最多,就预测这个样本为哪一类。

2、原理

\quad \quad 随机森林通过自助法(bootstrap)重采样技术,从原始训练样本集 N \large N N 中有放回地重复随机抽样 K \large K K 个样本生成新的训练样本集合,然后根据自助样本集生成 K \large K K 个分类树组成随机森林,新数据的分类结果按分类树投票多少形成的分数而定。其实质是对决策树算法的一种改进,将多个决策树合并在一起,每棵树的建立依赖于一个独立抽取的样品,森林中的每棵树具有相同的分布,分类误差取决于每一棵树的分类能力和它们的相关性。特征选择采用随机的方法去分裂每一个节点,然后比较不同情况下产生的误差。能够检测到的内在估计误差、分类能力和相关性决定选择特征的数目。单棵树的分类能力可能很小,但在随机产生大量的决策树后,一个测试样本可以通过每一棵树的分类结果经统计后选择最可能的分类。

\quad \quad 在建立每一棵决策树的过程中,有两点需要注意采样与完全分裂

  • 首先是两个随机采样的过程,random forest对输入的数据要进行行、列的采样。对于行采样,采用有放回的方式,也就是在采样得到的样本集合中,可能有重复的样本。假设输入样本为N个,那么采样的样本也为N个。这样使得在训练的时候,每一棵树的输入样本都不是全部的样本,使得相对不容易出现over-fitting。然后进行列采样,从M个feature中,选择m个(m << M)。
  • 之后就是对采样之后的数据使用完全分裂的方式建立出决策树,这样决策树的某一个叶子节点要么是无法继续分裂的,要么里面的所有样本的都是指向的同一个分类。一般很多的决策树算法都一个重要的步骤——剪枝,但是这里不这样干,由于之前的两个随机采样的过程保证了随机性,所以就算不剪枝,也不会出现over-fitting。

​ 关于随机:
(1)训练每棵树时,从全部训练样本中选取一个子集进行训练(即bootstrap取样)。用剩余的数据进行评测,评估其误差;
(2)在每个节点,随机选取所有特征的一个子集,用来计算最佳分割方式。

3、算法

算法流程:
(1)训练总样本的个数为N,则单棵决策树从N个训练集中有放回的随机抽取n个作为此单颗树的训练样本(bootstrap有放回取样)。
(2)令训练样例的输入特征的个数为M,m远远小于M,则我们在每颗决策树的每个节点上进行分裂时,从M个输入特征里随机选择m个输入特征,然后从这m个输入特征里选择一个最好的进行分裂。m在构建决策树的过程中不会改变。
注意:要为每个节点随机选出m个特征,然后选择最好的那个特征来分裂。
注意:决策树中分裂属性的两个选择度量:信息增益和基尼指数。
(3)每棵树都一直这样分裂下去,直到该节点的所有训练样例都属于同一类,不需要剪枝。由于之前的两个随机采样的过程保证了随机性,所以就算不剪枝,也不会出现over-fitting。

结果判定:
(1)目标特征为数字类型:取t个决策树的平均值作为分类结果。
(2)目标特征为类别类型:少数服从多数,取单棵树分类结果最多的那个类别作为整个随机森林的分类结果。

预测:
  随机森林是用随机的方式建立一个森林,森林里面有很多的决策树组成,随机森林的每一棵决策树之间是没有关联的。在得到森林之后,当有一个新的输入样本进入的时候,就让森林中的每一棵决策树分别进行一下判断,看看这个样本应该属于哪一类,然后看看哪一类被选择最多,就预测这个样本为那一类。
  说明:通过bagging有放回取样后,大约36.8%的没有被采样到的数据,我们常常称之为袋外数据。这些数据没有参与训练集模型的拟合,因此可以用来检测模型的泛化能力。

4、基于sklearn实现随机森林算法

随机森林的三个主要超参数调整:

  • 节点规模

    随机森林不像决策树,每一棵树叶子节点所包含的观察样本数量可能十分少。该超参数的目标是生成树的时候尽可能保持小偏差

  • 树的数量

    在实践中选择数百棵树一般是比较好的选择

  • 预测器采样的数量

    一般来说,如果一共有 D \large D D 个预测器,那么可以在回归任务中使用 D 3 \large \tfrac{D}{3} 3D 个预测器作为采样数,在分类任务中使用 D \large \sqrt{D} D 个预测器作为抽样。

4.1 随机森林分类包

【sklearn.ensemble.RandomForestClassifier官方文档】

简单案例

from sklearn.model_selection import cross_val_score
from sklearn.datasets import make_blobs
import matplotlib.pyplot as plt
from sklearn.ensemble import RandomForestClassifier
from sklearn.ensemble import ExtraTreesClassifier
 
from sklearn.tree import DecisionTreeClassifier
 
seed = 1
X, y = make_blobs(n_samples=1000, n_features=6, centers=50, random_state=seed)
 
# 普通决策树
clf = DecisionTreeClassifier(max_depth=None, min_samples_split=2, random_state=seed)
scores = cross_val_score(clf, X, y)
print(scores.mean())
 
# 随机森林
clf = RandomForestClassifier(n_estimators=10, max_depth=None, min_samples_split=2, random_state=seed)
scores = cross_val_score(clf, X, y)
print(scores.mean())
 
# RF随机森林的变种
clf = ExtraTreesClassifier(n_estimators=10, max_depth=None, min_samples_split=2, random_state=seed)
scores = cross_val_score(clf, X, y)
print(scores.mean())

4.2 随机森林回归包

【sklearn.ensemble.RandomForestRegressor官方文档】
简单案例

from sklearn.ensemble import RandomForestRegressor
from sklearn.datasets import make_regression
X, y = make_regression(n_features=4, n_informative=2,
                       random_state=0, shuffle=False)
regr = RandomForestRegressor(max_depth=2, random_state=0)
regr.fit(X, y)

print(regr.predict([[0, 0, 0, 0]]))

5、小结

【优点】:

  • 具有极高的准确率
  • 随机性的引入,使得随机森林不容易过拟合
  • 随机性的引入,使得随机森林有很好的抗噪声能力
  • 能处理很高维度的数据,并且不用做特征选择
  • 既能处理离散型数据,也能处理连续型数据,数据集无需规范化
  • 训练速度快,可以得到变量重要性排序
  • 容易实现并行化

【缺点】:

  • 当需要推测超出范围的独立变量或非独立变量,随机森林做得并不好,此时最好使用如 MARS 那样的算法
  • 在某些噪声较大的样本集上, RF 模型容易陷入过拟合。
  • 随机森林算法在训练和预测时都比较慢
  • 如果需要区分的类别十分多,随机森林的表现并不会很好。
  • 取值划分比较多的特征容易对 RF 的决策产生更大的影响,从而影响拟合模型的效果。

参考资料:
1、《西瓜书》
2、https://blog.csdn.net/qq_38299170/article/details/103842151

你可能感兴趣的:(机器学习,#,集成学习,随机森林,集成学习)