Python基于词袋模型特征和TFIDF特征进行支持向量机模型中文邮件分类项目实战

2023-11-13

说明:这是一个机器学习实战项目(附带数据+代码+文档+视频讲解),如需数据+代码+文档+视频讲解可以直接到文章最后获取。

 

1.项目背景

随着互联网的发展,越来越多的用户通过互联网来交流,电子邮件成为人们日常生活交流的重要工具。用户每星期可能收到成百上千的电子邮件,但是大部分是垃圾邮件。据时代杂志估计,1994年人们发送了7760亿封电子邮件,1997年则是26000亿封,2000年更是达到了66000亿封。电子邮件特别是垃圾邮件的泛滥已经严重影响电子商务活动的正常开展。人们通常要花费很多时间对电子邮件进行处理,但效果却不明显,严重影响了正常的商务活动。对邮件进行合理的分类,为用户挑选出有意义的电子邮件是所有用户的迫切要求。

目前的邮件分类方法大多是将邮件分为垃圾邮件与非垃圾邮件,从而实现对邮件的自动过滤。本项目基于词袋模型特征和TFIDF特征进行支持向量机模型中文邮件分类,邮件类别分为正常邮件和垃圾邮件。

2.数据采集

本次建模数据来源于网络,数据项统计如下:

数据详情如下(部分展示):

正常邮件:

垃圾邮件:

每一行代表一封邮件。

3.数据预处理

3.1查看数据

print("总的数据量:", len(labels))

corpus, labels = remove_empty_docs(corpus, labels)  # 移除空行

print('样本之一:', corpus[10])
print('样本的label:', labels[10])
label_name_map = ["垃圾邮件", "正常邮件"]
print('实际类型:', label_name_map[int(labels[10])])

 结果如图所示:

4.特征工程

4.1数据集拆分

把数据集分为70%训练集和30%测试集。

4.2加载停用词

 停用词列表如下,部分展示:

4.3分词

import jieba
tokens = jieba.lcut(text)
tokens = [token.strip() for token in tokens]

结果如图所示:

训练集分词展示:

测试集分词展示:

 4.4移除特殊字符

pattern = re.compile('[{}]'.format(re.escape(string.punctuation)))  # re.escape就能自动处理所有的特殊符号
# string.punctuation返回所有标点符号
filtered_tokens = filter(None, [pattern.sub('', token) for token in tokens])
filtered_text = ' '.join(filtered_tokens)

 4.5去停用词

4.6归整化

 结果如图所示:

归整化后的训练集:

归整化后的测试集:

 4.7词袋模型特征提取

# min_df:在构建词汇表时,忽略那些文档频率严格低于给定阈值的术语。
# ngram_range的(1,1)表示仅使用单字符
vectorizer = CountVectorizer(min_df=1, ngram_range=ngram_range)
features = vectorizer.fit_transform(corpus)  # 学习词汇表字典并返回文档术语矩阵

 结果如图所示:

4.8 TFIDF特征提取

 结果如图所示:

5.构建支持向量机分类模型

5.1基于词袋模型特征的支持向量机

5.2基于TFIDF特征的支持向量机

# 基于tfidf的支持向量机模型
print("基于tfidf的支持向量机模型")
svm_tfidf_predictions = train_predict_evaluate_model(classifier=svm,
                                                     train_features=tfidf_train_features,
                                                     train_labels=train_labels,
                                                     test_features=tfidf_test_features,
                                                     test_labels=test_labels)

6.模型评估

6.1评估指标及结果

评估指标主要包括准确率、查准率、查全率(召回率)、F1分值等等。

 通过上表可以看到,两种特征提取的模型的准确率均为97%,F1分值均为0.97,说明模型效果良好。

6.2分类报告

结果如图所示:

基于词袋模型特征的分类报告

类型为垃圾邮件的F1分值为0.97;类型为正常邮件的F1分值为0.97。

基于TFIDF特征的分类报告

类型为垃圾邮件的F1分值为0.97;类型为正常邮件的F1分值为0.97。

6.3混淆矩阵

# 构建数据框
cm_matrix = pd.DataFrame(data=cm, columns=['Actual :0', 'Actual :1'],
                         index=['Predict :0', 'Predict :1'])

sns.heatmap(cm_matrix, annot=True, fmt='d', cmap='YlGnBu')  # 热力图展示
plt.show()  # 展示图片

结果如图所示:

基于词袋模型特征的分类报告

从上图可以看到,预测为垃圾邮件 实际为正常邮件的有91封;预测为正常邮件  实际为垃圾邮件的有5封。

基于TFIDF特征的分类报告

从上图可以看到,预测为垃圾邮件 实际为正常邮件的有89封;预测为正常邮件  实际为垃圾邮件的有6封。

7.模型预测展示

显示正确分类的邮件:

显示错误分类的邮件:

8.总结展望

本项目应用应用两种特征提取方法进行支持向量机模型中文邮件分类研究,通过数据预处理、特征工程、模型构建、模型评估等工作,最终模型的F1分值达到0.97,这在文本分类领域,是非常棒的效果,可以应用于实际工作中。

本次机器学习项目实战所需的资料,项目资源如下:

项目说明:
链接:https://pan.baidu.com/s/1dW3S1a6KGdUHK90W-lmA4w 
提取码:bcbp

网盘如果失效,可以添加博主微信:zy10178083

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python基于词袋模型特征和TFIDF特征进行支持向量机模型中文邮件分类项目实战 的相关文章

