实战:垃圾短信分类检测

本文通过朴素贝叶斯分类器实现垃圾短信检测,介绍数据预处理、词袋方法(包括自造轮子和使用sklearn库)、模型训练与测试、以及模型评估。使用伦敦大学学院的机器学习数据集,通过pandas处理数据,CountVectorizer构建词袋模型,并展示模型在准确率、精度、召回率和F1分数上的表现。
摘要由CSDN通过智能技术生成

上次我们讲到朴素贝叶斯分类,忘记的同学参考一文搞懂朴素贝叶斯分类,今天就通过朴素贝叶斯分来来实现一个简单的垃圾短信分类器。

数据预处理

实现这个分类器我们使用的数据集来自伦敦大学学院的机器学习数据集(UCL machine learning),图中所示为该数据集的部分数据:

一般用 pandas 模块来处理数据, 在这里需要用到 pandas 的read_table()方法,原因是文档集两列之间用了tab键来分割.如果对于read_table()该选择哪些参数不明确的话,需要先阅读 pandas 的官方 API 文档,这里就不详细介绍了,很容易就搜索到。提一点,read_table()默认分隔符就是以 tab 键来分割数据。

import pandas as pd
#读取数据
df = pd.read_table("yourfilepath", names=['label', 'sms_message'])
df.head()

通过上述代码可以读取数据并把前 5 行数据打印出来:

接下来,进行数据预处理,将 ham 和 spam 分别用 1 和 0 表示,为什么这么做呢?原因是机器只能识别机器语言,不能识别自然语言,如果把 label 用 string 类型来表示的话,scikit-learn 最后会自动转换成不识别的 float 型的值。
如果 label 按照 string 类型来表示,模型也照样有能力预测,不过通常在计算性能指标的时候会出现问题,比如召回率,精度等。代码如下:

# 做一个 map 表,0 表示‘ham',1 表示’spam‘
df['label'] = df.label.map({
  'ham':0, 'spam':1})
df.head()

词袋方法

在处理文本信息

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值