热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

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

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

一、引子

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

二、分类与垃圾短信识别

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

  • 分类(监督)

  • 回归(监督)

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

三、垃圾短信识别

嗯,直接上手干……( ̄_, ̄ )
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()
 

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


最后一列为短信的内容,倒数第二列则是短信的类型,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()
 

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


分别将不同类型分词后的短信保存为不同的文件:

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中怎么使用朴素贝叶斯进行垃圾短信识别”的内容了,经过本文的学习后,相信大家对Python中怎么使用朴素贝叶斯进行垃圾短信识别这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程笔记,小编将为大家推送更多相关知识点的文章,欢迎关注!


推荐阅读
  • 必备核心算法神经网络通俗讲解
    深度学习传统算法VS人工智能算法传统算法:都是人为去计算人工智能算法:部分人为需要做的事情交由机器去做【把更多的问题简单化】IT的发展比较高端的就是A ... [详细]
  • 「爆干7天7夜」入门AI人工智能学习路线一条龙,真的不能再透彻了
    前言应广大粉丝要求,今天迪迦来和大家讲解一下如何去入门人工智能,也算是迪迦对自己学习人工智能这么多年的一个总结吧,本条学习路线并不会那么 ... [详细]
  • 【跨越鸿沟】学术界与工业界的GAP有多大?
    来自:美团技术团队2020年7月31日,由中国图象图形学学会主办、视觉大数据专委会承办,北京智源人工智能研究院和美团协办的ECCV2020 ... [详细]
  • 2018年人工智能大数据的爆发,学Java还是Python?
    本文介绍了2018年人工智能大数据的爆发以及学习Java和Python的相关知识。在人工智能和大数据时代,Java和Python这两门编程语言都很优秀且火爆。选择学习哪门语言要根据个人兴趣爱好来决定。Python是一门拥有简洁语法的高级编程语言,容易上手。其特色之一是强制使用空白符作为语句缩进,使得新手可以快速上手。目前,Python在人工智能领域有着广泛的应用。如果对Java、Python或大数据感兴趣,欢迎加入qq群458345782。 ... [详细]
  • 本文介绍了在Python3中如何使用选择文件对话框的格式打开和保存图片的方法。通过使用tkinter库中的filedialog模块的asksaveasfilename和askopenfilename函数,可以方便地选择要打开或保存的图片文件,并进行相关操作。具体的代码示例和操作步骤也被提供。 ... [详细]
  • 推荐系统遇上深度学习(十七)详解推荐系统中的常用评测指标
    原创:石晓文小小挖掘机2018-06-18笔者是一个痴迷于挖掘数据中的价值的学习人,希望在平日的工作学习中,挖掘数据的价值, ... [详细]
  • ASP.NET2.0数据教程之十四:使用FormView的模板
    本文介绍了在ASP.NET 2.0中使用FormView控件来实现自定义的显示外观,与GridView和DetailsView不同,FormView使用模板来呈现,可以实现不规则的外观呈现。同时还介绍了TemplateField的用法和FormView与DetailsView的区别。 ... [详细]
  • web.py开发web 第八章 Formalchemy 服务端验证方法
    本文介绍了在web.py开发中使用Formalchemy进行服务端表单数据验证的方法。以User表单为例,详细说明了对各字段的验证要求,包括必填、长度限制、唯一性等。同时介绍了如何自定义验证方法来实现验证唯一性和两个密码是否相等的功能。该文提供了相关代码示例。 ... [详细]
  • 本文介绍了Python语言程序设计中文件和数据格式化的操作,包括使用np.savetext保存文本文件,对文本文件和二进制文件进行统一的操作步骤,以及使用Numpy模块进行数据可视化编程的指南。同时还提供了一些关于Python的测试题。 ... [详细]
  • 超级简单加解密工具的方案和功能
    本文介绍了一个超级简单的加解密工具的方案和功能。该工具可以读取文件头,并根据特定长度进行加密,加密后将加密部分写入源文件。同时,该工具也支持解密操作。加密和解密过程是可逆的。本文还提到了一些相关的功能和使用方法,并给出了Python代码示例。 ... [详细]
  • .NetCoreWebApi生成Swagger接口文档的使用方法
    本文介绍了使用.NetCoreWebApi生成Swagger接口文档的方法,并详细说明了Swagger的定义和功能。通过使用Swagger,可以实现接口和服务的可视化,方便测试人员进行接口测试。同时,还提供了Github链接和具体的步骤,包括创建WebApi工程、引入swagger的包、配置XML文档文件和跨域处理。通过本文,读者可以了解到如何使用Swagger生成接口文档,并加深对Swagger的理解。 ... [详细]
  • 本人学习笔记,知识点均摘自于网络,用于学习和交流(如未注明出处,请提醒,将及时更正,谢谢)OS:我学习是为了上 ... [详细]
  • pythonMatplotlib(二)
    Matplotlib+pandas作图一、对csv文件进行提取ruixi.csv对上述表格进行提取并做图画出图像二、对.xlsx进行提取:rui ... [详细]
  • 动量|收益率_基于MT策略的实战分析
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了基于MT策略的实战分析相关的知识,希望对你有一定的参考价值。基于MT策略的实战分析 ... [详细]
  • 代码如下:#coding:utf-8importstring,os,sysimportnumpyasnpimportmatplotlib.py ... [详细]
author-avatar
波猫小丝992
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有