【机器学习基础】机器学习入门核心算法:随机森林(Random Forest)
机器学习入门核心算法:随机森林(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. 算法逻辑
随机森林是一种集成学习算法,通过构建多棵决策树并组合其预测结果来提高模型性能。核心逻辑包含两个关键概念:
- Bagging(自助聚集):通过有放回抽样生成多个训练子集
- 特征随机选择:每棵树分裂时仅考虑随机子集的特征
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=1∑Tht(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=1∑T(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)∣1i∈Doob(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=1∑TOOBt
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:优先选择:
- 特征选择:基于重要性筛选Top-K特征
- 调整分裂标准:使用信息增益代替基尼指数
- 增加树数量:补偿单棵树的信息损失
Q3:随机森林 vs GBDT?
维度 | 随机森林 | GBDT |
---|---|---|
训练方式 | 并行 | 串行 |
偏差-方差 | 侧重降低方差 | 侧重降低偏差 |
过拟合风险 | 低(天然正则化) | 高(需早停) |
数据敏感度 | 对噪声不敏感 | 对异常值敏感 |
调参复杂度 | 简单(主要调树数量和深度) | 复杂(学习率+树参数) |
6. 优缺点分析
优点:
- 高精度:在多种任务上表现优于单模型
- 抗过拟合:Bagging+特征随机性提供天然正则化
- 处理混合特征:支持数值和类别特征(无需独热编码)
- 内置评估:OOB误差无需交叉验证
- 特征重要性:自动评估特征贡献
缺点:
- 计算开销大:树数量多时训练慢(可并行优化)
- 黑盒模型:解释性差于单棵决策树
- 外推能力差:回归任务中预测值不会超出训练范围
- 内存消耗高:需存储所有树结构
7. 数学推导示例(基尼指数)
分类树分裂准则:最小化基尼不纯度
G = ∑ k = 1 K p k ( 1 − p k ) G = \sum_{k=1}^K p_k (1 - p_k) G=k=1∑Kpk(1−pk)
其中 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的特征和分裂点
💡 关键洞察:随机森林的核心价值在于双重随机性带来的多样性:
- 数据扰动:Bootstrap抽样产生差异化的训练集
- 特征扰动:分裂时的随机特征子集保证树间低相关性
实际应用建议:
- 分类任务:设置
n_estimators=100-500
,max_depth=None
- 回归任务:增加
n_estimators=500-1000
以稳定预测- 特征工程:优先使用
sklearn
的RandomForestClassifier
实现- 解释性:用SHAP值增强模型可解释性
相关文章:

【机器学习基础】机器学习入门核心算法:随机森林(Random Forest)
机器学习入门核心算法:随机森林(Random Forest) 1. 算法逻辑2. 算法原理与数学推导2.1 核心组件2.2 数学推导2.3 OOB(Out-of-Bag)误差 3. 模型评估评估指标特征重要性可视化 4. 应用案例4.1 医疗诊断4.2 金融风控4.3 遥…...

【深度学习】12. VIT与GPT 模型与语言生成:从 GPT-1 到 GPT4
VIT与GPT 模型与语言生成:从 GPT-1 到 GPT4 本教程将介绍 GPT 系列模型的发展历程、结构原理、训练方式以及人类反馈强化学习(RLHF)对生成对齐的改进。内容涵盖 GPT-1、GPT-2、GPT-3、GPT-3.5(InstructGPT)、ChatGPT …...

常规算法学习
算法 1. 排序算法1. 归并排序1.1 普通归并排序1.2 优化后的归并排序(TimSort) 2. 插入排序2.1 直接插入排序2.2 二分插入排序2.3 成对插入排序 3. 快速排序3.1 单轴快速排序3.2 双轴快排 4. 计数排序 2. 树1. 红黑树(Red Black Treeÿ…...

Google 发布的全新导航库:Jetpack Navigation 3
前言 多年来,Jetpack Navigation 库一直是开发者的重要工具,但随着 Android 用户界面领域的发展,特别是大屏设备的出现和 Jetpack Compose 的兴起,Navigation 的功能也需要与时俱进。 今年的 Google I/O 上重点介绍了 Jetpack Na…...

Arbitrum Stylus 合约实战 :Rust 实现 ERC20
在《Arbitrum Stylus 深入解析与 Rust 合约部署实战》篇中,我们深入探讨了 Arbitrum Stylus 的核心技术架构,包括其 MultiVM 机制、Rust 合约开发环境搭建,以及通过 cargo stylus 实现简单计数器合约的部署与测试。Stylus 作为 Arbitrum Nitr…...
电脑故障基础知识
1.1 了解电脑故障 分类:分为软件故障(系统感染病毒、程序错误)和硬件故障(硬件物理损坏、接触不良)。 原因:人为操作失误、病毒破坏、工作环境恶劣(高温 / 灰尘)、硬件老化。 准备工…...
12.2Swing中JButton简单分析
JButton 的继承结构 public class JButton extends AbstractButton implements Accessible AbstractButton 是所有 Swing 按钮类(如 JToggleButton, JRadioButton, JCheckBox)的基类。它封装了按钮的核心逻辑:图标、文本、边框、动作事件等…...

内存管理--《Hello C++ Wrold!》(8)--(C/C++)--深入剖析new和delete的使用和底层实现
文章目录 前言C/C内存分布new和deletenew和delete的底层定位new表达式 内存泄漏作业部分 前言 在C/C编程中,内存管理是理解程序运行机制的核心基础,也是开发高效、稳定程序的关键。无论是局部变量的存储、动态内存的分配,还是对象生命周期的…...
JavaScript性能优化实战指南(详尽分解版)
JavaScript性能优化实战指南 一、加载优化 减少HTTP请求 // 合并CSS/JS文件 // 使用雪碧图CSS Sprites .icon {background-image: url(sprites.png);background-position: -20px 0; }代码分割与懒加载 // 动态导入模块 button.addEventListener(click, async () > {cons…...
从 AMQP 到 RabbitMQ:核心组件设计与工作原理(一)
一、引言 ** 在当今分布式系统盛行的时代,消息队列作为一种关键的中间件技术,承担着系统间异步通信、解耦和削峰填谷的重要职责。AMQP(Advanced Message Queuing Protocol)作为一种高级消息队列协议,为消息队列的实现…...

Java进阶---JVM
JVM概述 JVM作用: 负责将字节码翻译为机器码,管理运行时内存 JVM整体组成部分: 类加载系统(ClasLoader):负责将硬盘上的字节码文件加载到内存中 运行时数据区(RuntimeData Area):负责存储运行时各种数据 执行引擎(Ex…...
鸿蒙OSUniApp离线优先数据同步实战:打造无缝衔接的鸿蒙应用体验#三方框架 #Uniapp
UniApp离线优先数据同步实战:打造无缝衔接的鸿蒙应用体验 最近在开发一个面向鸿蒙生态的UniApp应用时,遇到了一个有趣的挑战:如何在网络不稳定的情况下保证数据的实时性和可用性。经过一番探索和实践,我们最终实现了一套行之有效…...
地震资料裂缝定量识别——学习计划
学习计划 地震资料裂缝定量识别——理解常规采集地震裂缝识别方法纵波各向异性方法蚁群算法相干体及倾角检测方法叠后地震融合属性方法裂缝边缘检测方法 非常规采集地震裂缝识别方法P-S 转换波方法垂直地震剖面方法 学习计划 地震资料裂缝定量识别——理解 地震资料裂缝识别&a…...

C++ 检查一条线是否与圆接触或相交(Check if a line touches or intersects a circle)
给定一个圆的圆心坐标、半径 > 1 的圆心坐标以及一条直线的方程。任务是检查给定的直线是否与圆相交。有三种可能性: 1、线与圆相交。 2、线与圆相切。 3、线在圆外。 注意:直线的一般方程是 a*x b*y c 0,因此输入中只给出常数 a、b、…...
23. Merge k Sorted Lists
目录 题目描述 方法一、k-1次两两合并 方法二、分治法合并 方法三、使用优先队列 题目描述 23. Merge k Sorted Lists 方法一、k-1次两两合并 选第一个链表作为结果链表,每次将后面未合并的链表合并到结果链表中,经过k-1次合并,即可得到…...
每日算法刷题计划Day20 6.2:leetcode二分答案3道题,用时1h20min
9.3048.标记所有下标的最早秒数(中等) 3048. 标记所有下标的最早秒数 I - 力扣(LeetCode) 思想 1.给你两个下标从 1 开始的整数数组 nums 和 changeIndices ,数组的长度分别为 n 和 m 。 一开始,nums 中所有下标都是未标记的&a…...
Spring Security安全实践指南
安全性的核心价值 用户视角的数据敏感性认知 从终端用户角度出发,每个应用程序都涉及不同级别的数据敏感度。以电子邮件服务与网上银行为例:前者内容泄露可能仅造成隐私困扰,而后者账户若被操控将直接导致财产损失。这种差异体现了安全防护需要分级实施的基本原则: // 伪…...

Unity + HybirdCLR热更新 入门篇
官方文档 HybridCLR | HybridCLRhttps://hybridclr.doc.code-philosophy.com/docs/intro 什么是HybirdCLR? HybridCLR(原名 huatuo)是一个专为 Unity 项目设计的C#热更新解决方案,它通过扩展 IL2CPP 运行时,使其支持动态加载和…...
QuickBASIC QB64 支持 64 位系统和跨平台Linux/MAC OS
QuickBASIC 的现代继任者 QB64 已发展成为一个功能强大的开源项目,支持 64 位系统和跨平台开发。以下是详细介绍: 项目首页 - QB64pe:The QB64 Phoenix Edition Repository - GitCode https://gitcode.com/gh_mirrors/qb/QB64pe 1. QB64 概述 官网&am…...

ElasticSearch迁移至openGauss
Elasticsearch 作为一种高效的全文搜索引擎,广泛应用于实时搜索、日志分析等场景。而 openGauss,作为一款企业级关系型数据库,强调事务处理与数据一致性。那么,当这两者的应用场景和技术架构发生交集时,如何实现它们之…...

【C语言极简自学笔记】项目开发——扫雷游戏
一、项目概述 1.项目背景 扫雷是一款经典的益智游戏,由于它简单而富有挑战性的玩法深受人们喜爱。在 C 语言学习过程中,开发扫雷游戏是一个非常合适的实践项目,它能够综合运用 C 语言的多种基础知识,如数组、函数、循环、条件判…...
Global Security Markets 第5章知识点总结
一、章节核心内容概述 《Global Securities Markets》第五章聚焦全球主要证券交易所、关联存管机构及跨境交易实务,重点解析“乘客市场(Passenger Markets)”概念与合规风险,同时涵盖交易费用、监管规则等实操要点。考虑到市场的…...
电子电路:4017计数器工作原理解析
4017是CMOS十进制计数器/分频器,它属于CD4000系列,工作电压范围比较宽,可能3V到15V。我记得它有10个译码输出端,每个输出端依次在高电平和低电平之间循环,可能用于时序控制或者LED显示什么的。 4017内部应该由计数器和译码器两部分组成。计数器部分可能是一个约翰逊计数器…...
Vim 中设置插入模式下输入中文
在 Vim 中设置插入模式下输入中文需要配置输入法切换和 Vim 的相关设置。以下是详细步骤: 1. 确保系统已安装中文输入法 在 Linux 系统中,常用的中文输入法有: IBus(推荐):支持拼音、五笔等Fcitx…...
GitHub 趋势日报 (2025年05月31日)
📊 由 TrendForge 系统生成 | 🌐 https://trendforge.devlive.org/ 🌐 本日报中的项目描述已自动翻译为中文 📈 今日获星趋势图 今日获星趋势图 1153 prompt-eng-interactive-tutorial 509 BillionMail 435 ai-agents-for-begin…...

Maven概述,搭建,使用
一.Maven概述 Maven是Apache软件基金会的一个开源项目,是一个有优秀的项目构建(创建)工具,它用来帮助开发者管理项目中的jar,以及jar之间的依赖关系,完成项目的编译,测试,打包和发布等工作. 我在当前学习阶段遇到过的jar文件: MySQL官方提供的JDBC驱动文件,通常命名为mysql-…...
基于大模型的数据库MCP Server设计与实现
基于大模型的数据库MCP Server设计与实现 引言 随着大语言模型(LLM, Large Language Model)能力的不断提升,AI Agent(智能体)正在从简单的对话问答,向更复杂的自动化任务执行和业务流程管理演进。在企业和开发者的实际需求中,数据库操作是最常见、最核心的场景之一。如…...
【前端】macOS 的 Gatekeeper 安全机制阻止你加载 bcrypt_lib.node 文件 如何解决
这个弹窗是 macOS 的 Gatekeeper 安全机制阻止你加载 bcrypt_lib.node 文件,因为它不是 Apple 签名的文件。 你想 “忽视” 它,其实是让系统允许这个 .node 原生模块运行,解决方式如下: sudo xattr -d com.apple.quarantine nod…...

Unity 环境搭建
Unity是一款游戏引擎,可用于开发各种类型的游戏和交互式应用程序。它由Unity Technologies开发,并在多个平台上运行,包括Windows、macOS、Linux、iOS、Android和WebGL。Unity也支持虚拟现实(VR)和增强现实(AR)技术,允许用户构建逼…...
【入门】【练9.3】 加四密码
| 时间限制:C/C 1000MS,其他语言 2000MS 内存限制:C/C 64MB,其他语言 128MB 难度:中等 分数:100 OI排行榜得分:12(0.1*分数2*难度) 出题人:root | 描述 要将 China…...