【机器学习基础】机器学习入门核心算法:随机森林(Random Forest)

article/2025/8/28 1:00:57

在这里插入图片描述

机器学习入门核心算法:随机森林(Random Forest)

    • 1. 算法逻辑
    • 2. 算法原理与数学推导
        • 2.1 核心组件
        • 2.2 数学推导
        • 2.3 OOB(Out-of-Bag)误差
    • 3. 模型评估
        • 评估指标
        • 特征重要性可视化
    • 4. 应用案例
        • 4.1 医疗诊断
        • 4.2 金融风控
        • 4.3 遥感图像分类
    • 5. 面试题及答案
    • 6. 优缺点分析
        • **优点**:
        • **缺点**:
    • 7. 数学推导示例(基尼指数)

1. 算法逻辑

随机森林是一种集成学习算法,通过构建多棵决策树并组合其预测结果来提高模型性能。核心逻辑包含两个关键概念:

  1. Bagging(自助聚集):通过有放回抽样生成多个训练子集
  2. 特征随机选择:每棵树分裂时仅考虑随机子集的特征
graph LRA[原始训练集] --> B1[子集1:有放回抽样]A --> B2[子集2:有放回抽样]A --> B3[...]A --> Bn[子集n:有放回抽样]B1 --> C1[决策树1]B2 --> C2[决策树2]B3 --> C3[...]Bn --> Cn[决策树n]C1 --> D[组合预测]C2 --> DC3 --> DCn --> DD --> E[最终预测]

2. 算法原理与数学推导

2.1 核心组件
  • 决策树基学习器:使用CART(分类与回归树)算法
  • 双重随机性
    • 数据随机性:Bootstrap抽样(约63%样本被选中)
    • 特征随机性:分裂时考虑 d \sqrt{d} d (分类)或 d / 3 d/3 d/3(回归)个特征
2.2 数学推导

分类问题(多数投票):
y ^ = mode { h 1 ( x ) , h 2 ( x ) , . . . , h T ( x ) } \hat{y} = \text{mode}\{ h_1(x), h_2(x), ..., h_T(x) \} y^=mode{h1(x),h2(x),...,hT(x)}
其中 h t h_t ht 是第t棵树的预测

回归问题(平均预测):
y ^ = 1 T ∑ t = 1 T h t ( x ) \hat{y} = \frac{1}{T} \sum_{t=1}^T h_t(x) y^=T1t=1Tht(x)

特征重要性计算
Importance j = 1 T ∑ t = 1 T ( Imp j ( t ) ) \text{Importance}_j = \frac{1}{T} \sum_{t=1}^T \left( \text{Imp}_j^{(t)} \right) Importancej=T1t=1T(Impj(t))
其中 Imp j ( t ) \text{Imp}_j^{(t)} Impj(t) 是树t中特征j的重要性(通过基尼不纯度减少或MSE减少计算)

2.3 OOB(Out-of-Bag)误差
  • 每棵树训练时未使用的样本(约37%):
    O O B t = 1 ∣ D oob ( t ) ∣ ∑ i ∈ D oob ( t ) 1 ( y i ≠ h t ( x i ) ) OOB_t = \frac{1}{|D_{\text{oob}}^{(t)}|} \sum_{i \in D_{\text{oob}}^{(t)}} \mathbf{1}(y_i \neq h_t(x_i)) OOBt=Doob(t)1iDoob(t)1(yi=ht(xi))
  • 整体OOB误差:
    O O B = 1 T ∑ t = 1 T O O B t OOB = \frac{1}{T} \sum_{t=1}^T OOB_t OOB=T1t=1TOOBt

3. 模型评估

评估指标
任务类型评估指标
分类准确率、F1-Score、AUC-ROC
回归MSE、MAE、 R 2 R^2 R2
特征重要性可视化
import matplotlib.pyplot as plt
from sklearn.ensemble import RandomForestClassifiermodel = RandomForestClassifier()
model.fit(X_train, y_train)plt.barh(feature_names, model.feature_importances_)
plt.title("Feature Importance")
plt.show()

4. 应用案例

4.1 医疗诊断
  • 场景:乳腺癌良恶性预测
  • 特征:细胞核半径、纹理、周长等30维特征
  • 结果:准确率98.5%,AUC=0.995(威斯康星乳腺癌数据集)
4.2 金融风控
  • 场景:信用卡欺诈检测
  • 处理不平衡数据:采用分层抽样+代价敏感学习
  • 效果:召回率92%,误报率仅0.3%
4.3 遥感图像分类
  • 挑战:高维特征(数百个光谱波段)
  • 解决方案:结合PCA降维
  • 精度:土地覆盖分类准确率91.2%

5. 面试题及答案

Q1:为什么随机森林比单棵决策树更优?
A:通过双重随机性降低方差,减少过拟合风险。理论依据:
Var ( X ˉ ) = Var ( X ) n + ρ σ 2 \text{Var}(\bar{X}) = \frac{\text{Var}(X)}{n} + \rho\sigma^2 Var(Xˉ)=nVar(X)+ρσ2
其中 ρ \rho ρ是树间相关性,随机森林通过特征随机选择降低 ρ \rho ρ

