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

【机器学习】十大算法之一 “随机森林” 随机森林算法(Random Forest, RF)是由Leo Breiman和Adele Cutler于2001年提出的一种集成学习(Ensemble Learning)算法。它是由多个决策树构成的分类器,通过对每个决策树的投票结果来确定最终的预测结果。随机森林算法可以用于分类和回归分析。在分类问题中,每个决策树的输出结果为一个类别标签,通过投票来确定样本所属的类别。在回归问题中,每个决策树的输出结果为一个连续值,取所有决策树输出结果的平均值作为最终结果。可以处理高维度数据;可以处理不平衡的数据集。 阅读详情


一、随机森林算法介绍

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

集成学习介绍:网页链接

1.1 算法核心思想

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

1.2 算法优势

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

1.3 理论基础

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

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

2.1 示例数据集

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

样本编号特征1特征2特征3类别
11230
24561
37890
42341
55670

待预测新样本为:[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−∑k=1K​pk2​,值越小表示节点越纯净
    • 信息熵: E n t r o p y ( p ) = − ∑ k = 1 K p k log ⁡ 2 p k Entropy(p) = -\sum_{k=1}^K p_k \log_2 p_k Entropy(p)=−∑k=1K​pk​log2​pk​,值越小表示不确定性越低
  • max_depth:决策树最大深度,默认None(完全生长)。限制深度可防止过拟合
  • max_features:每个节点分裂时考虑的最大特征数,取值规则:
    • ‘auto’/‘sqrt’: n _ f e a t u r e s \sqrt{n\_features} n_features ​
    • ‘log2’: log ⁡ 2 ( n _ f e a t u r e s ) \log_2(n\_features) log2​(n_features)
    • None:使用全部特征
  • bootstrap:是否使用有放回抽样,默认True。若False则使用全部样本

3.2 底层实现原理

  1. 样本抽样机制

    • Bagging抽样:对于n个样本的原始数据集,每次有放回抽取n个样本,约36.8%的样本不会被抽到(称为袋外数据,OOB)
  2. 特征随机选择

    • 子空间抽样:每个节点分裂时从随机选择的k个特征中寻找最优分裂特征,k通常为 d \sqrt{d} d ​(d为总特征数)
    • 特征重要性计算:基于Gini不纯度减少或排列重要性评估各特征对预测的贡献
  3. 并行训练实现

    • 多线程并行:利用joblib实现决策树的并行训练,默认使用全部可用CPU核心
    • 底层优化:使用Cython优化树构建过程,支持大规模数据高效训练
  4. 预测集成机制

    • 分类任务:硬投票(多数表决),少数服从多数
    • 回归任务:简单平均各树的预测结果

3.3 特征重要性评估

# 训练模型后获取特征重要性
rfc = RandomForestClassifier()
rfc.fit(X, y)
print(rfc.feature_importances_)
  • 基于基尼不纯度减少计算,反映特征对节点分裂的贡献程度
  • 取值范围[0,1],总和为1

四、代码实现示例

4.1 完整代码实现

import numpy as np
import matplotlib.pyplot as plt
from sklearn.ensemble import RandomForestClassifier
from sklearn.tree import plot_tree

# =============================================
# 1. 定义数据集(5个样本,3个特征)
# =============================================
X = np.array([
    [1, 2, 3],  # 样本1
    [4, 5, 6],  # 样本2
    [7, 8, 9],  # 样本3
    [2, 3, 4],  # 样本4
    [5, 6, 7]   # 样本5
])

y = np.array([0, 1, 0, 1, 0])  # 对应类别标签

# 新样本用于预测
new_sample = np.array([[3, 4, 5]])

# =============================================
# 2. 构建随机森林模型
# =============================================
rfc = RandomForestClassifier(
    n_estimators=3,     # 使用3棵决策树
    max_features=2,     # 每次分裂时随机选择2个特征
    random_state=44,    # 固定随机种子以保证结果可复现
    max_depth=1         # 设置最大深度为1,与手动构造一致
)
rfc.fit(X, y)

# =============================================
# 3. 预测新样本
# =============================================
prediction = rfc.predict(new_sample)
print("新样本[3,4,5]的预测类别为:", prediction[0])

# =============================================
# 4. 可视化每棵树的结构
# =============================================
estimators = rfc.estimators_  # 获取所有决策树

for i, tree in enumerate(estimators):
    plt.figure(figsize=(8, 4))
    plt.title(f"随机森林中的第 {i+1} 棵决策树", fontsize=14)
    plot_tree(tree,
              feature_names=[f'Feature{j+1}' for j in range(X.shape[1])],
              class_names=['Class 0', 'Class 1'],
              filled=True,
              fontsize=10,
              rounded=True)
    plt.tight_layout()
    plt.show()


4.2 代码执行解析

  1. 数据准备:定义5个样本的特征矩阵X和类别向量y
  2. 模型初始化:设置3棵决策树,每棵树考虑2个特征
  3. 模型训练:底层自动完成3棵树的并行构建
    • 每棵树独立进行样本抽样和特征选择
    • 每棵树使用CART算法构建决策树
  4. 预测过程:
    • 新样本分别输入3棵树
    • 收集各树预测结果并投票
  5. 结果输出:
    • 打印最终预测类别
    • 输出各特征重要性评分

4.3运行结果

新样本[3,4,5]的预测类别为: 1

分类报告(训练集):
              precision    recall  f1-score   support

           0       0.67      0.67      0.67         3
           1       0.50      0.50      0.50         2

    accuracy                           0.60         5
   macro avg       0.58      0.58      0.58         5
weighted avg       0.60      0.60      0.60         5

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

五、总结与扩展

随机森林作为Bagging思想的典型代表,通过“分散决策+集体智慧”的策略有效提升了模型性能,在工业界和学术界均有广泛应用。其核心优势在于:

  1. 抗干扰能力:通过多树投票降低单一模型的预测偏差
  2. 自适应特性:自动处理特征交互,无需复杂特征工程
  3. 可扩展性:支持大规模数据并行训练,适合分布式计算

对于实际应用,建议:

  • 分类问题优先使用随机森林作为基线模型
  • 通过网格搜索优化n_estimators和max_features参数
  • 利用特征重要性进行特征筛选和解释
  • 对于极高维数据可考虑结合PCA降维

随机森林的变种如Extra Trees(极端随机树)通过进一步随机化分裂规则,在牺牲少许偏差的前提下大幅降低方差,可作为进阶选择。

随机森林算法简介 今天在练习 Kaggle 的项目时,发现网上很多博主都选择用 RandomForest (随机森林)算法训练模型,虽然最后参照他们的写法我也写出来了,但是没有很明白其中的原理,在此打算深入了解一下这个算法。 1. 什么是随机森林 随机森林是通过集成学习的思想将多棵树集成的一种算法,它的基本单元是决策树,而它的本质属于机器学习的一大分支——集成学习(Ensemble Learning)方法。 在集成学习中,主要分为 bagging 算法 和 boosting 算法,而这里的随机森林则主要运用了 bagging 阅读详情

相关推荐

机器学习5—分类算法之随机森林(Random Forest)

随机森林(Random Forest)是Bagging(一种并行式的集成学习方法)的一个拓展体,它的基学习器固定为决策树,多棵树也就组成了森林,而“随机”则在于选择划分属性的随机,随机森林在训练基学习器时,也采用有放回采样的方式添加样本扰动,同时它还引入了一种属性扰动,即在基决策树的训练过程中,在选择划分属性时,Random Forest先从候选属性集中随机挑选出一个包含K个属性的子集,再从这个子集中选择最优划分属性,一般推荐K=log2(d)。...

ex_6450的博客 11万+

随机森林算法

1:数据集种类(目标变量)越多越复杂熵越大,所以原始数据的熵最大 2:熵公式: n代表X的n种不同的离散取值,pi代表X取值为i的概率,log以2或e为底的对数 3:信息增益(简单处理):原始数据熵-目前特征的熵 ...

重剑无锋博客 2万+

Bagging算法

集成学习有两个流派,一个是boosting派系,它的特点是各个弱学习器之间有依赖关系。另一种是bagging流派,它的特点是各个弱学习器之间没有依赖关系,可以并行拟合。 Bagging算法(英语:Bootstrap aggregating,引导聚集算法),又称装袋算法,是机器学习领域的一种团体学习算法。最初由Leo Breiman于1996年提出。Bagging算法可与其他分类、回归算法结合,提高...

qq_41870157的博客 2万+

【机器学习】11.十大算法之一随机森林算法原理讲解

随机森林是一种集成学习方法,它通过构建多个决策树来进行分类或回归问题。这种方法的核心思想是利用多个决策树的预测结果,通过投票或平均的方式来提高整体模型的准确性和鲁棒性。随机森林中的“随机”体现在两个方面:首先,每棵树在训练时,从原始数据集中随机选择一部分数据点作为训练集;其次,在每棵树的每个分裂节点上,只考虑一部分特征,而不是所有特征。这种方法的优点在于它能够处理高维数据,并且对特征的缺失值和异常值具有较好的容忍性。

weixin_50804299的博客 3万+

集成算法(Bagging,随机森林)

引言(关于集成学习) 集成算法包括很多种包括Bagging,随机森林,Boosting 以及其他更加高效的集成算法。在这篇博客上只介绍Bagging算法及随机森林,Boosting提升算法及其他高效的算法在下一篇详细讲解。 集成算法就是通过构建多个学习器来完成学习任务,是由多个基学习器或者是个体学习器来完成的。它可以是由决策树,神经网络等多种基学习算法组成。就像是投票表决答案一样,多数人的参与总会...

丿回到火星去 1万+

随机森林算法的基本核心思想

摘要:随机森林(Random Forest,简称RF)是Bagging技巧的一个扩展变体。RF在以决策树为基学习器构建Bagging集成的基础上,进一步字决策树的训练过程中一如了随机属性选择。随机森林算法在与其他机器学习算法的比较中,往往在故障诊断有卓越表现,同时在可解释性上有很优秀的表现。 前言:本文对随机森林算法进行总结概括,以CART决策树为背景,构建随机森林,并且解析OOB,将随机森林算法...

weixin_37773108的博客 4950

【机器学习】Bagging和随机森林

Bagging基本流程:通过上述自助采样,采出T个含m个训练样本的采样集,然后基于每个采样集训练出一个基学习器,在将这些基学习器进行组合。在对预测输出进行结合的时候,Bagging通常对分类任务使用简单投票法,对回归任务进行简单的平均法。但是如果投票个数一致,则最简单的做法是随机选择一个类别,当然也可以进一步考察学习器投票的置信度来确定最终的分类。基本分类器可以是决策树,逻辑回归等基分类器。对于稳定性不好的分类器很实用,通过多数投票,减小了泛化误差,而对于稳定的分类器,集成效果并不明显。1.4。

2301_76820214的博客 2375

bagging和boosting的思想简述各自的代表模型原理

在机器学习的集成学习中,有两种系列算法boosting,bagging。现在讲述一下二者的思想简述各自的代表模型原理。 一.boosting 1. 思想 其主要思想是将弱分类器组装成一个强分类器。在PAC(概率近似正确)学习框架下,则一定可以将弱分类器组装成一个强分类器。 2.代表模型及其原理 AdaBoost通过加权多数表决的方式,即增大错误率小的分类器的权值,同时减小错误率较大的分类器的权值。...

weixin_45834085的博客 1810

Bagging与随机森林

下图是基于树的算法的发展历程 1、Bagging Bagging [Breiman, 1996a] 是并行式集成学习方法最著名的代表. 1.1、Bagging原理 bagging算法:bagging的个体弱学习器的训练集是通过随机采样得到的。通过T次的随机采样,我们就可以得到T个采样集,对于这T个采样集,我们可以分别独立的训练出T个弱学习器,再对这T个弱学习器通过集合策略来得到最终的强学习器。 随机采样(bootsrap)就是从我们的训练集里面采集固定个数的样本,但是每采集一个样本后,都将样本放回。也

cengjing12的博客 5282

机器学习算法三:bagging及随机森林算法

在学习随机森林算法之前,首先需要对一些基础知识有一些了解。 1 信息、熵,信息增益及决策树 在学习任何跟决策树有关的算法时,都会接触到题目中的这几个概念,理解这几个概念有助于以后的学习,废话不多说。 1.1 信息 信息这个概念真的极其的抽象,看了很多博主的文章感觉还是理解不了,再看看香农的话,信息是用来消除随机不确定性的东西,更让人不知所云。 要理解信息的概念,就必须了解信息含量...

harrycare的博客 2358

Bagging与随机森林详解:原理、实现与实战

本文系统介绍了集成学习中的Bagging框架及随机森林算法。Bagging通过自助采样生成多个训练集,训练差异化的基学习器后进行平权投票决策。随机森林作为Bagging的典型实现,通过样本和特征双重随机采样构建决策树群,有效降低方差防止过拟合。文章详细解析了算法原理、Sklearn实现参数,并以泰坦尼克号生存预测为例进行实战演示,对比了单一决策树与随机森林的性能差异,展示了超参数调优过程。随机森林具有处理高维数据、评估特征重要性等优势,适用于分类、回归等多种机器学习任务。

学习成长日记 982

随机森林--Bagging算法的典型代表

一:Bootstrap方法简介 简称自助法,是一种有放回的抽样方法,他是非参数统计中一种重要的方法,通过估计样本方差,进而对总体的分布特性进行统计推断。首先,Bootstrap通过重抽样(通过boostrap 采样法,初始训练集中约有63.2%的样本出现在采样集中),避免了Cross-Validation造成的样本减少问题,其次,Bootstrap也可以创造数据的随机性**。Bootstrap是一种有放回的重复抽样方法,抽样策略就是简单的随机抽样。** 采样步骤: 1,采用有放回的抽样的方式从原始样本中抽取

qq_39691463的博客 3117

机器学习强基计划10-3:详解Bagging与随机森林算法(附Python实现)

并行集成学习通过并行地训练多个基础模型,并将它们的预测结果进行集成,以提高整体的学习性能和泛化能力。本文介绍Bagging框架与随机森林算法,并提供python实现加深理解

FRIGIDWINTER的博客 2942

机器学习(十八):Bagging和随机森林

本文深入探讨了集成学习及其在随机森林中的应用。对集成学习的基本概念、优势以及为何它有效做了阐述。随机森林,作为一个集成学习方法,与Bagging有紧密联系,其核心思想和实现过程均在文中进行了说明。还详细展示了如何在Sklearn中利用随机森林进行建模,并对其关键参数进行了解读,希望能帮助大家更有效地运用随机森林进行数据建模。

无敌小怪兽_Zz的博客 2673

直流电机双闭环调速系统MATLAB仿真

Chopper-Fed DC Motor Drive This example shows a Chopper-Fed DC Motor Drive. Description The DC motor is fed by the DC source through a chopper which consists of GTO thyristor and free-wheeling diode ...

飞行动力的博客 2万+

Aix升级和安装ssh配置过程

Aix升级和安装ssh配置过程Aix升级和安装ssh配置过程配置前背景配置步骤 Aix升级和安装ssh配置过程 部门IBM小型机的Aix操作系统需要进行ssh补丁修复,修复其实就是ssh版本你的升级,对升级的过程和中途遇到的问题做了记录如下。 配置前背景 操作系统: gdboss2/>uname -u //操作系统的Aix5.3 IBM,020693E5P gdboss2/&gt...

阿阿阿唱的博客 2990

随机森林—bagging算法的代表作

随机森林 对于随机森林的理解看这篇博文 另外周志华《机器学习》8.3节对bagging和随机森林进行了比较好的总结。随机森林关键点: bagging方法,用重复采样的方式产生n个不同的样本集合,然后基于基分类器并行训练出n个模型,为了是降低模型的方差。 在bagging基础上,随机森林用决策树(不剪枝)做基分类器,对决策树的特征进行随机的采样,进一步的提高了模型抗过拟合能力。 随基分类器个

You will~My hand 2020

MATLAB Appdesigner开发独立桌面App全流程(一):以打开串口功能为例介绍Appdesigner的基本使用

本文详细介绍了Appdesigner的基本使用,以串口功能为例介绍按钮回调函数的实现以及控件之间通信的问题

Zhuwany的博客 3万+

机器学习算法之bagging与随机森林算法

前言:在集成学习算法中,我们讲到了集成学习主要有两个流派,一个是boosting流派,它的特点是各个弱学习器之间有依赖关系。另一种是bagging流派,它的特点是各个弱学习器之间没有依赖关系,可以并行拟合。本文就对集成学习中Bagging与随机森林算法做一个总结。 随机森林是集成学习中可以和梯度提升树GBDT分庭抗礼的算法,尤其是它可以很方便的并行训练,在如今大数据大样本的的时代很有诱惑力。 1、bagging的原理 Bagging:基于数据随机重抽样的分类器构建方法。从训练集从进行子抽样组成每个基模型所需

Maple__Boy 1922

Abaqus 2023 保姆级安装避坑指南:从环境变量到许可证配置,一次搞定

本文提供Abaqus 2023的详细安装指南,涵盖环境变量设置、许可证配置等关键步骤,帮助用户避开常见安装陷阱。通过系统环境检查、目录结构规划、许可证服务器安装及Java环境配置等实用技巧,确保顺利完成安装并优化软件性能。

weixin_42524276的博客 425

【图像超分】论文复现:新手入门必备!Pytorch实现SRGAN!手把手详细教程!代码注释详尽!可用于训练自己的数据集!实时验证模型性能!绘制PSNR曲线图!附训练好的各放大倍数的模型权重文件!

【图像超分】论文精读:SRResNet/SRGAN【图像超分】论文复现:万字长文!Pytorch实现SRResNet代码修改无报错!踩坑全记录!适合各种深度学习新手!帮助你少走弯路!附修改后的代码和PSNR最优的模型权重文件!请配合上述论文精读文章使用,效果更佳!与原论文描述不一样的实现部分,也即可以修改的部分数据集使用:论文中是ImageNet随机选35000张图像,本文是VOC2012数据集16700张图像。数据集预处理:裁剪大小不同,论文是96×96,本文是88×88。

主要更新底层视觉(去噪、超分等)相关的科研内容,形式为【论文精读】+【论文复现】 6853

详解集成学习:Bagging与Boosting核心原理及经典代表

弱学习器(Weak Learner)是指性能略优于随机猜测的基础模型(如单层决策树、简单逻辑回归等),单个弱学习器的预测精度有限,甚至可能存在过拟合或欠拟合问题。集成学习通过“组合多个弱学习器”,利用弱学习器之间的差异性,抵消单个模型的偏差和方差,最终形成性能更优的强学习器。集成学习的核心关键在于两点:一是“弱学习器的多样性”(确保不同弱学习器的预测结果存在差异,避免同质化);二是“合理的组合策略”(通过投票、加权等方式,整合多个弱学习器的预测结果,得到最终输出)。

lrh122800的博客 1726

基于STFT和卷积神经网络的时序数据分类

我们提供了相应的代码和数据,读者可以直接运行并尝试在自己的数据集上进行分类实验。在本文中,我们将介绍一种基于短时傅里叶变换(STFT)和卷积神经网络(CNN)的时序数据分类方法。我们将提供可直接运行的代码和数据,以帮助读者理解和实现这一方法。STFT可以提取信号的频谱信息,有助于捕捉时序数据中的关键特征。在这个例子中,我们将使用一个简化的手势识别数据集作为示例。在这段代码中,我们使用Adam优化器和稀疏分类交叉熵损失函数进行模型的编译。然后,我们使用训练集进行模型的训练,同时使用测试集进行模型性能的验证。

CodeWOW的博客 694
上一篇: RNN中的注意力机制代码实现
下一篇: 利用英译法案例演示RNN中的注意力机制(基于PyTorch)
.30-06Springfield
博客等级 码龄7年 321粉丝 38原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值