Python数据分析-垃圾邮件分类

news2024/10/12 6:40:37

一、研究背景

随着电子通信技术的飞速发展,电子邮件已经成为人们日常工作和生活中不可或缺的一部分。然而,伴随着这一趋势,垃圾邮件(Spam)的数量也在急剧增加。垃圾邮件不仅会占用用户的邮箱空间,还可能含有恶意软件、钓鱼攻击、广告欺诈等威胁,严重影响用户体验和网络安全。为了解决这一问题,研究有效的垃圾邮件检测算法成为了学术界和工业界的热点。

传统的垃圾邮件过滤方法多依赖于关键字匹配和规则定义,这些方法容易被垃圾邮件发送者利用,从而无法适应不断变化的垃圾邮件模式。随着机器学习和自然语言处理技术的发展,基于数据驱动的垃圾邮件分类模型逐渐成为主流。通过对大量邮件数据的特征提取和模型训练,机器学习方法可以更好地捕捉垃圾邮件和正常邮件之间的细微差异,提升检测的准确性。

本研究的背景基于这一现实需求,探索通过AdaBoost算法结合决策树分类器来进行垃圾邮件分类。通过对电子邮件内容的特征分析以及模型训练,我们期望提高垃圾邮件过滤的效果,并分析邮件长度、词频等特征在垃圾邮件分类中的作用。

二、研究意义

  • 提升邮件安全性:垃圾邮件可能带来潜在的安全威胁,如传播病毒、钓鱼攻击等。准确识别和过滤垃圾邮件可以有效减少这些安全隐患,提高用户的网络安全水平。

  • 改进垃圾邮件过滤算法:通过引入先进的机器学习算法,如AdaBoost和决策树分类器,可以进一步提高垃圾邮件检测的准确率。这为现有的邮件过滤系统提供了改进方案,有助于应对日益复杂的垃圾邮件形式。

  • 自动化邮件管理:自动化垃圾邮件检测系统可以大幅减少用户手动筛选邮件的时间成本,提升办公效率。同时,企业邮箱服务提供商可以通过部署这些模型,为用户提供更优质的服务。

  • 为文本分类研究提供依据:本研究通过对垃圾邮件和非垃圾邮件的文本内容进行特征分析和分类建模,为文本分类问题提供了实践案例。类似的文本分类方法还可以扩展到其他领域,如社交媒体评论分类、商品评论分析等。

三、实证分析

导入库

数据和代码

import numpy as np 
import pandas as pd
import matplotlib.pyplot as plt 
%matplotlib inline
plt.rcParams['font.sans-serif'] = ['KaiTi']  #中文
plt.rcParams['axes.unicode_minus'] = False   #负号
import seaborn as sns 
import plotly.express as px 
from wordcloud import WordCloud
from collections import Counter
import plotly.graph_objects as go
import warnings
from sklearn.ensemble import AdaBoostClassifier
from sklearn.tree import DecisionTreeClassifier 
from sklearn.model_selection import train_test_split 
from sklearn.preprocessing import LabelEncoder 
from sklearn.metrics import accuracy_score , classification_report

warnings.filterwarnings('ignore')

读取数据集

data = pd.read_csv("spam_dataset.csv") 

 

 查看数据集具体信息

data.isnull().sum()

 

data.duplicated()

 

数据集可视化

df = pd.DataFrame(data)
plt.figure(figsize=(8,6),dpi=200)
sns.countplot(x='is_spam', data=df)
plt.title('垃圾邮件与非垃圾邮件计数')
plt.xlabel('Is Spam')
plt.ylabel('Count')
plt.show()

 

df['message_length'] = df['message_content'].apply(len)
plt.figure(figsize=(8,6),dpi=200)
sns.histplot(df['message_length'], kde = True , bins = 15)
plt.title('消息长度分布')
plt.xlabel('Message Length')
plt.ylabel('Frequency')
plt.show()

 

plt.figure(figsize=(8,6),dpi=200)
sns.boxplot(x='is_spam', y='message_length', data=df)
plt.title('垃圾邮件与非垃圾邮件的邮件长度')
plt.xlabel('Is Spam')
plt.ylabel('Message Length')
plt.show()

 接下来画词云图

