本文主要讲解“如何在Python中使用朴素贝叶斯识别垃圾邮件”。本文的解释简单明了,易学易懂。接下来,请跟随边肖的思路学习学习“如何用Python使用朴素贝叶斯识别垃圾邮件”!
00-1010现在很多手机管理软件都有拦截垃圾短信的功能,很智能很贴心,不是吗?
嗯~ o () o
对于经常被垃圾邮件骚扰的人非常有用。(••)
然而,在拦截垃圾邮件后,许多拦截软件.发送通知,提醒垃圾邮件已被拦截 (﹀_ ﹀) .
好奇心害死猫。你告诉我你截获了垃圾邮件。当然,我想知道你拦截了哪些垃圾邮件 (_)
00-1010机器学习根据其性质可以分为三类:
分类(监督)
退货(监督)
聚类(半监督)
垃圾短信通常使用已标记的短信数据来判断未知短信,属于机器学习中的分类性质。
Python中有很多机器学习模块,比如Sklearn、Tensorflow、Caffe等。这可以很容易地调用一些机器学习算法。
00-1010好吧,我们直接做吧.( ̄_,  ̄)
80w训练数据集和20w测试数据集都来自github上的一个小兄弟。我要感谢D====(;*)b。
00-1010好,我们先来看看数据是什么样子的:
importpandasaspd
data=PD . read _ CSV(r ' h : \ rubishmessage \ data \ 80w . txt ',编码='utf-8 ',sep=' ',header=None)
data.head()
最后一列是短信内容,倒数第二列是短信类型,0表示正常短信,1表示垃圾短信。
然后,我们根据不同的类型(普通短信和垃圾短信)对短信进行划分和分段:
#垃圾短信导入揭巴
垃圾邮件=数据[数据[1]==1]
垃圾邮件[2]=垃圾邮件[2]。map(lambda x: ' '。join(jieba.cut(x)))
spam.head()
#普通短信
正常=数据[数据[1]==0]
正常[2]=正常[2]。map(lambda x: ' '。join(jieba.cut(x)))
normal.head()
将不同类型的分段短信保存到不同的文件中:
spam.to_csv('soam.csv ',编码='utf-8 ',标头=False,索引=False,列=[2])
normal.to_csv('normal.csv ',编码='utf-8 ',标头=False,索引=False,列=[2])
一、引子
在这里,我们选择NLTK自然语言处理库进行贝叶斯分类,而不是Sklearn或其他深度学习库。
导入模块:
导入nltk . classifier . util
从nltk.classify导入天真分类器
从nltk .语料库导入PlaintextCorpusReaderimport随机
加载刚刚导出的短信文件:
加载短信语料库
message _ corps=PlainTextCorpsReader('。/',['soam.csv ',' normal.csv'])
all _ message=message _语料库. words()
定义特征函数以生成特征:
def manch _ feature(word,num_letter=1):
返回{ ' feature ' : word[-num _ letter :]}
短消息特征的标签提取;
labels _ name=([(message,'垃圾')formsseinmessage _ corpus . words(' Soam . CSV ')][(message,' normal ')formsseinmessage _ corpus . words(' normal . CSV ')])
随机种子(7)
random.shuffle(标签名)
并训练预测模型。
from nltk . class ifyimportaccurayasnlk _ accuracy
功能集=[(按摩_功能(n),按摩)适用于(n,按摩)标签_名称]
train_set,test _ set=featureset[2000:],featureset[:2000]
分类器=天真分类器. train(train_set)
最后,让我们看看预测有多准确:
打印('结果准确度:',STR (100 * NLTK _ accuracy(分类器,test _ set)) STR ('% ')
感谢阅读。以上就是“如何在Python中使用朴素贝叶斯识别垃圾邮件”的内容。学习完这篇文章,相信你对如何在Python中使用朴素贝叶斯识别垃圾邮件有了更深的理解,具体用法还需要实践验证。在这里,边肖将为您推送更多关于知识点的文章,敬请关注!
内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/123908.html