采用贝叶斯理论进行垃圾邮件过滤是一种应用于电子邮件过滤的统计学技术。它实质是使用贝叶斯分类来对邮件的属性进行判别,这个属性包括:垃圾邮件和非垃圾邮件。
贝叶斯分类的运作是借着使用标记(一般是字词,有时候是其他)与垃圾邮件、非垃圾邮件的关联,然后搭配贝叶斯推断来计算一封邮件属于垃圾邮件的可能性。基于贝叶斯的垃圾邮件过滤是非常有效的技术,可以修改模型以符合特殊使用者的需要,并且给予较低的垃圾邮件侦测率,让使用者可接受。
1、朴素贝叶斯实现垃圾邮件分类的步骤
(1)收集数据:提供文本文件。
(2)准备数据:将文本文件解析成词条向量。
(3)分析数据:检查词条确保解析的正确性。
(4)训练算法:计算不同的独立特征的条件概率。
(5)测试算法:计算错误率。
(6)使用算法:构建一个完整的程序对一组文档进行分类。
数据集:
所采用的数据集为Enron Email Dataset。该数据集已经对正常邮件和垃圾邮件进行了分类。
import os
import re
import string
import math
DATA_DIR = 'enron'
target_names = ['ham', 'spam']
def get_data(DATA_DIR):
subfolders = ['enron%d' % i for i in range(1, 7)]
data = []
target = [] #目录
for subfolder in subfolders:
# spam
spam_files = os.listdir(os.path.join(DATA_DIR, subfolder, 'spam'))
for spam_file in spam_files:
with open(os.path.join(DATA_DIR, subfolder, 'spam', spam_file), encoding="latin-1") as f: