泽兴芝士网

一站式 IT 编程学习资源平台

用实例的方式吃透随机森林算法原理

随机森林属于集成学习Bagging的典型算法,其弱学习器为决策树算法。如下图所示。

随机森林会在原始数据集中随机抽样,构成n个不同的样本数据集,然后根据这些数据集搭建n个不同的决策树模型。最后,根据这些决策树模型的平均值(针对回归模型)或者投票情况(针对分类模型)来获取最终结果。

随机森林的“随机”是指数据随机采样以及特征随机采样,“森林”则是指利用多棵自由生长的决策树组成一片“森林”。 “随机”使它具有抗过拟合能力,“森林”使它更加精准。

随机森林的算法可以概括为如下几个步骤:

有放回的抽样方法(bootstrapping)从原始数据集中选取样本作为一个训练集。

用抽样得到的训练集生成一棵决策树。在生成树的每一个结点时:

①随机不重复地选择k个特征,一般地k=√M,其中M为特征变量的数目。

②利用这k个特征分别对样本集进行划分,找到最佳的划分特征,可用基尼系数、增益率、信息增益等判别。

③重复步骤1到步骤2共n次,n即为随机森林中决策树的个数。

④用训练得到的随机森林对测试样本进行预测,并根据这些决策树模型的平均值(针对回归模型)或者投票情况(针对分类模型)来获取最终结果。

对以上步骤举实例说明如下:

预测鸢尾花种类(分类问题)

背景

假设我们有一个鸢尾花数据集,包含 150 个样本,每个样本有 4 个特征(花萼长度、花萼宽度、花瓣长度、花瓣宽度),目标是根据特征预测鸢尾花的种类(山鸢尾、变色鸢尾、维吉尼亚鸢尾)。


步骤 1-3:生成随机森林中的单棵决策树

假设特征数 `M=4`,随机森林参数 `n=3`(生成 3 棵决策树),每棵树的特征选择数 `k=√4=2`。

(1)以第一棵树的生成为例:

①随机选择特征:在根节点,随机选择 2 个特征(如花瓣长度、花瓣宽度)。

②寻找最佳划分:用这两个特征对样本集进行划分,计算基尼系数。发现“花瓣长度 ≤ 2.45cm”能将样本完美分为山鸢尾和其他两类(基尼系数最小),选择此特征作为根节点的划分条件。

③递归生成子树:在子节点重复步骤 1-2,继续随机选择剩余特征(如花萼长度、花萼宽度)进行划分,直到叶子节点纯度达标。

(2)其他两棵树

①第二棵树可能随机选择“花萼长度”和“花瓣宽度”作为初始特征,划分条件为“花瓣宽度 ≤ 1.75 cm”。

②第三棵树可能随机选择“花萼宽度”和“花瓣长度”,划分条件为“花瓣长度 ≤ 4.95 cm”。

步骤 4:用随机森林预测测试样本

假设测试样本的特征为:

`花萼长度=5.1cm, 花萼宽度=3.5cm, 花瓣长度=1.4cm, 花瓣宽度=0.2cm`

每棵树的预测结果:

①第一棵树:根据“花瓣长度 ≤ 2.45 cm”判定为山鸢尾。

② 第二棵树:根据“花瓣宽度 ≤ 1.75 cm”判定为山鸢尾。

③第三棵树:根据“花瓣长度 ≤ 4.95 cm”判定为山鸢尾

最终结果:3 棵树全部投票给“山鸢尾”,最终预测结果为山鸢尾。


从上述随机森林的算法流程中可以看出,为了保证模型的泛化能力(或者说通用能力),随机森林构建每棵树时会遵循“数据随机”和“特征随机”这两个基本原则。

“数据随机”是指每棵树的训练集都是不同的。每个训练集里面会包含重复的训练样本,对于一个含有异常值的数据集来说,这种采样方式可以令大多数的树模型得到不包含或者只包含少量异常点的数据,再经过多个学习器最终的“投票”或者“平均”,可以使得随机森林对异常值不敏感,有很强的抗干扰能力。

“特征随机”是指如果每个样本的特征变量数目为M,指定一个常数k<M,随机地从M个特征中选取k个特征,一般地可以选取特征的个数k为√M。特征随机可以说是随机森林自带的特征选择的功能,由于实际数据中会有很多多余甚至无关特征,这些特征会严重影响模型效果,随机森林中让每棵决策树只选择少量的特征进行学习,最后再合成他们的学习成果,因此随机森林能处理高维数据,并且无需做特征选择。

与单独的决策树算法相比,随机森林由于集成了多棵决策树,其预测结果会更准确,且不容易造成过拟合现象,泛化能力更强。

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言