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

发布时间:2026/9/23 2:40:08

随机森林算法详解——基于垃圾邮件分类案例 一、从决策树到随机森林在前面的决策树学习中我们了解到决策树是一种比较直观的分类算法。它通过不断寻找合适的特征对数据进行划分最终得到分类结果。例如垃圾邮件识别问题一封邮件可能包含单词出现次数特殊字符比例大写字母数量链接数量决策树会根据这些特征建立判断规则。但是在实际使用过程中单棵决策树也存在一些问题。例如如果树的深度过大模型可能会把训练数据中的一些特殊情况也学习进去。训练集效果很好准确率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.训练成本较高树数量增加后训练时间和资源消耗都会增加。
延伸阅读

更多相关文章

2026/9/23 2:37:35

概率论四大收敛性:依分布、依概率、均方与几乎处处收敛详解

1. 概率论收敛性:从直觉到严格定义的旅程在数据分析、机器学习乃至日常的统计推断中,我们经常谈论一个估计量是否“收敛”于真实值。但“收敛”这个词,在概率论和数理统计的严谨世界里,远不止一种含义。新手可能会觉得&#xff0c…

2026/9/23 2:37:26

堡垒机环境下 Windows 向 Linux 传输脚本的实战方案

Windows 运维手里几台 Linux 服务器,公司上了堡垒机,要求所有登录和操作必须过堡垒机。本地写好脚本,想传到服务器上直接跑,结果发现事情没这么简单。我之前也卡在这一步卡了很久。SSH 能连,但 scp 和 rz 全被堵死&…

2026/9/23 2:37:26

3个维度搞定心理诊断:告别文档迷路,实战项目直接抄

3个维度搞定心理诊断:告别文档迷路,实战项目直接抄 别再对着几十页的官方文档发呆抓重点了。做技术选型时,那种“到底选哪个”的纠结,就像在迷宫里找不到出口。 今天咱们不整虚的,直接上干货。结合我最近带团队做的几个 实战项目 ,把 心理诊断…

2026/9/23 2:37:26

2026最新草棚避坑指南:3步搞懂底层逻辑

2026最新草棚避坑指南:3步搞懂底层逻辑 官方文档太长抓不住重点,是不是你打开技术百科时的第一反应?别慌,2026最新的实战经验告诉你,搞懂“草棚”这类基础概念的底层原理,根本不需要啃完那几页纸。很多初学者一看到术语就头大,其实只要把抽象…

2026/9/23 2:37:26

MATLAB仿真2FSK调制解调:包络检波与相干解调对比详解

咱们今天不整那些虚的,直接拿MATLAB把2FSK调制解调从头到尾捋一遍。标题里写了重点对比包络检波和相干解调,那这篇就把两套解调方案都做出来,从原理到代码再到误码率曲线,一步都不落下。不管你是通信课设要用,还是面试…

2026/9/23 2:32:26

UML序列图实战:从问答系统联调事故到可维护设计文档

简介:这是一份面向软件工程学习者、系统分析与设计人员及 UML 初学者的序列图学习资料,围绕问答系统这一典型场景,系统讲解时序图的核心概念与建模方法。内容涵盖角色、对象、生命线、激活期与消息五大元素,并深入说明对象三种命名…

2026/9/22 10:02:42

GAMP 5 基于风险的计算机化系统验证:软件分类与审计追踪实践

简介:《A Risk-Based Approach to Compliant GxP Computerized Systems》即业内熟知的GAMP 5指南,面向制药企业质量与IT合规人员、验证工程师及计算机化系统管理者,用于解决GxP法规环境下系统合规性难以科学落地的问题。文档以风险管理为主线…

2026/9/22 9:07:39

安全托管MSSP实战:从静态防御到人机协同的攻防运营与应急响应

简介:这份PPT围绕互联网业务安全托管服务展开,面向企业安全负责人、IT运维人员及关注MSSP/MSS选型的读者,重点回应传统安全过度依赖人工、碎片化静态防御难以对抗产业化攻击等痛点。资源共1个pptx文件,包体约30.63MB,以…

2026/9/23 0:01:54

3个实战技巧搞定形式英语:从看教程到跑通性能优化

3个实战技巧搞定形式英语:从看教程到跑通性能优化 看了一堆教程还是不会写项目?别慌,这种“眼高手低”的困境在开发者圈子里太常见了。很多人以为卡点在语法,其实真正拦路虎是缺乏将知识点串联成完整链路的能力。今天咱们不聊虚的,直接拿【形式英语】这…

2026/9/22 16:34:32

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/22 20:01:30

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/22 13:25:41

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
咨询二维码