Q2:如何处理高维稀疏数据(如文本)?
A:优先选择:

  1. 特征选择:基于重要性筛选Top-K特征
  2. 调整分裂标准:使用信息增益代替基尼指数
  3. 增加树数量:补偿单棵树的信息损失

Q3:随机森林 vs GBDT?

维度随机森林GBDT
训练方式并行串行
偏差-方差侧重降低方差侧重降低偏差
过拟合风险低(天然正则化)高(需早停)
数据敏感度对噪声不敏感对异常值敏感
调参复杂度简单(主要调树数量和深度)复杂(学习率+树参数)

6. 优缺点分析

优点
  1. 高精度:在多种任务上表现优于单模型
  2. 抗过拟合:Bagging+特征随机性提供天然正则化
  3. 处理混合特征:支持数值和类别特征(无需独热编码)
  4. 内置评估:OOB误差无需交叉验证
  5. 特征重要性:自动评估特征贡献
缺点
  1. 计算开销大:树数量多时训练慢(可并行优化)
  2. 黑盒模型:解释性差于单棵决策树
  3. 外推能力差:回归任务中预测值不会超出训练范围
  4. 内存消耗高:需存储所有树结构

7. 数学推导示例(基尼指数)

分类树分裂准则:最小化基尼不纯度
G = ∑ k = 1 K p k ( 1 − p k ) G = \sum_{k=1}^K p_k (1 - p_k) G=k=1Kpk(1pk)
其中 p k p_k pk是节点中第k类样本的比例

特征j在节点s的分裂增益
Δ G ( s , j ) = G ( s ) − N left N s G ( s left ) − N right N s G ( s right ) \Delta G(s,j) = G(s) - \frac{N_{\text{left}}}{N_s}G(s_{\text{left}}) - \frac{N_{\text{right}}}{N_s}G(s_{\text{right}}) ΔG(s,j)=G(s)NsNleftG(sleft)NsNrightG(sright)
选择最大化 Δ G \Delta G ΔG的特征和分裂点


💡 关键洞察:随机森林的核心价值在于双重随机性带来的多样性

  1. 数据扰动:Bootstrap抽样产生差异化的训练集
  2. 特征扰动:分裂时的随机特征子集保证树间低相关性

实际应用建议:

  • 分类任务:设置n_estimators=100-500, max_depth=None
  • 回归任务:增加n_estimators=500-1000以稳定预测
  • 特征工程:优先使用sklearnRandomForestClassifier实现
  • 解释性:用SHAP值增强模型可解释性

http://www.hkcw.cn/article/jxolxhUxlD.shtml

相关文章

Nacos 配置管理案例:nacos-spring-cloud-config-example详解

一、结构说明:基于Spring Cloud Alibaba的微服务示例 nacos-spring-cloud-config-example : 服务提供者 二、技术栈:Spring BootSpring CloudSpring Cloud Alibaba Nacos Actuator(可选:监控) 三、使用环境 安装…

Python训练营---Day39

知识点回顾 图像数据的格式:灰度和彩色数据模型的定义显存占用的4种地方 模型参数梯度参数优化器参数数据批量所占显存神经元输出中间状态 batchisize和训练的关系 作业:今日代码较少,理解内容即可 1、图像数据的格式:灰度和彩色数…

KeePass安装与KeePass设置中文教程

一、下载KeePass 访问官网:https://keepass.info 1,点击最新版本 2,下载最新版本 3,选择你要下载的版本 二、安装KeePass 1,第一步 2,第二步(一直点Next) 3,安装…

SQL正则表达式总结

