作者:波猫小丝992 | 来源:互联网 | 2023-08-04 08:35
这篇文章主要讲解了“Python中怎么使用朴素贝叶斯进行垃圾短信识别”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python中怎么使用朴素贝叶斯进行垃圾短信识别”吧!
一、引子
现在的很多手机管理软件都有垃圾短信拦截的功能,很智能很贴心是不是
嗯~ o( ̄▽ ̄)o
对于经常被垃圾短信骚扰的人来说,很是有用。(๑•̀ㅂ•́)و✧
但是很多的拦截软件在拦截到垃圾短信之后……又发个通知提示拦截到了垃圾短信╮(﹀_﹀)╭
好奇心害死猫,你告诉了我你拦截到了垃圾短信,我当然想知道你拦截的是什么垃圾短信了╮(╯_╰)╭
二、分类与垃圾短信识别
机器学习按性质来看,可以分为三大类:
三、垃圾短信识别
嗯,直接上手干……( ̄_, ̄ )
80w训练数据集和20w测试数据集均来源于github上的一位小哥哥,在此谢过d=====( ̄▽ ̄*)b
1、数据处理
嗯,先看看数据长啥样:
import pandas as pd
data = pd.read_csv(r"H:\RubbishMessage\data\80w.txt",encoding='utf-8',sep=' ',header=None)
data.head()
最后一列为短信的内容,倒数第二列则是短信的类型,0表示正常短信,1表示垃圾短信。
然后,我们对短信内容按照不同的类型(正常短信和垃圾短信)进行分割和分词:
# 垃圾短信import jieba
spam = data[data[1] == 1]
spam[2] = spam[2].map(lambda x:' '.join(jieba.cut(x)))
spam.head()
# 正常短信
normal = data[data[1] == 0]
normal[2] = normal[2].map(lambda x:' '.join(jieba.cut(x)))
normal.head()
分别将不同类型分词后的短信保存为不同的文件:
spam.to_csv('soam.csv',encoding='utf-8',header=False,index=False,columns=[2])
normal.to_csv('normal.csv',encoding='utf-8',header=False,index=False,columns=[2])
2、模型选择和训练
在此我们没有选择Sklearn或是其他的深度学习库,而是选用NLTK自然语言处理库来进行贝叶斯分类。
导入模块:
import nltk.classify.util
from nltk.classify import NaiveBayesClassifier
from nltk.corpus import PlaintextCorpusReaderimport random
加载刚刚导出的短信文件:
加载短信语料库
message_corpus = PlaintextCorpusReader('./',['soam.csv','normal.csv'])
all_message = message_corpus.words()
定义一个特征函数,用于生成特征:
def massage_feature(word,num_letter=1):
return {'feature':word[-num_letter:]}
对短信特征进行标记提取:
labels_name = ([(massage,'垃圾') for massage in message_corpus.words('soam.csv')]+[(massage,'正常') for massage in message_corpus.words('normal.csv')])
random.seed(7)
random.shuffle(labels_name)
训练并预测模型
from nltk.classify import accuracy as nltk_accuracy
featuresets = [(massage_feature(n),massage) for (n,massage) in labels_name]
train_set,test_set = featuresets[2000:],featuresets[:2000]
classifier = NaiveBayesClassifier.train(train_set)
最后,咱们看看预测的准确率怎么样:
print('结果准确率:',str(100*nltk_accuracy(classifier,test_set))+str('%'))
感谢各位的阅读,以上就是“Python中怎么使用朴素贝叶斯进行垃圾短信识别”的内容了,经过本文的学习后,相信大家对Python中怎么使用朴素贝叶斯进行垃圾短信识别这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程笔记,小编将为大家推送更多相关知识点的文章,欢迎关注!