sklearn垃圾邮件识别
垃圾邮件识别,算是一个二分类问题,也是一个相对简单的文本分类问题。
本文数据来自UCI机器学习仓库中的垃圾信息数据集,从http://archive.ics.uci.edu/ml/datasets/sms+spam+collection下载。
文件中每一行由两部分组成,行首是标签 spam/ham(spam 代表垃圾邮件),中间空一格,之后是邮件内容。
以下代码是一个整体,如需复制,将除了函数部分的代码按顺序复制,函数需要放在库和其它代码之间
需要用到的库:
import nltk
from nltk.corpus import stopwords
from nltk.stem import WordNetLemmatizer
from sklearn.model_selection import train_test_split
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.naive_bayes import MultinomialNB
数据提取
源文件无类型后缀,就当作普通文本文件读取:
sms_data = open('.\SMSSpamCollection', 'r', encoding='utf-8')
x = []
y = []
for line in sms_data.readlines():data = line.split('\t')y.append(data[0])x.append(text_dispose(data[1].split('\n')[0]))
sms_data.close()
数据预处理
上面倒数第二行里面使用了一个自定义函数,把与邮件内容关系不大的单词(停用词等)去除,这样做能减少特征数量但对训练精度没什么影响
因为数据集中的内容为英文,这里我使用 NLTK 库进行处理,如果选择中文数据更推荐使用 jieba 库
def text_dispose(text):# 将每个单词和符号分开sentences = nltk.sent_tokenize(text)words = [word for sent in sentences for word in nltk.word_tokenize(sent)]stops = stopwords.words('english')# 去除停用词words = [word for word in words if words not in stops]words = [words.lower() for words in words if len(words) >= 3]# 词汇化lemmatizer = WordNetLemmatizer()words = [lemmatizer.lemmatize(words) for words in words]dispose_text = ' '.join(words)return dispose_text
数据拆分及文本特征处理
数据拆分成常见的三七开
特征处理是文本分类的关键部分,因为我们不可能把整个文本内容直接放进模型中训练,所以需要将文本表示为计算机可以识别的、能够代表该文档特征的特征矩阵
# 拆分
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.3, random_state=1)
# 特征处理
vectorizer = TfidfVectorizer(min_df=2, ngram_range=(1,2), stop_words='english', strip_accents='unicode',norm='l2')
X_train = vectorizer.fit_transform(x_train)
X_test = vectorizer.transform(x_test)
TfidfVectorizer
可以把原始文本转化为 TF-IDF
的特征矩阵
选择模型并训练
这里使用朴素贝叶斯分类器
model = MultinomialNB()
model.fit(X_train,y_train)
score = model.score(X_test, y_test)
print(score)
因为 sklearn 的高度封装,只需几行代码就可以使用特定算法。我们不需要写出算法的流程,只要知道其功能即可,所以 sklearn 适用于快速构建模型。当然如果想让算法定制性更强,则需要自行构建
看评分结果:
0.9689181111775254
sklearn垃圾邮件识别相关推荐
- 垃圾邮件识别-朴素贝叶斯算法
1.数据集 垃圾邮件识别使用的数据集为Enron-Spam数据集,该数据集是目前在电子邮件相关研究中使用最多的公开数据集,其邮件数据是安然公司(Enron Corporation, 原是世界上最大的综 ...
- python垃圾邮件识别_【Python】垃圾邮件识别
下载W3Cschool手机App,0基础随时随地学编程 导语 利用简单的机器学习算法实现垃圾邮件识别. 让我们愉快地开始吧~ 相关文件 密码: qa49 数据集源于网络,侵歉删. 开发工具 Pytho ...
- python垃圾邮件识别_Python 手写朴素贝叶斯分类器检测垃圾邮件/短信
自己从头手写一下这些经典的算法,不调用 sklearn 等 API,调一调参数,蛮有收获和启发. 数据集 概要:5572 条短信,13% 的 spam. 选择这个数据集的原因:短信的文本预处理要比 e ...
- python垃圾邮件识别_Python贝叶斯推理垃圾邮件分类
针对贝叶斯垃圾邮件分类,阮一峰大神在多年前曾经写过一篇博客文章,他写的有些观点看起来很简单明了,不过我有点不是很理解其推导过程,虽然最后的结果等价,但是我还是觉得他的那套简单推导,感觉不太容易理解,可 ...
- 基于朴素贝叶斯的垃圾邮件识别
在网上看到很多用朴素贝叶斯算法来实现垃圾邮件分类的,有直接调用库的,也有自己写的.出于对贝叶斯算法的复习,我也想用贝叶斯算法写写邮件识别,做一个简单的识别系统. 一.开发环境 Python3.6,邮件 ...
- 使用BloomFilter布隆过滤器解决缓存击穿、垃圾邮件识别、集合判重
Bloom Filter是一个占用空间很小.效率很高的随机数据结构,它由一个bit数组和一组Hash算法构成.可用于判断一个元素是否在一个集合中,查询效率很高(1-N,最优能逼近于1). 在很多场景下 ...
- 机器学习贝叶斯-垃圾邮件识别
文章目录 一.何为贝叶斯 二.项目实战-垃圾分类 1. 导包 2. 代码示例 3. 测试代码 4.测试结果 一.何为贝叶斯 贝叶斯基本公式:P(A|B)=P(B|A)*P(A)/P(B) 假设事件 B ...
- 《Web安全之机器学习入门》笔记:第十五章 15.7与15.8 TensorFlow识别垃圾邮件
本小节通过识别垃圾邮件,讲解tensorflow通过神经网络DNN在网络安全方向的应用,同时还对比了NB算法的垃圾邮件识别效果. 1.数据集与特征化 本小节使用SpamBase这个入门级垃圾邮件数据集 ...
- python发邮件不进入垃圾箱_Python识别垃圾邮件|python3教程|python入门|python教程
https://www.xin3721.com/eschool/pythonxin3721/ 本文转载至知乎ID:Charles(白露未晞)知乎个人专栏 下载W3Cschool手机App,0基础随时随 ...
- Python识别垃圾邮件
导语 利用简单的机器学习算法实现垃圾邮件识别. 让我们愉快地开始吧~ 相关文件 百度网盘下载链接: https://pan.baidu.com/s/1Hsno4oREMROxWwcC_jYAOA 密码 ...
最新文章
- HTTP协议类POST 和GET的区别
- 64位openSUSE12.3最完整的安装QQ的方法
- linux如何扩展根分区,linux扩展根分区详细步骤
- 串口服务器常见异常情况排除方法介绍
- Scrapy爬取hupu论坛标题统计数量并生成wordcloud
- 远程 mysql error 2003_远程连接MySQL报错ERROR 2003解决办法
- Webshell管理工具
- 修改root用户文件权限为普通用户
- redis 集群扩容方案
- 图形 3.6 纹理压缩——包体瘦身术——RGBA与ASTC与ETC2压缩与实际对比体验
- 5G大规模MIMO技术
- 通过禁用文件夹权限解决微信pc端朋友圈自动播放视频的问题
- 11 | 向埃隆·马斯克学习任务分解
- burntest Linux参数,限拷机软件IntelBurnTest 2.0
- 怎样可以在线将pdf转换成jpg格式
- Eclipse安装与使用教程
- Java读取txt格式文件打印到控制台
- UMLChina建模竞赛第3赛季第8轮:交友辅助系统,赵雅芝
- 各进制之间的转换(二、八、十、十六)
- 人工智能之搜索策略-A*算法进阶