垃圾邮件分类

本文使用python基于贝叶斯算法进行邮件分类,具体步骤如下:

贝叶斯公式P(B/A)=(P(A/B)\cdot P(B))/P(A)

python使用贝叶斯公式步骤如下:

打开所在文件:

with open("d:/sms_spam1.txt","r")as f:

将文件处理,分成 label 和 feature :

#按行读取文件

line = f.readline()

#文件每一行按逗号隔开为 label 和 feature

line1 = line.split(",")

label = line1[0]

corpu = line1[1]

#将feature和 label分别存入list中,并分为测试集和训练集

corpus.append(corpu)

if 'ham'==label:

labels.append(0)

elif 'spam'==label:

labels.append(1)

#30行之后为测试集

if count>30:

corpus_test.append(corpu)

if 'ham' ==label:

labels_test.append(0)

elif 'spam'==label:

labels_test.append(1)


#文本特征提取:

#将文本特征转换为特征向量的过程

#采用词袋法进行文本特征提取

#词袋法:

#将文章中出现过的词作为一列特征

#这些不重复的特征词汇集合为词表

#构建词袋

vectorize = CountVectorizer()

#fea_train是每一封邮件中出现词表中词汇个数的矩阵

fea_train = vectorize.fit_transform(corpus)


#从第一个词表中创建第二个词表

vectorize2 = CountVectorizer(vocabulary=vectorize.vocabulary_)

#生成测试邮件中出现词表中词汇个数的矩阵

fea_test = vectorize2.fit_transform(corpus_test)


#拉普拉斯估计给每个单词加一,alpha的设定

#训练

clf = MultinomialNB(alpha=1)

clf.fit(fea_train,labels)

#预测

pred = clf.predict(fea_test)

for p  in pred:

if p==0:

print("正常邮件")

else:

print("垃圾邮件")

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容