【机器学习】实验3布置:贝叶斯垃圾邮件识别

这篇博客分享了使用学堂在线《机器学习》课程中的实验,基于Trec06中文垃圾邮件数据集,运用朴素贝叶斯算法进行邮件分类。作者提供了代码、报告及部分PPT,强调测试集准确率、精准率和召回率需超过0.9。此外,还探讨了特征数量对模型效果的影响,并鼓励读者尝试邮件头信息的利用、自行实现算法及比较不同概率计算方法。
摘要由CSDN通过智能技术生成

ML_class

学堂在线《机器学习》实验课代码+报告(其中实验1和实验6有配套PPT),授课老师为张敏老师。课程链接:https://www.xuetangx.com/training/ML080910036802/1048372?channel=i.area.page_course_ad

持续更新中。
所有代码为作者所写,并非最后的“标准答案”,只有课程设计被扣了1分,其余皆是满分。仓库链接:https://github.com/W-caner/ML_class。 此外,欢迎关注我的CSDN:https://blog.csdn.net/Can__er?type=blog
部分数据集由于过大无法上传,我会在博客中给出下载链接。如果对代码有疑问,有更好的思路等,也非常欢迎在评论区与我交流~

EXP3 贝叶斯垃圾邮件识别

本次作业以垃圾邮件分类任务为基础,要求提取文本特征并使用朴素贝叶斯算法进行垃圾邮件识别(调用已有工具包或自行实现)。

任务介绍

电子邮件是互联网的一项重要服务,在大家的学习、工作和生活中会广泛使用。但是大家的邮箱常常被各种各样的垃圾邮件填充了。有统计显示,每天互联网上产生的垃圾邮件有几百亿近千亿的量级。因此,对电子邮件服务提供商来说,垃圾邮件过滤是一项重要功能。而朴素贝叶斯算法在垃圾邮件识别任务上一直表现非常好,至今仍然有很多系统在使用朴素贝叶斯算法作为基本的垃圾邮件识别算法。

本次实验数据集来自Trec06的中文垃圾邮件数据集,目录解压后包含三个文件夹,其中data目录下是所有的邮件(未分词),已分词好的邮件在data_cut目录下。邮件分为邮件头部分和正文部分,两部分之间一般有空行隔开。标签数据在label文件夹下,文件中每行是标签和对应的邮件路径。‘spam’表示垃圾邮件,‘ham’表示正常邮件。

基本要求:
  1. 提取正文部分的文本特征;
  2. 划分训练集和测试集(可以借助工具包。一般笔记本就足够运行所有数据,认为实现困难或算力不够的同学可以采样一部分数据进行实验。);
  3. 使用朴素贝叶斯算法完成垃圾邮件的分类与预测,要求测试集准确率Accuracy、精准率Precision、召回率Recall均高于0.9(本次实验可以使用已有的一些工具包完成如sklearn);
  4. 对比特征数目(词表大小)对模型效果的影响;
  5. 提交代码和实验报告。
扩展要求:
  1. 邮件头信息有时也可以协助判断垃圾邮件,欢迎学有余力的同学们尝试;
  2. 尝试自行实现朴素贝叶斯算法细节;
  3. 尝试对比不同的概率计算方法。
1.项目代码功能经验证ok,确保稳定可靠运行。欢迎下载使用!在使用过程中,如有问题或建议,请及时私信沟通,帮助解答。 2.主要针对各个计算机相关专业,包括计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网等领域的在校学生、专业教师或企业员工使用。 3.项目具有丰富的拓展空间,不仅可作为入门进阶,也可直接作为毕设、课程设计、大作业、初期项目立项演示等用途。 基于机器学习贝叶斯算法实现垃圾邮件分类python源码+项目说明+数据集.zip Python3 - pandas - 用于保存自定义测试集下训练邮件内的单词 - pyecharts>=1.0.0 - 个人喜欢用pyecharts来做图,如果你希望使用其他作图工具,可以自动修改draw_result()函数,如果您不希望作图,可以手动注释掉bayesian.draw_result()这条语句,位于751行。注意的是,pyecharts最后保存出来的是html文件 - snapshot_selenium - 将pyecharts保存的html文件生成图片,您需要使用到chromedriver,请手动下载,如果不下载的话,您可以注释掉所有make_snapshot()语句,或者忽略终端报出来的错误 - skleran - 贝叶斯分类器是自己实现的,但SVM调用的是现成的库函数 - nltk - 用于去停用词和词性还原,需要下载一些包,您可以去官网下载,或者在百度云里下载:链接:https://pan.baidu.com/s/1_eU5sTe2bMWMJaqxA7IO8w 提取码:0pc9 ,您可以不用下载所有的包,只需要下载corpora中的stopwords和wordnet、stemmers中的porter_test和rslp、taggers中的averaged_perceptron_tagger。然后将这些文件放于C:\Users\xxxxx\AppData\Roaming\nltk_data即可) 参数解释: ``` --model:模型的选择,默认为5 - 单使用伯努利模型为1 - 单使用多项式模型为2 - 单使用SVM为3 - 三个模型同时测试,并且你已经将邮件的测试集和训练集准备好的,为4 - 三个模型同时测试,并且邮件的训练集和测试集为随机生成,为5 --train_path:训练集(或总文件)的路径,默认为'train' --test_path:测试集路径,默认为'test' --test_times:测试的次数,每次测试随机生成的测试集均不一样,默认为1 --test_file_num:每一类进行测试的邮件数目,默认为5 注意,train和test文件夹下,各自建立子文件夹spam和ham来分别存放垃圾邮件和正常邮件 ``` - 使用方法为: ``` python bayes.py --model 5 --test_times 70 ``` ```python python bayes.py --model 5 --train_path 'train' --test_times 70 --test_file_num 5 ``` ```python python bayes.py --model 5 --train_path 'train' --test_path 'test' --test_file_num 5 ``` - 结果: 如果你使用第一条命令来进行训练和测试,那么你将会得到三个模型测试后的正确率、错误邮件个数,以及三个模型对应的识别错误的邮件分布情况,如下所示: ![正确率](README.assets/正确率.png) ![错误邮件个数](README.assets/错误邮件个数.png) ![SVM-邮件错误识别](README.assets/SVM-邮件错误识别.png) ![伯努利模型-邮件错误识别](README.assets/伯努利模型-邮件错误识别.png) ![多项式模型-邮件错误识别](README.assets/多项式模型-邮件错误识别.png) 除此之外,在终端上,你可以看到用来作出这些图片的数据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值