目录
老饼讲解:一步一步上手学习

【模型】一篇入门之-随机森林(RF)原理

作者 : 老饼 发表日期 : 2025-12-16 23:49:48 更新日期 : 2026-05-10 19:36:22
老饼讲解-简单易懂,干货满满,爽过嗦螺!


好了,今天我们来说说随机森林模型(Random Forest),在xgboost这类模型没出来之前,随机森林也曾是一个热门的模型,只是现在用得越来越少了,但我们还是可以来了解了解一下它,下面我们就来说说随机森林模型的原理,包括模型的表达式、模型的训练方法,以及具体的代码实现例子。

一、随机森林模型

1.1. 随机森林-初识

随机森林模型是什么呢?其实简单来说,它就是训练多棵决策树模型,然后再用它们一起来共同决策,由于它由多棵决策树组成,所以也就称为森林了:

随机森林模型

如图所示,随机森林就是由多棵决策树,共同来预测得到结果,用数学来表述就是:

其中,代表第i棵决策树对样本给出的概率

1.2. 随机森林-训练

好了,上面我们已经知道随机森林中的"森林"是什么意思了,那么它的"随机"又是什么意思呢?这就不得不提随机森林的目的了。我们知道,决策树模型是一个很不错的模型,它只要不断的分割,它的精度可以达到精度上限,但是这样很容易就会过拟合。所以呢,随机森林就想了一个办法,它不要"精英决策树",而是用一群"弱鸡决策树"来共同决策,使得模型避免过拟合。

共同集成决策

由于每棵弱决策树都不会过拟合,它们叠加之后也不会过拟合,然后再通过多棵共同决策,从而使得精度提高,这就像我们评分一样,用多个老师来评分,即使每个老题都只是大概评一下分,最终的分数也会很准确。

好了,随机森林训练每棵弱树决策树时,如下训练:

1. 随机样本

使用boostrap抽样来使样本差异化,令每次训练的模型侧重点不一样。
boostrap抽样指的是放回式抽样n次(n是整体样本个数) ,例如整体样本有n个,然后每次都在整体样本中抽样,抽n次得到n个样本。

2. 随机变量

每次只随机抽取部分变量来训练决策树,削弱决策树的拟合能力
这样既可以使每棵树使用的变量不一样,同时又能限制树的深度

1.3. 随机森林-训练流程

随机森林的具体训练流程如下:

随机森林的算法流程

1.样本抽取:放回式抽取n(样本个数)次样本

2.变量抽取:随机抽取m个变量,作为本次决策树的变量

3.训练弱树:用抽取的样本、变量训练决策树

一直训练K棵树为止

二、随机林林-代码实现

好了,上面说了随机森林是怎么一回事了,那下面我们就拉点数据出来,玩一玩随机森林吧。

这里我们以iris数据为例,用随机森林来预测iris数据的类别,具体代码如下:

"""
本代码用于展示如何使用sklearn实现随机森林模型
本代码来自:《老饼讲解-机器学习》 www.bbblearn.com
"""
from sklearn.datasets import load_iris
from sklearn.ensemble import RandomForestClassifier
import numpy as np
np.random.seed(888)                                                          # 为方便复现,设定随机种子

iris = load_iris()                                                           # 加载iris数据
X    = iris.data                                                             # 样本的X
y    = iris.target                                                           # 样本的y
clf = RandomForestClassifier(max_features=2,n_estimators=100) # 初始化随机森林模型
clf.fit(X, y)                                                                # 训练随机森林模型
pred_prob = clf.predict_proba(X)                                             # 预测样本的概率
pred_c    = clf.predict(X)                                                   # 预测样本的类别
print("\n----前5个样本的真实类别:----")                                      # 打印
print(iris.target[0:5])                                                      # 打印真实类别
print("\n----前5个样本的预测结果:----")                                      # 打印
print(pred_c[0:5])                                                           # 打印预测类别

代码运行结果如下:

随机森林的预测结果

可以看到,样本的类别预测基本都是正确的。

好了,大概可以看到,在代码中我们设置了max_featuresn_estimators两个参数。

max_features是特征最大个数,它一般远小于总特征个数M,例如设为 ​。

n_estimators是森林规模数,也就是决策树棵数,一般设为100,因为太小会导致模型准确度不够,太大又会导致模型过于复杂。

总结

这节我们又学习了随机森林模型,它同时训练多个弱决策树模型,然后共同预测,这种集成方法也称为Bagging集成,这样做的好处是使得模型泛化能力更好、更加稳定。而在使用时,就要注意设置好特征最大个数、森林规模数,这是随机森林两个比较重要的参数。



图标 评论
添加评论