# 垃圾邮件的词云
spam_words = ' '.join(df[df['is_spam'] == 1]['message_content'])

# 生成词云
spam_wordcloud = WordCloud(width=800, height=400, background_color='white').generate(spam_words)

# 词云图
plt.figure(figsize=(10, 5),dpi=200)
plt.imshow(spam_wordcloud, interpolation='bilinear')
plt.axis('off')
plt.title('用于垃圾邮件的 Word Cloud')
plt.show()

 

# 非垃圾邮件的词云
non_spam_words = ' '.join(df[df['is_spam'] == 0]['message_content'])

# 生成词云
non_spam_wordcloud = WordCloud(width=800, height=400, background_color='white').generate(non_spam_words)

# 词云图
plt.figure(figsize=(10, 5),dpi=200)
plt.imshow(non_spam_wordcloud, interpolation='bilinear')
plt.axis('off')
plt.title('用于非垃圾邮件的 Word Cloud')
plt.show()

 获取垃圾邮件中最常见的词语

spam_words_list = ' '.join(df[df['is_spam'] == 1]['message_content']).split()
spam_word_counts = Counter(spam_words_list).most_common(10)
# 创建字数统计的 DataFrame
spam_words_df = pd.DataFrame(spam_word_counts, columns=['word', 'count'])

# 最常用词的条形图
plt.figure(figsize=(10, 6),dpi=200)
sns.barplot(x='count', y='word', data=spam_words_df, palette='Blues_r')
plt.title('垃圾邮件中最常见的 10 个词')
plt.xlabel('Word Count')
plt.ylabel('Words')
plt.show()

可视化邮件长度和垃圾邮件分类之间的关联热图

plt.figure(figsize=(6,5),dpi=200)
corr = df[['message_length', 'is_spam']].corr()
sns.heatmap(corr, annot=True, cmap='coolwarm', linewidths=0.5)
plt.title('邮件长度和垃圾邮件分类之间的关联热图')
plt.show()

 

plt.figure(figsize=(8,6),dpi=200)
sns.violinplot(x='is_spam', y='message_length', data=df, palette='Set2')
plt.title('按垃圾邮件状态划分的邮件长度小提琴图')
plt.xlabel('Is Spam')
plt.ylabel('Message Length')
plt.show()

 

模型建立数据预处理

le = LabelEncoder()
data['message_content'] = le.fit_transform(data['message_content'])
data.head(3) 

 

###划分训练集测试集
data.columns
x = data[['message_content']]
y = data['is_spam']

###建立模型
# initialize the base learner 
base_learner = DecisionTreeClassifier(max_depth=1)

model = AdaBoostClassifier(base_estimator = base_learner , n_estimators=50 , learning_rate=1.0, random_state=42)

model.fit(x , y)
y_pred = model.predict(x)

y_pred[0:10]

 #模型评价

accuracy = accuracy_score(y,y_pred)
print(f"Accuracy is : {accuracy}")
class_report = classification_report(y,y_pred)
print(f"Classification Report Is : {class_report}")

四、研究结论

通过对垃圾邮件数据集的实证分析和机器学习建模,本研究得出以下结论:

  1. 垃圾邮件与非垃圾邮件的特征差异:通过词云分析和频率统计,发现垃圾邮件中的词汇通常集中于促销、广告等特定主题,具有明显的商业目的,而非垃圾邮件则更多围绕日常交流和信息共享。这一特征为垃圾邮件的内容过滤提供了重要依据。

  2. 邮件长度的影响:数据分析显示,垃圾邮件和非垃圾邮件在邮件长度上有显著差异。垃圾邮件的平均长度通常较长,但也存在部分短小的信息。通过可视化分析(如箱线图、小提琴图等),我们进一步验证了邮件长度在分类中的重要作用。

  3. AdaBoost模型的优越性:通过使用AdaBoost结合决策树分类器,模型取得了较高的分类准确率,能够有效区分垃圾邮件和非垃圾邮件。模型的精度达到了较高水平(准确率接近100%),并且在分类报告中表现出较高的精确度和召回率,表明模型在处理不平衡数据时也有较好的效果。

  4. 特征关联的可视化:通过热力图分析邮件长度与垃圾邮件分类之间的相关性,发现邮件长度确实在一定程度上能够反映垃圾邮件的倾向性。同时,通过小提琴图等可视化手段,进一步展现了垃圾邮件与正常邮件在特征上的显著差异。

  5. 未来研究方向:虽然本研究模型表现较好,但在实际应用中,垃圾邮件的形式和策略不断演变。未来研究可以结合自然语言处理技术,进一步优化垃圾邮件的文本特征提取,同时引入深度学习算法(如LSTM、BERT等),提升模型对复杂垃圾邮件的识别能力。

