随机森林算法详解——基于垃圾邮件分类案例
一、从决策树到随机森林在前面的决策树学习中我们了解到决策树是一种比较直观的分类算法。它通过不断寻找合适的特征对数据进行划分最终得到分类结果。例如垃圾邮件识别问题一封邮件可能包含单词出现次数特殊字符比例大写字母数量链接数量决策树会根据这些特征建立判断规则。但是在实际使用过程中单棵决策树也存在一些问题。例如如果树的深度过大模型可能会把训练数据中的一些特殊情况也学习进去。训练集效果很好准确率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_size0.2, random_state100 )数据比例训练集80% 测试集20%训练集用于学习规律。测试集用于验证模型效果。七、随机森林模型建立代码from sklearn.ensemble import RandomForestClassifier rf RandomForestClassifier( n_estimators150, max_features0.5, random_state0 )创建随机森林分类模型。八、随机森林参数分析1.n_estimators表示森林中决策树数量。代码n_estimators150表示建立150棵决策树。树数量增加优点模型更加稳定预测结果波动降低缺点训练时间增加内存占用提高实际应用中需要根据数据规模调整。2.max_features表示每棵树随机选择的特征比例。代码max_features0.5表示每棵树使用50%的特征。例如100个特征每棵树随机选择50个。这样可以提高树之间的差异。3.max_depth控制树的最大深度。如果不限制树可能不断分裂。导致模型复杂度过高容易过拟合。因此需要合理设置深度。九、交叉验证评价模型单次训练测试可能存在偶然性。例如一次划分准确率90%换一次划分准确率85%因此采用交叉验证提高评价可靠性。代码StratifiedKFold( n_splits5 )五折交叉验证过程第一次 第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.训练成本较高树数量增加后训练时间和资源消耗都会增加。

相关新闻

【限时公开】某千亿级AI平台内部《模型准入白皮书V3.2》核心章节:含17项硬性否决条款与5类高危场景熔断机制

【限时公开】某千亿级AI平台内部《模型准入白皮书V3.2》核心章节:含17项硬性否决条款与5类高危场景熔断机制

更多请点击: https://codechina.net 第一章:AI模型选型指南 选择合适的AI模型是构建可靠智能系统的第一步。模型选型不仅影响推理性能与资源消耗,更直接关系到业务目标的达成效果。需综合考量任务类型、数据规模、延迟要求、部署环境及维护成…

2026/8/4 4:02:47 阅读更多
Java项目转SpringBoot实战:依赖管理与配置优化

Java项目转SpringBoot实战:依赖管理与配置优化

1. 从零开始:普通Java项目转SpringBoot的完整指南去年接手一个遗留的Java Web项目时,我面临着一个典型困境:这个使用传统SSH(StrutsSpringHibernate)架构的项目,配置文件散落在各处,启动需要依赖…

2026/8/4 4:02:47 阅读更多
操作系统核心:进程调度、死锁、虚拟内存,案例也会考

操作系统核心:进程调度、死锁、虚拟内存,案例也会考

很多技术人以为:“操作系统是底层的事,我写业务代码用不上。” 但当你面对高并发服务雪崩、数据库连接池耗尽、容器OOM被杀时,你会发现——你每天都在和操作系统“谈判”。“我们需要掌握进程管理、存储管理、文件系统、设备管理的基本原理&a…

2026/8/4 4:52:48 阅读更多
系统分析师案例分析

系统分析师案例分析

试题1:某软件公司拟开发一套汽车租赁系统,科学,安全和方便地管理租赁公司的各项业务,提高公司效率,提升利率。注册用户在使用系统进行车辆预约时需执行以下操作:(a)用户登录系统&…

2026/8/4 4:52:48 阅读更多
表格工具技术选型对比:兼容性、协作模式与AI辅助能力分析

表格工具技术选型对比:兼容性、协作模式与AI辅助能力分析

一、读者定位与问题说明我日常工作中频繁接触各类表格工具——从传统桌面软件到在线协作平台,再到集成AI能力的多维表格产品。不同工具在文件格式兼容性、多人协作机制、数据处理能力、AI辅助深度等方面差异明显。选错工具可能导致格式错乱、协作效率低下或功能无法…

2026/8/4 4:52:48 阅读更多
Vulkan初始化性能优化:5步实现C++跨平台高效渲染

Vulkan初始化性能优化:5步实现C++跨平台高效渲染

1. 项目概述:为什么Vulkan初始化值得深究?如果你是一名长期在OpenGL或DirectX 3D API下耕耘的图形程序员,第一次接触Vulkan时,那种扑面而来的复杂感可能会让你心生退意。一大堆的VkInstance、VkDevice、VkQueue、VkCommandBuffer需…

2026/8/4 4:42:48 阅读更多
3分钟搞定!QQ空间历史说说完整备份终极指南

3分钟搞定!QQ空间历史说说完整备份终极指南

3分钟搞定!QQ空间历史说说完整备份终极指南 【免费下载链接】GetQzonehistory 获取QQ空间发布的历史说说 项目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory 你是否曾想过,那些年发过的QQ空间说说,那些记录青春的文字…

2026/8/3 12:53:38 阅读更多
AMAT 0100-02186 I/O 分配 PCB

AMAT 0100-02186 I/O 分配 PCB

AMAT 0100-02186 I/O分配PCB板是应用材料(Applied Materials)公司生产的一款用于半导体设备的I/O信号分配电路板。该型号(0100-02186)的核心特点如下:专用于Endura等半导体工艺腔室。集成信号路由与分配功能。连接控制…

2026/8/3 19:34:52 阅读更多
Nissei Corp FFMN-32L-10-T0 40AX 三相异步电动机

Nissei Corp FFMN-32L-10-T0 40AX 三相异步电动机

Nissei Corp FFMN-32L-10-T0 40AX 三相异步电动机是日本日清(Nissei)品牌的一款工业用三相异步电机,适用于自动化设备及通用机械驱动。该型号(FFMN-32L-10-T0 40AX)的核心特点如下:三相交流异步电动机。额定…

2026/8/3 19:34:54 阅读更多