一、数据集说明
使用参考项目中提供的中文邮件数据集和中文停用词表,其中spam文件夹中有7775封垃圾邮件,normal文件夹中有7063封正常邮件,test文件夹中有392封测试邮件,test文件夹中,文件名在1至200的为正常邮件,文件名7801~8000的为垃圾邮件。
二、具体实验开展说明:
(1)先理清思路,制作了一张思维导图
(2)对于公式部分看了一遍,加深理解。
顺便去翻《概率论与数理统计》复习了一下贝叶斯公式。
(3)下载了结巴分词工具
三、结果分析
根据实验中的测试集,模型识别垃圾邮件的准确率为0.9541。
将算法的测试结果用混淆矩阵表示如下:
实际类别 | 实际类别 | ||
---|---|---|---|
垃圾邮件 | 正常邮件 | ||
预测类别 | 垃圾邮件 | 191 | 10 |
预测类别 | 正常邮件 | 8 | 183 |
灵敏度=真阳性/(真阳性+假阴性)=191/(191+8)=95.98%
特异度=真阴性/(真阴性+假阳性)=183/(183+10)=94.82%
约登指数=95.98%+94.82%-1=90.8%
四、源代码
#!/usr/bin/env python
# coding: utf-8
import os
import jieba
import re
"""获取中文停用词表"""
def get_stop_words(StopFile):
stopList=[]
for line in open(StopFile):
stopList.append(line[:len(line)-1])
return stopList
"""批量获取邮件内容"""
def get_content(filePath):
filenames=os.listdir(filePath)
content=[]
for filename in filenames:
for line in open(filePath+filename):
content.append(line[:len(line)-1])
return con