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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Scikit-Learn机器学习实践——垃圾短信识别相关的知识,希望对你有一定的参考价值。

文章首发个人博客:http://zmister.com/archives/173.html


前不久,我们使用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%,很不错。

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

技术分享图片

技术分享图片

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

短信数据下载链接关注公众号“州的先生”,回复关键字“垃圾短信识别”可以获取。


本文出自 “州的先生” 博客,请务必保留此出处http://6230973.blog.51cto.com/6220973/1983254

以上是关于Scikit-Learn机器学习实践——垃圾短信识别的主要内容,如果未能解决你的问题,请参考以下文章

Python机器学习库scikit-learn实践

scikit-learn机器学习逻辑回归进行二分类(垃圾邮件分类),二分类性能指标,画ROC曲线,计算acc,recall,presicion,f1

一文帮你搞定Yolov3

郑捷《机器学习算法原理与编程实践》学习笔记(第三章 决策树的发展)_Scikit-learn与回归树

朴素贝叶斯分类垃圾短信和R实现

人工智能机器学习及与智能数据处理Python使用朴素贝叶斯算法对垃圾短信数据集进行分类