【机器学习】机器学习的基本分类-监督学习-随机森林(Random Forest)

随机森林是一种基于集成学习(Ensemble Learning)思想的算法,由多个决策树构成。它通过结合多棵决策树的预测结果来提升模型的泛化能力和准确性,同时减少过拟合的风险。


1. 随机森林的核心思想

  1. 多样性
    • 随机森林通过引入随机性,使每棵树有所不同,从而避免单一模型的过拟合问题。
  2. 集成决策
    • 对于分类问题,随机森林通过多数投票法确定最终类别。
    • 对于回归问题,随机森林通过平均法预测最终结果。

随机森林的"随机性"体现在两个方面:

  • 数据随机性 (Bagging 方法):
    • 每棵树训练时使用一个由原始训练集通过**自助采样法(Bootstrap Sampling)**生成的样本子集。
    • 每个样本子集中可能包含重复的数据,也可能遗漏一些数据(袋外样本,Out-Of-Bag)。
  • 特征随机性
    • 每次节点分裂时,随机选择特征的子集作为候选,进一步增加模型的多样性。

2. 随机森林的构建过程

(1) 构建步骤
  1. 输入
    • 数据集 D。
    • 树的数量 T。
    • 每次分裂时的随机特征数量 m。
  2. 训练过程
    • 第 1 步:为每棵树随机采样一个样本子集(Bootstrap)。
    • 第 2 步:从所有特征中随机选择 m 个候选特征。
    • 第 3 步:使用候选特征按 CART 算法构造一棵决策树。
    • 第 4 步:重复以上步骤 T 次,构建 T 棵树。
  3. 预测
    • 分类问题:采用多数投票。
    • 回归问题:取均值。

(2) 特征子集数量选择
  • 对于分类问题,推荐选择 ,其中 M 是特征总数。
  • 对于回归问题,推荐选择

3. 随机森林的袋外估计(OOB)

随机森林中的每棵树仅使用部分训练数据,而剩余的数据称为袋外样本(Out-of-Bag Samples)。袋外样本可以用来:

  1. 估计模型性能:袋外样本作为验证集评估模型的预测准确性。
  2. 避免独立验证集:节约数据资源。

袋外误差(OOB Error):

其中:

  • N:总样本数。
  • L:损失函数(如分类错误率)。

4. 随机森林的优缺点

优点
  1. 高精度:通过集成学习减少单一决策树的误差。
  2. 抗过拟合:引入随机性和平均化策略,有效避免过拟合。
  3. 特征重要性评估:能够评估每个特征对模型的重要性。
  4. 袋外估计:无需额外划分验证集即可估计模型性能。
  5. 鲁棒性:对异常值和噪声数据不敏感。
缺点
  1. 计算复杂度高:训练过程需要构建大量决策树,计算开销大。
  2. 解释性较差:相比单一决策树,随机森林的结果较难解释。
  3. 内存占用大:需要存储所有决策树,特别是特征数量较多时。

5. 随机森林的应用场景

  1. 分类问题:如图片分类、文本分类、金融欺诈检测。
  2. 回归问题:如房价预测、销量预测。
  3. 特征选择:通过计算特征重要性,筛选关键特征。
  4. 异常检测:分析样本的异常程度。

6. 随机森林的特征重要性

随机森林可以评估每个特征对目标变量的重要性,通过两种方法:

  1. 基于分裂点的累计贡献
    • 计算每个特征作为分裂点时,对目标变量的贡献。
    • 累加所有树上的贡献值。
  2. 基于袋外误差
    • 随机打乱某一特征后,计算袋外误差的变化量。
    • 袋外误差增加越多,说明该特征越重要。

7. 随机森林的代码实现(分类问题)

以下是一个简单的 Python 实现:

python 复制代码
from sklearn.datasets import load_iris
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score

# 加载数据集
data = load_iris()
X = data.data
y = data.target

# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# 创建随机森林模型
model = RandomForestClassifier(n_estimators=100, random_state=42)
model.fit(X_train, y_train)

# 预测
y_pred = model.predict(X_test)

# 计算准确率
accuracy = accuracy_score(y_test, y_pred)
print("分类准确率:", accuracy)

# 特征重要性
importances = model.feature_importances_
for i, importance in enumerate(importances):
    print(f"特征 {data.feature_names[i]} 的重要性: {importance:.4f}")

输出结果

bash 复制代码
分类准确率: 1.0
特征 sepal length (cm) 的重要性: 0.1041
特征 sepal width (cm) 的重要性: 0.0446
特征 petal length (cm) 的重要性: 0.4173
特征 petal width (cm) 的重要性: 0.4340

8. 随机森林的扩展

(1) ExtraTrees(极端随机森林)
  • 在每个节点分裂时,随机选择特征和分裂阈值(而不是最优阈值)。
  • 增加随机性,降低过拟合。
(2) 随机森林 + 特征选择
  • 使用随机森林评估特征重要性后,筛选最重要的特征进行建模。

9. 随机森林与其他集成学习方法的对比

方法 随机森林 梯度提升树(GBDT)
模型类型 并行训练 顺序训练
特征选择 随机选取特征 每次迭代关注所有特征
参数调节 较少(如树数、深度) 较多(如学习率、树数)
性能 快速,抗过拟合 精度高,但较慢

随机森林是一种性能稳定、应用广泛的模型,尤其适合中小规模数据的分类和回归任务。

相关推荐
进阶小白猿21 分钟前
Java技术八股学习Day36
学习
wearegogog12344 分钟前
基于MATLAB的CNN图像分类算法实现
matlab·分类·cnn
Niuguangshuo1 小时前
深入解析Stable Diffusion基石——潜在扩散模型(LDMs)
人工智能·计算机视觉·stable diffusion
迈火1 小时前
SD - Latent - Interposer:解锁Stable Diffusion潜在空间的创意工具
人工智能·gpt·计算机视觉·stable diffusion·aigc·语音识别·midjourney
wfeqhfxz25887821 小时前
YOLO13-C3k2-GhostDynamicConv烟雾检测算法实现与优化
人工智能·算法·计算机视觉
芝士爱知识a1 小时前
2026年AI面试软件推荐
人工智能·面试·职场和发展·大模型·ai教育·考公·智蛙面试
Li emily1 小时前
解决港股实时行情数据 API 接入难题
人工智能·python·fastapi
Aaron15881 小时前
基于RFSOC的数字射频存储技术应用分析
c语言·人工智能·驱动开发·算法·fpga开发·硬件工程·信号处理
J_Xiong01172 小时前
【Agents篇】04:Agent 的推理能力——思维链与自我反思
人工智能·ai agent·推理
星爷AG I2 小时前
9-26 主动视觉(AGI基础理论)
人工智能·计算机视觉·agi