千家信息网

Python中怎么使用朴素贝叶斯进行垃圾短信识别

发表于:2025-12-02 作者:千家信息网编辑
千家信息网最后更新 2025年12月02日,这篇文章主要讲解了"Python中怎么使用朴素贝叶斯进行垃圾短信识别",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"Python中怎么使用朴素贝叶斯进行
千家信息网最后更新 2025年12月02日Python中怎么使用朴素贝叶斯进行垃圾短信识别

这篇文章主要讲解了"Python中怎么使用朴素贝叶斯进行垃圾短信识别",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"Python中怎么使用朴素贝叶斯进行垃圾短信识别"吧!

一、引子

现在的很多手机管理软件都有垃圾短信拦截的功能,很智能很贴心是不是
嗯~ o( ̄▽ ̄)o
对于经常被垃圾短信骚扰的人来说,很是有用。(๑•̀ㅂ•́)و✧
但是很多的拦截软件在拦截到垃圾短信之后……又发个通知提示拦截到了垃圾短信╮(﹀_﹀)╭
好奇心害死猫,你告诉了我你拦截到了垃圾短信,我当然想知道你拦截的是什么垃圾短信了╮(╯_╰)╭

二、分类与垃圾短信识别

机器学习按性质来看,可以分为三大类:

  • 分类(监督)

  • 回归(监督)

  • 聚类(半监督)
    垃圾短信通常用已标记的短信数据,对未知的短信进行判断,其属于机器学习中的分类性质。
    在Python中有很多机器学习的模块,比如Sklearn、Tensorflow、Caffe等,可以很方便地调用一些机器学习的算法。

三、垃圾短信识别

嗯,直接上手干……( ̄_, ̄ )
80w训练数据集和20w测试数据集均来源于github上的一位小哥哥,在此谢过d=====( ̄▽ ̄*)b

1、数据处理

嗯,先看看数据长啥样:

import pandas as pddata = pd.read_csv(r"H:\RubbishMessage\data\80w.txt",encoding='utf-8',sep='    ',header=None)data.head()


最后一列为短信的内容,倒数第二列则是短信的类型,0表示正常短信,1表示垃圾短信。
然后,我们对短信内容按照不同的类型(正常短信和垃圾短信)进行分割和分词:

# 垃圾短信import jiebaspam = 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_accuracyfeaturesets = [(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中怎么使用朴素贝叶斯进行垃圾短信识别这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!

短信 垃圾 学习 贝叶 数据 朴素 内容 机器 分类 不同 特征 类型 监督 训练 准确率 性质 文件 标记 模块 模型 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 网络技术服务协议模板 徽师网络安全教育工作会 燃烧的远征怒炉服务器怎么样 计算机网络技术知识树 军事网络安全保护需要 乱世王者服务器已爆满 远程服务器设置花生壳 系统和网络安全策略有哪些 魔兽世界转服务器装备 服务器维修北京云主机 服务器系统如何打开服务管理 报考服务器 开票系统更新数据库失败 数据库一对多存json可以吗 互联网服务器根被切断 软件开发有半导体芯片技术吗 沃克数据库 戴尔服务器r730的结构是什么 在软件开发项目中遇到的问题 剑网三端游怎么开服务器 选择好的网络安全零信任安全 数据库管理系统tds 如何查找数据库字段 政治手抄报网络安全 安徽视频点播软件开发外包公司 管理服务器与管理平台的区别 守护未来青少年网络安全防范 关于服务器的优美句子 软件开发企业实训项目有哪些 油墨投影控制软件开发
0