这里写目录标题 一、元字符二、正则表达函数1、 regexp_like(x,pattern[,match_option])2、 regexp_instr(x,pattern[,start[,occurrence[,return_option[, match_option]]]]) 3、 REGEXP_SUBSTR(x,pattern[,start[,occurrence[, match_option]]]) 4、 REGEXP_REPLACE(x,patter…

2025 一带一路暨金砖国家技能发展与技术创新大赛 第一届“信创适配及安全管理赛项”样题

2025 一带一路暨金砖国家技能发展与技术创新大赛 第一届“信创适配及安全管理赛项”样题 模块A-理论知识:模块B-适配环境搭建:系统安装与配置:DNS 服务配置:DNS 服务配置:CA 服务配置:Httpd 服务配置&#…

unity编辑器扩展dll形式展示

1.背景:最近搞工程迁移发现一旦c#报错就会导致编辑器菜单没法使用,做了一些尝试发现使用dll的方式会是不错的选择。当然有些工具还是建议用外部的c#工程来写比如winform. 2.遇到的问题:我记得之前2017年左右的时候做一个unity的dll工程并不需…

Nacos | 三种方式的配置中心,整合Springboot3.x + yaml文件完成 0错误 自动刷新(亲测无误)

目录 ValueRefreshScope 导入配置依赖 启动类 添加 EnableDiscoveryClient 控制器 编写 yaml 文件 创建 Nacos Data Id 项目启动问题 测试 ConfigurationProperties 无感自动刷新 导入配置依赖 启动类 添加 EnableDiscoveryClient 控制器 Nacos DataID 模板映射 编…

[嵌入式实验]实验五:freeRTOS

一、实验目的 熟悉开发环境在开发板上通过freeRTOS进行LED控制 二、实验环境 硬件:STM32开发板、CMSIS-DAP调试工具 软件:STM32CubeMX软件、ARM的IDE:Keil C51 三、实验内容 1.实验原理 freeRTOS是一种专门设计的嵌入式实时操作系统&…

【Unity】 HTFramework框架(六十六)缺省的运行时组件检视器

更新日期:2025年5月29日。 Github 仓库:https://github.com/SaiTingHu/HTFramework Gitee 仓库:https://gitee.com/SaiTingHu/HTFramework 索引 一、缺省的运行时组件检视器1.自定义运行时组件检视器 二、使用缺省的运行时组件检视器1.定义组…

Ollama v0.8.0 发布,支持通过工具调用进行流式响应!

在 2025 年 5 月 29 日的 AI 技术浪潮中,实时交互性和高效性成为 AI 应用的核心需求。Ollama 作为一个开源的大型语言模型服务器,持续更新以满足开发者需求。Ollama v0.8.0 的发布特别引入了支持通过工具调用进行流式响应的功能,这一更新引发…

LVS+Keepalived 高可用群集

目录 一、 Keepalived 双机热备核心技术 1.1 Keepalived 架构与 VRRP协议 1.2 双机热备配置深度优化 二、 LVSKeepalived 高可用负载均衡架构 2.1 系统架构设计 2.2 LVS集成配置详解 三、 关键技术与疑难解析 3.1 DR模式 ARP 仰制机制 3.2 健康检查策略优化 四、 企业…

python + vscode 开发环境搭建

一、下载安装Python Python 官网链接Welcome to Python.org 二、Python3.12.7安装 三、Python虚拟环境 开发编译器使用Vscode 1、打开VsCode,键盘输入ctrl shift p 点击完了会在文件夹目录下出现一个.venv的路径。 虚拟环境的作用是隔离不同项目的 Python 环境…

[ Qt ] | QRadioButton和QCheckBox的使用

目录 QRadioButton 常用属性 clicked(bool)信号、pressed信号、released信号 小项目 QRadioButton QRadioButton是一个单选按钮,也是继承自QAbstractButton(继承自QWidget) 常用属性 checkable 是否能选中 checked 是否已经被选中 autoExclusive 是否排…

关于无法下载Qt离线安装包的说明

不知道出于什么原因考虑,Qt官方目前不提供离线的安装包下载,意味着网上各种文章提供的各种下载地址都失效了,会提示Download from your IP address is not allowed,当然目前可以在线安装,但是据说只提供了从5.15开始的…

github双重认证怎么做

引言 好久没登陆github了, 今天登陆github后,提醒进行2FA认证。 查看了github通知,自 2023 年 3 月起,GitHub 要求所有在 GitHub.com 上贡献代码的用户启用一种或多种形式的双重身份验证 (2FA)。 假如你也遇到这个问题&#xf…

多部手机连接同一wifi的ip一样吗?

在家庭和办公环境中,多台手机同时连接同一个WiFi路由器已成为常态。不少用户会产生疑问:这些设备的IP地址会相同吗?下面就一起来了解一下吧。 一、多部手机连接同一WiFi的IP‌一样吗 多部手机连接同一WiFi时的IP地址是否相同,需要…

实验设计与分析(第6版,Montgomery)第5章析因设计引导5.7节思考题5.7 R语言解题

本文是实验设计与分析&#xff08;第6版&#xff0c;Montgomery著&#xff0c;傅珏生译) 第5章析因设计引导5.7节思考题5.7 R语言解题。主要涉及方差分析&#xff0c;正态假设检验&#xff0c;残差分析&#xff0c;交互作用图&#xff0c;等值线图。 dataframe <-data.frame…

如何打造一份出色的技术文档?

文章目录 每日一句正能量前言一、明确文档的目标和受众二、合理规划文档结构三、注重内容的清晰性和准确性四、持续更新和优化文档五、实用工具推荐六、案例分享示例&#xff1a;如何使用Python编写一个简单的Web应用引言背景知识安装和配置使用指南高级用法常见问题参考文献 七…

记一次 Starrocks be 内存异常宕机

突发性 be 内存飙高&#xff0c;直至被系统 kill 掉&#xff0c;be 内存如下&#xff1a;其中 starrocks_be_update_mem_bytes 指标打满&#xff0c;重启也是如此 [rootlocalhost bin]# curl -XGET -s http://192.168.1.49:8040/metrics | grep "^starrocks_be_.*_mem_b…

阿里云服务器邮件发送失败(dail tcp xxxx:25: i/o timeout)因为阿里云默认禁用 25 端口

最近在测试发送邮件的功能&#xff0c;发现了一个奇怪的问题&#xff0c;同样的 docker 镜像&#xff0c;在本地跑起来是可以正常发送邮件的&#xff0c;但是在阿里云的服务器上跑&#xff0c;就会报错 i/o timeout。 排查了一圈发现&#xff0c;原来是阿里云的操作&#xff0…