当前位置: 首页 > news >正文

随机森林算法详解——基于垃圾邮件分类案例

一、从决策树到随机森林

在前面的决策树学习中,我们了解到决策树是一种比较直观的分类算法。

它通过不断寻找合适的特征,对数据进行划分,最终得到分类结果。

例如垃圾邮件识别问题:

一封邮件可能包含:

  • 单词出现次数
  • 特殊字符比例
  • 大写字母数量
  • 链接数量

决策树会根据这些特征建立判断规则。

但是在实际使用过程中,单棵决策树也存在一些问题。

例如:

如果树的深度过大,模型可能会把训练数据中的一些特殊情况也学习进去。

训练集效果很好:

准确率:98%

但是换一批新数据:

准确率:75%

这种情况就是过拟合。

为了提高模型稳定性,机器学习中提出了一种思想:

不使用一棵树进行判断,而是训练多棵树,让它们共同决定结果。

这就是随机森林。


二、随机森林基本思想

随机森林(Random Forest)是一种集成学习方法。

简单来说:

它由很多棵决策树组成。

每棵树都会独立进行训练,最后通过投票方式确定分类结果。

例如:

预测一封邮件是否为垃圾邮件:

决策树预测结果
树1垃圾邮件
树2垃圾邮件
树3正常邮件
树4垃圾邮件
树5正常邮件

其中3棵树认为是垃圾邮件。

最终结果:

垃圾邮件

相比单棵树,多个模型共同判断,可以减少偶然因素带来的影响。


三、随机森林为什么叫“随机”

随机森林中的随机主要体现在两个方面:

1. 数据随机

训练每棵树时,并不是直接使用全部数据。

而是通过Bootstrap方法随机抽取数据。

例如:

原始数据:

4600封邮件

生成:

数据集1 → 训练树1 数据集2 → 训练树2 数据集3 → 训练树3

由于每棵树看到的数据不同,所以最终形成的树结构也不同。


2. 特征随机

除了数据不同之外,每棵树使用的特征也不是完全一样。

例如:

邮件数据共有100个特征。

训练第一棵树:

随机选择50个特征。

训练第二棵树:

重新选择另外50个特征。

这样可以避免所有树都关注相同特征,提高模型差异性。


四、随机森林训练过程

随机森林训练主要分为以下几个步骤。

第一步:随机抽取训练数据

通过Bootstrap采样生成多个训练集。

例如:

原始数据 | 数据集A 数据集B 数据集C

第二步:训练决策树

每个数据集训练一棵决策树。

例如:

数据集A → 决策树1 数据集B → 决策树2 数据集C → 决策树3

第三步:随机选择特征

每棵树训练过程中,只使用部分特征。

这样可以增加不同树之间的差异。


第四步:综合预测结果

分类任务:

采用多数投票。

回归任务:

采用平均值。


五、垃圾邮件分类案例介绍

本实验使用:

spambase.csv

数据集完成垃圾邮件分类。

目标:

根据邮件特征判断:

0:正常邮件 1:垃圾邮件

邮件特征包括:

  • 单词出现频率
  • 字符出现频率
  • 大写字母长度
  • 特殊符号比例

例如:

垃圾邮件通常包含:

  • 大量促销词
  • 大量链接
  • 特殊字符

这些特征可以帮助模型进行判断。


六、数据读取与划分

读取数据:

df = pd.read_csv('spambase.csv')

划分特征:

x = df.iloc[:, :-1] y = df.iloc[:, -1]

其中:

x表示邮件特征。

例如:

单词频率 字符比例 数字数量

y表示类别标签:

是否垃圾邮件

划分训练集和测试集:

x_train, x_test, y_train, y_test = train_test_split( x, y, test_size=0.2, random_state=100 )

数据比例:

训练集:80% 测试集:20%

训练集用于学习规律。

测试集用于验证模型效果。


七、随机森林模型建立

代码:

from sklearn.ensemble import RandomForestClassifier rf = RandomForestClassifier( n_estimators=150, max_features=0.5, random_state=0 )

创建随机森林分类模型。


八、随机森林参数分析

1.n_estimators

表示森林中决策树数量。

代码:

n_estimators=150

表示建立150棵决策树。

树数量增加:

优点:

  • 模型更加稳定
  • 预测结果波动降低

缺点:

  • 训练时间增加
  • 内存占用提高

实际应用中需要根据数据规模调整。


2.max_features

表示每棵树随机选择的特征比例。

代码:

max_features=0.5

表示:

每棵树使用50%的特征。

例如:

100个特征:

每棵树随机选择50个。

这样可以提高树之间的差异。


3.max_depth

控制树的最大深度。

如果不限制:

树可能不断分裂。

导致:

模型复杂度过高,容易过拟合。

因此需要合理设置深度。


九、交叉验证评价模型

单次训练测试可能存在偶然性。

例如:

一次划分:

准确率:90%

换一次划分:

准确率:85%

因此采用交叉验证提高评价可靠性。