总的来说,本研究为垃圾邮件分类提供了一种有效的解决方案,不仅验证了机器学习算法在文本分类中的优势,还为未来的邮件过滤系统设计提供了参考依据。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2207320.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

设置dl服务解决github pushTimed out问题

提交代码到GitHub,一直提示提交失败 我们一般是fq挂的dl服务器进行的,而git需要配置下dl,此时我们要将dl服务器对应的IP地址和端口为我们所调用。 查找dl服务器(windows直接搜索dl服务器设置,mac参考官网&#xff09…

【北京迅为】《STM32MP157开发板嵌入式开发指南》-第二十二章 安装VMware Tool 工具

iTOP-STM32MP157开发板采用ST推出的双核cortex-A7单核cortex-M4异构处理器,既可用Linux、又可以用于STM32单片机开发。开发板采用核心板底板结构,主频650M、1G内存、8G存储,核心板采用工业级板对板连接器,高可靠,牢固耐…

学习python自动化——pytest单元测试框架

一、什么是pytest 单元测试框架,unittest(python自带的),pytest(第三方库)。 用于编写测试用例、收集用例、执行用例、生成测试结果文件(html、xml) 1.1、安装pytest pip instal…

【ARM Linux驱动开发】嵌入式ARM Linux驱动开发基本步骤

【ARM Linux驱动开发】嵌入式ARM Linux驱动开发基本步骤 文章目录 开发环境驱动开发(以字符设备为例)安装驱动应用程序开发附录:压缩字符串、大小端格式转换压缩字符串浮点数压缩Packed-ASCII字符串 开发环境 首先需要交叉编译器和Linux环境…

豆包PixelDance指南:字节跳动推出的AI视频生成大模型,突破多主体互动难关

豆包PixelDance是由字节跳动旗下火山引擎发布的AI视频生成大模型。它是业界首个突破多主体互动难关的视频生成模型,支持多风格多比例的一致性多镜头生成。PixelDance基于DiT架构,具备高效的DiT融合计算单元,能够实现复杂的多主体运动交互和多…

【高等数学】 一元函数积分学

1. 不定积分的计算 1.1. 基本积分表 知识点 例题 1.2. 凑微分(第一类换元法) 知识点 本质:利用复合函数求导法则的逆运算 第一步,识别或者凑出来复合函数的导函数 如果被积函数具备以下特点: 1.它由两项相乘来表…

《案例》—— OpenCV 实现2B铅笔填涂的答题卡答案识别

文章目录 一、案例介绍二、代码解析 一、案例介绍 下面是一张使用2B铅笔填涂选项后的答题卡 使用OpenCV 中的各种方法进行真确答案识别,最终将正确填涂的答案用绿色圈出,错误的答案不圈出,用红色圈出错误题目的正确答案最终统计正确的题目数…

PCL用KDtree,给搜索到的邻近点上色

用KDtree&#xff0c;给搜索到的邻近点上色。 #include <pcl/io/pcd_io.h> #include <pcl/point_types.h>#include <pcl/search/kdtree.h> // 包含kdtree头文件 #include <pcl/visualization/pcl_visualizer.h> #include <boost/thread/thread.hpp&…

【MATLAB】基于RSSI的蓝牙定位程序,4个锚点、二维平面

目录 ​编辑 商品描述 主要功能 技术细节 适用场景 下载链接 商品描述 这款基于接收信号强度指示&#xff08;RSSI&#xff09;原理的蓝牙定位程序&#xff0c;专为需要高效、可靠定位解决方案的开发者和研究人员设计。它能够在二维平面内&#xff0c;通过4个锚点实现对未…

ESNP静态路由进阶

0x01 前言 前一篇文章说了一个简单的ESNP静态路由实验&#xff0c;那么后面给了一个进阶拓扑&#xff1a;https://blog.csdn.net/Moxin1044/article/details/142850946 现在我们来解决一下 0x02 拓扑图 在上一个拓扑图基础上&#xff0c;规划了一个新的7.0网段&#xff0c;那…

DGX平台

NVIDIA DGX 平台 文章目录 前言一、优势经过验证的企业 AI 标准体验 DGX 平台的优势1. 先进的 AI 开发平台2. 融入了 NVIDIA AI 专业技术和服务3. 性能卓越、成本可预测二、用例DGX 助力 AI 走向各行各业1. 壳牌推动能源领域不断取得突破2. 宝马借助 AI 重新定义工厂物流3. 索尼…

【Linux】段错误(核心已转储)

原因:linux在安装docker 安装完之后再添加用户就报错了。。。。 各种查原因: 内存问题:系统可能存在内存损坏或不足的问题。磁盘空间不足:系统分区可能没有足够的空间来创建新用户。文件系统错误:文件系统可能存在错误。SELinux或AppArmor:安全模块可能阻止了 useradd 命…

el-table表头加红色星标

代码&#xff1a; <el-table-column prop"name" label"姓名" width"auto"><template #header><span style"color: red; margin-right: 4px">*</span><span>姓名</span></template></el…

Java idea中项目在maven执行install命令后出现Java heap space错误

Java idea中项目在maven执行install命令后出现Java heap space错误 这代表着你的maven需要足够的内存来编译和打包你的项目&#xff0c;而你分配的堆内存却不够用。 解决办法&#xff1a; idea左上角File —> Settings Build —> Build Tools —> Maven —> Run…

【GPT提问技巧】如何高效提问GPT:掌握核心技巧,获取高质量回答的终极指南!

人工智能&#xff08;AI&#xff09;已经成为我们获取知识和信息的重要工具。尤其是GPT&#xff08;Generative Pre-trained Transformer&#xff09;等语言模型&#xff0c;凭借其强大的自然语言处理能力&#xff0c;能够为我们提供丰富的回答。然而&#xff0c;如何向GPT提问…

【论文分享】ShEF: Shielded Enclaves for Cloud FPGAs 22‘ASPLOS

目录 ABSTRACTINTRODUCTIONBACKGROUND AND MOTIVATIONTrusted Execution Environments (TEEs)Conventional FPGA Security MechanismsRemote FPGAs-as-a-ServiceChallenges for Secure and Customized ComputingA lack of asymmetric keys.Presence of an untrusted ShellLack …

【Vue3】 h()函数的用法

目录 介绍 参数 使用案例 1.创建虚拟 DOM 元素 2. 组件的动态渲染 3. 创建功能组件 4.渲染动态属性 5. 使用插槽 6. 创建动态标签 介绍 h() 函数用于辅助创建虚拟 DOM 节点&#xff0c;它是 hypescript 的简称——能生成 HTML (超文本标记语言) 的 JavaScript&#x…

开发实时美颜系统:视频美颜SDK与直播平台的集成方案详解

本文将详细介绍如何开发一个实时美颜系统&#xff0c;并探讨视频美颜SDK与直播平台的集成方案&#xff0c;帮助开发者实现流畅的美颜功能。 一、视频美颜SDK的核心功能 视频美颜SDK主要提供了一系列实时处理视频图像的算法&#xff0c;常见的功能包括&#xff1a; 1.美白、磨…

Vue3教程 - 3 HelloWorld

更好的阅读体验&#xff1a;点这里 &#xff08; www.foooor.com &#xff09; 3 HelloWorld 下面来正式进入 Vue3 的学习。先写一个 HelloWorld。 3.1 关于Vite Vite 是一个新型前端构建工具。 在 Vue2 中&#xff0c;我们主要使用 vue-cli 来构建我们的前端项目&#x…

进程的优先级详解(1)(在Linux中观察进程优先级,优先级的概念,优先级范围,进程的切换和切换的过程和理解)

文章目录 进程的优先级什么是进程的优先级&#xff1f;进程的优先级的划分1. 优先级的级别划分2. 动态与静态优先级 那么为什么要有优先级呢&#xff1f;区分 那么是怎么确定优先级的呢&#xff1f; Linux中的优先级Linux中的进程优先级补充 Linux优先级的范围进程的切换切换过…