随机推荐

  • 体验css:repeat和grid

    文章目录 一 repeat 1 语法 2 auto fill和auto fit 3 专属尺寸 fr auto max content min content 二 grid 1 设置grid布局 2 设置列宽行高 3 设置间距 4 设置分区
  • 【C++实现】 数据库连接池

    文章目录 涉及知识 为什么要弄连接池 功能介绍 成员变量讲解 代码剖析 Connection h Connection cpp ConnectionPool h ConnectionPool cpp 性能测试 难点 总结 涉及知识 MySQ
  • 解一元二次方程——Java

    解一元二次方程 可以使用下面的公式求元二次方程ax x bx c 0的两个根 b b 4ac称作一元二次方程的判别式 如果它是正值 那么一元二次方程就有两个实数根 如果它为0 方程式就只有一个根 如果它是负值 方程式无实数根 编写程序 提示
  • js中使用websocket

    后端地址是http的 websocket地址 ws开头 后端地址是https的 websocket地址wss开头 对于websocket没有跨域的问题 import MessageBox from element ui let url ws
  • Linux学习笔记--8(文件权限)

    文件权限与归属 Linux不同的字符来区分文件类型 常见如下 普通文件 d 目录文件 l 链接文件 b 块设备文件 c 字符设备文件 p 管道文件 对应目录文件 可读 表示能够读取目录内的文件列表 可写 表示能够在目录内新增 删除 重命名文
  • Oracle : ORA-02290: 违反检查约束条件

    背景 一个oracle表 有个字段开始被设置不为空 后来我想测试 把这个不为空 去掉了 然后保存 就报错 om dtwave meteor connector common exception ConnectorException Writ
  • 感知机原始形式、对偶形式的Python实现

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 感知机学习的目标就是求得一个能够将训练数据集中正负实例完全分开的分类超平面 感知机原始形式 from future import division import rando
  • Rabbitmq延迟队列实现定时任务

    场景 开发中经常需要用到定时任务 对于商城来说 定时任务尤其多 比如优惠券定时过期 订单定时关闭 微信支付2小时未支付关闭订单等等 都需要用到定时任务 但是定时任务本身有一个问题 一般来说我们都是通过定时轮询查询数据库来判断是否有任务需要执
  • 多态数组的简单代码教学

    多态数组的简单代码教学 package com hspedu polrArr public class PloyArray public static void main String args Person persons new Per
  • 基于github搭建自已的个人博客

    昨天搭建了基于github 的个人博客 在此记录搭建过程 1 环境准备 1 1 git 1 2 nodejs 1 3 hexo 1 安装命令 npm install hexo g 2 测试是否安装成功 hexo v 3 安装hexo依赖 n
  • vue 虚拟dom转换真实dom源码解析

    当不断的通过JS修改DOM时 不经意间会触发到渲染引擎的回流或者重绘 这个性能开销是非常巨大的 因此为了降低开销 我们需要做的是尽可能减少DOM操作 当我们想用JS脚本大批量进行DOM操作时 会优先作用于Virtual DOM这个JS对象
  • TCP和UDP相关问题

    目录 一 网络基础 1 OSI 七层模型划分为以下七层 不实用 2 TCP IP五层 或四层 模型 二 UDP与TCP的区别 三 如何基于UDP协议实现可靠传输 实际想说的是TCP 四 什么场景中适合使用TCP和UDP 一 网络基础 1 O
  • java web系统设计思路_JavaWeb——实战入门,设计思路总结。

    期末考试炸掉了 关于此次期末考试题 我一言难尽 过后总结 还是应该加强功底 勤能补拙 做一篇入门的设计思路总结 巩固一下基础 如讲解有误 请多多包涵 我的设计思路如下 1 在navicat mysql可视化 上建立数据库 gt 建立数据表
  • 实现计算机视觉——人脸检测

    概述 计算视觉是人工智能的一部分 旨在设计能够像人类视觉一样进行观察的智能算法 在本文中 我们将介绍三个主要范围 人脸检测 物体检测 面部识别 对象跟踪 在第一篇文章中 我们将重点介绍计算机视觉 以及基于 Python OpenCV 库的人
  • mybatis-plus 新增/修改实现自动填充指定字段

    需要修改的字段在模型类上添加 TableField fill FieldFill xxx 注解 FieldFill的选项 哪个字段在什么时候填充需要手动设置注解 新建一个MetaObjectHandler的实现类MyMetaObjectHa
  • spyder debug

    按钮作用 1 debug file 进入调试 2 run current line 运行当前行 3 step into function or method of current line 进入函数或方法内运行 4 run until cu
  • 节点对于ip的重要性

    网络节点是选择代理IP的主要标准 那么 你知道节点对代理IP质量有什么影响吗 神龙IP为你解答 浅析节点对代理IP的影响 1 代理IP的节点越多 重复率越低 全球IPv4网络非常有限 国内IPv4网络也是如此 各地区IPv4网络更加有限 代
  • 63. Unique Paths II

    思路1 这个题目第一个思路还是用DFS 和第62题一样 但是在递归的时候需要判断有无障碍物 因为第62题用的DFS Leetcode提示Time Limit Exceeded 所以这道题没有尝试DFS的做法 而是直接使用了DP 思路2 根据
  • Anaconda运行python文件

    一 打开Anaconda Prompt 二 切换到要运行的python文件所在文件夹 1 先切换到该盘 例我的是D盘 2 切换到该文件夹 cd A文件夹 cd A文件夹绝对路径 三 运行python文件 例运行test py文件 pytho
  • Python基于词袋模型特征和TFIDF特征进行支持向量机模型中文邮件分类项目实战

    说明 这是一个机器学习实战项目 附带数据 代码 文档 视频讲解 如需数据 代码 文档 视频讲解可以直接到文章最后获取 1 项目背景 随着互联网的发展 越来越多的用户通过互联网来交流 电子邮件成为人们日常生活交流的重要工具 用户每星期可能收到