代码:

StratifiedKFold( n_splits=5 )

五折交叉验证过程:

第一次: 第1份测试,其余训练 第二次: 第2份测试,其余训练 ... 第五次: 第5份测试,其余训练

最后计算平均准确率。


十、随机森林参数优化

随机森林默认参数通常效果不错,但是不同数据集适合的参数不同。

因此使用:

GridSearchCV()

自动搜索最佳参数。

搜索参数:

'n_estimators' 'max_features' 'max_depth'

例如:

尝试:

50棵树 100棵树 150棵树 200棵树

然后比较模型效果。

最终选择表现最好的组合。


十一、模型评价

训练完成后:

使用:

classification_report()

评价模型。

主要指标:

Accuracy

表示整体预测正确比例。


Precision

表示预测为垃圾邮件的邮件中,真正垃圾邮件的比例。


Recall

表示所有垃圾邮件中,模型成功检测出来的比例。


F1-score

综合考虑Precision和Recall。


十二、混淆矩阵分析

代码:

cm_plot()

混淆矩阵:

预测正常预测垃圾
真实正常TNFP
真实垃圾FNTP

其中:

TP:

正确识别垃圾邮件。

TN:

正确识别正常邮件。

FP:

正常邮件被误判为垃圾邮件。

FN:

垃圾邮件没有检测出来。

在垃圾邮件检测中:

FN通常需要重点关注,因为漏掉垃圾邮件会影响用户体验。


十三、随机森林特征重要性分析

随机森林可以查看:

不同特征对于预测结果的影响程度。

代码:

rf.feature_importances_

例如:

可能发现:

特征重要程度
关键词频率0.30
特殊字符数量0.25
链接数量0.18

通过特征重要性分析,可以了解:

哪些因素更容易影响邮件分类结果。


十四、随机森林优缺点分析

优点

1.稳定性更高

多棵树共同决策,可以降低单个模型带来的误差。

2.降低过拟合

随机数据和随机特征减少模型对训练数据的依赖。

3.适合处理大量特征

面对高维数据时表现较好。


缺点

1.解释性较弱

单棵决策树可以直接查看规则。

但是随机森林包含大量树结构,不容易完全解释。

2.训练成本较高

树数量增加后:

训练时间和资源消耗都会增加。

http://www.cnnetsun.cn/news/3824014.html

相关文章:

  • Spring Security自定义认证:从默认密码到UserDetailsService实现详解
  • 从微软XBOX裁员看技术组织架构优化:扁平化与高效协作实践
  • Unity游戏开发实战:点乘与叉乘的五大核心应用场景解析
  • 本地大模型部署实战:从CUDA环境搭建到SenseNova-U1部署全流程
  • 年薪百万的网安人,到底比你强在哪?这份「从0到1」的系统学习地图,请查收。
  • 构建AI隐私安全舱:三层纵深防御体系护航企业智能数据安全
  • 统信UOS系统安装NVIDIA官方驱动实现稳定多屏显示完整指南
  • Android编译优化:精准模块清理解决增量编译失败
  • WorkBuddy与罗与罗Skill:构建法律AI智能体工作流的工程实践
  • MySQL字符集与校对规则深度解析:从原理到实战,彻底解决乱码问题
  • Loop Engineering 没死,Graph Engineering 也没有上位
  • 从拳击手到AI金融科技创业者:蔡永军的跨界转型之路
  • 信奥赛01串问题解析:位运算与动态规划实战
  • OpenClaw AI Agent 实战:从部署到技能开发的完整指南
  • 2026年正规SEO公司怎么选:七大避坑维度+真实案例复盘+KPI对赌合同指南|详解
  • 2026年正规SEO公司怎么选:七大避坑维度+真实案例复盘+KPI对赌合同指南|指南
  • 2025最权威的十大降AI率神器横评
  • 【读论文】2020 IEEE [C] 多种基音检测算法对比研究 A comparative study of various pitch detection algorithms
  • 关于编译器报警告--scanf的返回值被忽略-程序却能正常运行的理解
  • React useState初始值写法性能优化指南
  • Kali Linux部署HexStrike AI:MCP连接失败深度排错与优化指南
  • CTFHub HTTP协议通关指南:从基础请求到实战技巧
  • 支持私有化部署的企业 Agent 方案选型指南:技术架构、安全边界与主流厂商深度测评
  • Unity Cinemachine Virtual Camera:从核心原理到第三人称镜头实战
  • 虚拟仿真、半实物仿真和实况仿真简介
  • OpenCV相机标定实战:从针孔模型到鱼眼矫正的完整指南
  • UE5 Nanite实战指南:从核心原理到资产分类启用策略
  • 基于企业微信与go-cqhttp构建AI数字分身:IM生态集成实践
  • 亚马逊运营底层逻辑解析:从A9算法到飞轮理论,构建系统性认知框架
  • OpenClaw ACP Agents:统一编排多AI编码助手,打造团队智能开发中台