随机森林算法详解:Bagging思想的代表算法


一、随机森林算法介绍

随机森林是集成学习领域中基于Bagging(Bootstrap Aggregating)思想的经典算法,其核心在于通过构建多个决策树弱学习器,利用“群体智慧”提升模型的泛化能力和鲁棒性。与传统单一决策树相比,随机森林通过双重随机化机制(样本抽样随机化和特征选择随机化)有效降低了模型方差,避免过拟合问题。

集成学习介绍网页链接

1.1 算法核心思想

  • Bagging集成框架:通过有放回抽样(Bootstrap)生成多个不同的训练子集,每个子集训练一棵决策树,最终通过投票机制整合结果
  • 双重随机化
    • 样本层面:每次从原始数据集有放回抽取约63.2%的样本构成新训练集
    • 特征层面:每个节点分裂时仅从随机选择的k个特征中选择最优分裂特征
  • 决策树基学习器:默认使用CART(分类与回归树)作为弱学习器,不进行剪枝操作

1.2 算法优势

  • 抗噪声能力强:通过多棵树投票抵消单一树的预测偏差
  • 处理高维数据高效:自动筛选重要特征,无需复杂特征工程
  • 可解释性:可通过特征重要性评估理解各特征对预测的贡献
  • 并行计算友好:各决策树可独立训练,适合大规模数据处理

1.3 理论基础

  • 方差-偏差分解:通过增加模型多样性降低方差,保持偏差稳定
  • 大数定律:随着树的数量增加,集成模型的预测精度趋近于理论最优值
  • 多样性-准确性权衡:通过控制抽样和特征选择的随机性平衡模型多样性与一致性

二、随机森林算法计算流程示例

2.1 示例数据集

假设我们有一个二分类问题,包含5个样本,每个样本有3个特征,数据集如下:

样本编号 特征1 特征2 特征3 类别
1 1 2 3 0
2 4 5 6 1
3 7 8 9 0
4 2 3 4 1
5 5 6 7 0

待预测新样本为:[3, 4, 5],我们将构建3棵决策树(n_estimators=3),每棵树随机选取2个特征(max_features=2)。

决策树介绍网页链接

2.2 决策树构建过程

决策树1构建

  1. 样本抽样:有放回抽取5个样本,结果为[1, 2, 2, 4, 5](样本2被抽取两次,样本3未被抽取)
  2. 特征选择:随机选取特征1和特征2
  3. 训练过程
    • 计算特征1和特征2的分裂增益,假设最优分裂点为特征1=3
    • 分裂规则:若特征1 < 3 分类为0;否则分类为1
  4. 树结构
    在这里插入图片描述

决策树2构建

  1. 样本抽样:有放回抽取5个样本,结果为[1, 3, 3, 4, 5](样本3被抽取两次,样本2未被抽取)
  2. 特征选择:随机选取特征2和特征3
  3. 训练过程
    • 计算特征2和特征3的分裂增益,最优分裂点为特征2=5
    • 分裂规则:若特征2 < 5 分类为0;否则分类为1
  4. 树结构
    在这里插入图片描述

决策树3构建

  1. 样本抽样:有放回抽取5个样本,结果为[2, 2, 3, 4, 5](样本2被抽取两次)
  2. 特征选择:随机选取特征1和特征3
  3. 训练过程
    • 计算特征1和特征3的分裂增益,最优分裂点为特征3=6
    • 分裂规则:若特征3 < 6 分类为0;否则分类为1
  4. 树结构
    在这里插入图片描述

2.3 新样本预测流程

  1. 决策树1预测
    • 特征1=3,不满足特征1 < 3 预测为1
  2. 决策树2预测
    • 特征2=4 < 5 预测为0
  3. 决策树3预测
    • 特征3=5 < 6 预测为0
  4. 投票结果:1票支持类别1,2票支持类别0 最终预测为0

三、sklearn中随机森林算法的API与实现原理

3.1 核心API详解(sklearn.ensemble.RandomForestClassifier)

class sklearn.ensemble.RandomForestClassifier(
    n_estimators=100, *, 
    criterion='gini', 
    max_depth=None,
    max_features='auto',
    bootstrap=True,
    random_state=None,
    ...
)

关键参数解析:

  • n_estimators:决策树数量,默认100。增加数量可提高精度,但会增加计算开销
  • criterion:节点分裂准则,可选’gini’(基尼系数)或’entropy’(信息熵),默认’gini’
    • 基尼系数: G i n i ( p ) = 1 − ∑ k = 1 K p k 2 Gini(p) = 1 - \sum_{k=1}^K p_k^2 Gini(p)=1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值