学分高考 IT技术

人工智能AI培训_垃圾邮件识别案例

发布时间: 2022-03-17 05:57:01

人工智能AI培训_垃圾邮件识别案例

1.总体思路
1、从电子邮箱中收集垃圾和非垃圾邮件训练集。
2、读取全部训练集,删除其中的干扰字符,例如【】*。、,等等,然后分词,删除长度为1的单个字。
3、统计全部训练集中词语的出现次数,截取出现次数最多的前N(可以根据实际情况进行调整)个。
4、根据每个经过第2步预处理后垃圾邮件和非垃圾邮件内容生成特征向量,统计第3步中得到的N个词语分别在本邮件中的出现频率。
5、根据第4步中得到特征向量和已知邮件分类创建并训练朴素贝叶斯模型。
6、读取测试邮件,参考第2步,对邮件文本进行预处理,提取特征向量。

7、使用第5步中训练好的模型,根据第6步提取的特征向量对邮件进行分类。

2.代码目录结构

AI培训

3.编写mail_savemodel.py文件
3.1.导入需要用到的标准库和扩展库对象
from re import sub
from os import listdir
from collections import Counter
from itertools import chain
from numpy import array
from jieba import cut
from sklearn.externals import joblib
from sklearn.naive_bayes import MultinomialNB

​3.2.读取全部训练集,删除干扰字符或长度为1的单词
​#存放所有文件中的单词
​#每个元素是一个子列表,其中存放一个文件中的单词
​allWords = []
​def getWordsFromFile(txtFile):
​ words = []
​ with open(txtFile,encoding="utf8") as fp:
​ for line in fp:
​ line = line.strip()
​ #过滤干扰字符或无效字符
​ line = sub(r'[.【】0-9、-。,!~*]','',line)
​ line = cut(line)
​ words.extend(line)
​ return words
​​3.3.获取并返回出现次数最多的前topN个单词
​def getTopNWords(topN):
​ #按文件编号顺序处理当前文件夹中所有记事本文件
​ #共151封邮件内容,0.txt到126.txt是垃圾邮件内容
​ #127.txt到150.txt为正常邮件内容
​ txtFiles = ["data/"+str(i)+".txt" for i in range(151)]
​ #获取全部单词
​ for txtFile in txtFiles:
​ allWords.append(getWordsFromFile(txtFile))
​ #获取并返回出现次数最多的前topN个单词
​ freq = Counter(chain(*allWords))
​ return [w[0] for w in freq.most_common(topN)]

​#全部训练集中出现次数最多的前600个单词
​topWords = getTopNWords(600)
​​3.4.创建贝叶斯模型,使用已有数据进行训练
​#获取特征向量,前600个单词的每个单词在每个邮件中出现的频率
​vector = []
​for words in allWords:
temp = list(map(lambda x:words.count(x),topWords))
​ vector.append(temp)
​vector = array(vector)
​#邮件标签,1表示垃圾邮件,0表示正常邮件
​labels = array([1]*127+[0]*24)
​#创建模型,使用已知训练集进行训练
​model = MultinomialNB()
​model.fit(vector,labels)
​​3.5.保存模型
joblib.dump(model,"垃圾邮件分类器.pkl")
with open("topWords.txt","w",encoding="utf8") as fp:
fp.write(",".join(topWords))
print("保存topWords成功.")

4.编写mail_loadmodel.py文件
​4.1.加载模型
def getWordsFromFile(txtFile):
words = []
with open(txtFile,encoding="utf8") as fp:
for line in fp:
line = line.strip()
#过滤干扰字符或无效字符
line = sub(r'[.【】0-9、-。,!~*]','',line)
line = cut(line)
words.extend(line)
return words

model = joblib.load("垃圾邮件分类器.pkl")
print('加载模型和训练结果成功。')
with open("topWords.txt",encoding="utf8") as fp:
topWords = fp.read().split(",")

​4.2.使用训练好的模型对未知邮件内容进行分类。
def predict(txtFile):
#获取指定邮件文件内容,返回分类结果
words = getWordsFromFile(txtFile)
currentVector = array(tuple(map(lambda x:words.count(x),topWords)))
result = model.predict(currentVector.reshape(1,-1))
return "垃圾邮件" if result==1 else "正常邮件"

#151.txt至155.txt为测试邮件的内容
for mail in ('data/%d.txt'%i for i in range(151,156)):
print(mail,predict(mail),sep=":")

温馨提示:
本文【人工智能AI培训_垃圾邮件识别案例】由作者教培参考提供。该文观点仅代表作者本人,学分高考系信息发布平台,仅提供信息存储空间服务,若存在侵权问题,请及时联系管理员或作者进行删除。
我们采用的作品包括内容和图片部分来源于网络用户投稿,我们不确定投稿用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的权利,请联系我站将及时删除。
内容侵权、违法和不良信息举报
Copyright @ 2024 学分高考 All Rights Reserved 版权所有. 湘ICP备17021685号