Scikit-Learn机器学习实践:垃圾短信识别

机器学习与垃圾短信识别

前不久,我们使用NLTK的贝叶斯分类模型垃圾对短信数据进行机器学习的垃圾短信识别。

其实除了使用NLTK,我们还可以使用Scikit-Learn这个集成了诸多机器学习算法的模块进行上述的实验。

Scikit-Learn的API设计非常合理和高效,对于初触机器学习的同学来说非常友好,值得大家尝试和使用。本人也经常在实验环境和工作环境中使用scikit-learn进行机器学习的建模。

下面,我们就使用scikit-learn模块,通过其朴素贝叶斯算法API对短信数据进行一次垃圾短信的识别。

导入短信数据

首先,我们需要对原始的短信数据进行处理,导入pandas模块和jieba模块。

pandas模块用于读取和处理数据,jieba模块用于对短信进行分词。

接着,我们导入短信数据:

查看一下部分短信数据:

其中第一列为原始序号,第二列为短信的分类,0表示正常短信,1表示垃圾短信,第三列就是短信的正文。 我们只需要关注第二和第三列。

查看一下这个短信数据集的形状:

一共有七十余万条短信。

对短信进行分词

文本的分类,基本上是基于词袋模型,也就是一个文本中包含多少词以及各个词的频率。对于英文而已,其天生的句子空格可以很容易的分割单词出来,但是中文就得先进行分词处理,也就是将一个完整的中文分割为一个一个词。 在Python中,有第三方模块——jieba,结巴分词来提供对中文的分词。 我们使用jieba对短信的内容进行分词。

得到的结果如下:

提取特征和目标数据

我们需要分别提取出特征数据和目标数据,特征数据表示输入的数据,目标数据则是输入数据的属性,在这里,短信内容就是特征数据,短信的分类就是目标数据。

X中都是特征数据,y中都是目标数据,便于下一步的分割训练集和测试集。

分割训练集和测试集

使用sklearn的分割模块对训练集和测试集进行分割:

提取文本特征

从文本中提取特征,需要利用到scikit-learn中的CountVectorizer()方法和TfidfTransformer()方法。 CountVectorizer()用于将文本从标量转换为向量,TfidfTransformer()则将向量文本转换为tf-idf矩阵。

建立朴素贝叶斯分类器并进行训练

朴素贝叶斯是一个很经典同时准确率也很高的机器学习算法,用它来做分类器可以得到很好的效果。

在scikit-learn中,每一个模型都会有一个fit()方法用来模型训练,有一个predict()方法用来模型预测,在此我们就传入了训练特征和训练目标进行了模型的训练。

模型测试

模型训练好之后,我们可以使用模型的predict()方法来测试与预测数据。 在这之前,我们还得进行另外一步。 因为之前对文本提取特征只是针对于训练集,测试集并没有进行,所以我先对测试集进行文本特征提取:

再使用predict()方法进行预测:

变量predicted_categories中包含的就是所有的预测结果。

模型评估

scikit-learn模块中内置了很多模型评估的方法,对于分类问题,我们可以使用accuracy_score()方法,其返回一个数值,得分最高为1。

打印出来的结果显示:

这个分类器的准确率达到了0.98,比上一次使用NLTK的贝叶斯算法高出了10%,很不错。

可以打印部分测试的短信数据以及预测的结果来看:

基本上正常短信和垃圾短信都被正确识别出来了。

短信数据下载链接回复关键字“垃圾短信识别”可以获取。

原文发布于微信公众号 - 州的先生(zmister2016)

原文发表时间:2017-11-16

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏CVer

[计算机视觉论文速递] 2018-07-02 图像分割专场

这篇文章有2篇论文速递,都是图像分割方向,包括运动捕捉图像的语义分割、将FCN和GAN结合的巩膜分割。其中一篇是ACM SIGGRAPH 2018,另一篇是BT...

893
来自专栏算法channel

@all: 新浪 机器学习算法岗 面试实录

二面面试官来了。是个算法大佬。是个专门做算法的。直接手出题,他说时间不多,就让我说思路。

1152
来自专栏AI科技评论

学界 | MnasNet论文解读:终端轻量化模型新思路

AI 科技评论按,本文作者陈泰红(ahong007@yeah.net),他为 AI 科技评论撰写了关于 MnasNet 论文的独家解读文章。

761
来自专栏ATYUN订阅号

如何通过热图发现图片分类任务的数据渗出

文末GitHub链接提供了生成以下图片所需的数据集和源代码。本文的所有内容都可以在具有1G内存GPU的笔记本电脑上复现。

671
来自专栏AI黑科技工具箱

新的正则化神器:DropBlock(Tensorflow实践)

在我们测试MNIST上,3层卷积+ dropXXX,所有参数均为改变的情况下,可以提升MNIST准确率1〜2点。

4416
来自专栏AI星球

吾爱NLP(4)—基于Text-CNN模型的中文文本分类实战

转眼学生生涯就结束了,在家待就业期间正好有一段空闲期,可以对曾经感兴趣的一些知识点进行总结。

1.3K7
来自专栏视觉求索无尽也

【调参经验】图像分类模型的调参经验前言调参经验与我交流

用深度学习做图像分类任务也有近一年时间了,从最初模型的准确率只有60%到后来调到有80%,再到最后的90%+的准确率,摸索中踩了很多坑,也总结出了一些经验。现在...

802
来自专栏人工智能LeadAI

基于Text-CNN模型的中文文本分类实战

转眼学生生涯就结束了,在家待就业期间正好有一段空闲期,可以对曾经感兴趣的一些知识点进行总结。

2174
来自专栏智能算法

分类算法之朴素贝叶斯分类(Naive Bayesian classification)

如果用一句话来概括贝叶斯分类器,那就是:根据样本集中的先验信息,来推算出某一个样本属于某一类的概率,然后根据推算出来的结果将该样本分为某类 。贝叶斯分类是一类分...

2837
来自专栏瓜大三哥

DeepID3(0.9745):商汤科技

深度学习在人脸识别领域的应用提高了人脸识别的准确率。本文中,使用了两种深度神经网络框架(VGG net和GoogleLeNet)来进行人脸识别。两种框架ense...

2675

扫码关注云+社区