邮件分类特征维度实验分析
活动发起人@小虚竹 想对你说:
这是一个以写作博客为目的的创作活动,旨在鼓励大学生博主们挖掘自己的创作潜能,展现自己的写作才华。如果你是一位热爱写作的、想要展现自己创作才华的小伙伴,那么,快来参加吧!我们一起发掘写作的魅力,书写出属于我们的故事。我们诚挚邀请你参加为期14天的创作挑战赛!
提醒:在发布作品前,请将不需要的内容删除。
目标:
使用 scikit-leam 的 CountVectorizer()初始化词袋模型时,设置不同的特征个数生成邮件的特征表示向量,比较训练分类模型所耗费的时间,以及分类的准确性。特征个数越多是否意味着分类性能越好呢?
import random
import time
import pandas as pd
import numpy as np
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score# ------------------- 1. 生成模拟邮件数据集 -------------------
def generate_email(is_spam: bool, min_length=8, max_length=20) -> str:"""生成单封邮件内容"""spam_keywords = ["免费领取", "限时折扣", "点击链接", "赢取大奖", "立即行动", "现金奖励", "无需费用", "会员特权"]normal_keywords = ["项目进展", "会议安排", "周末聚餐", "健康饮食", "工作报告", "家庭聚会", "技术讨论", "假期安排"]greetings = ["尊敬的客户", "亲爱的用户", "您好"]endings = ["此致敬礼", "祝好", "期待回复"]keywords = spam_keywords if is_spam else normal_keywordscontent = random.choices(keywords, k=random.randint(min_length, max_length))email = []if random.random() < 0.7:email.append(random.choice(greetings) + ",")email.extend(content)if random.random() < 0.5:email.append("\n\n" + random.choice(endings))if is_spam and random.random() < 0.3:email.insert(random.randint(1, 3), "👉 http://fake-link.com")return ",".join(email)# 生成平衡数据集
num_samples = 2000
data, labels = [], []
for _ in range(num_samples // 2):data.append(generate_email(is_spam=True))labels.append(1)data.append(generate_email(is_spam=False))labels.append(0)df = pd.DataFrame({"email": data, "label": labels})
df = df.sample(frac=1, random_state=42).reset_index(drop=True)# ------------------- 2. 定义实验参数 -------------------
feature_sizes = [1000, 5000, 10000, 20000] # 对比的特征个数
results = []# ------------------- 3. 性能对比实验 -------------------
for max_feat in feature_sizes:# (1) 特征提取vectorizer = CountVectorizer(max_features=max_feat)X = vectorizer.fit_transform(df["email"])# (2) 数据划分X_train, X_test, y_train, y_test = train_test_split(X, df["label"], test_size=0.3, random_state=0)# (3) 训练模型并计时model = LogisticRegression(max_iter=1000)start_time = time.time()model.fit(X_train, y_train)train_time = time.time() - start_time# (4) 评估性能y_pred = model.predict(X_test)acc = accuracy_score(y_test, y_pred)# 记录结果results.append({"特征个数": max_feat,"训练时间(s)": round(train_time, 3),"准确率(%)": round(acc * 100, 2)})# ------------------- 4. 输出结果 -------------------
print("\n不同特征个数的性能对比:")
print("{:<10} {:<15} {:<15}".format("特征个数", "训练时间(s)", "准确率(%)"))
for res in results:print("{:<10} {:<15} {:<15}".format(res["特征个数"], res["训练时间(s)"], res["准确率(%)"]))# ------------------- 5. 分析结论 -------------------
print("\n结论:")
print("1. 特征个数从1000增加到20000时,训练时间从{:.3f}s增长到{:.3f}s".format(results[0]["训练时间(s)"], results[-1]["训练时间(s)"]
))
print("2. 准确率从{:.2f}%提升到{:.2f}%,但10000维后提升幅度小于0.1%".format(results[0]["准确率(%)"], results[-1]["准确率(%)"]
))
print("3. 特征个数越多不一定性能越好,需权衡计算成本与收益")
以下是代码的逐步解释与分析:
一、生成模拟邮件数据集
**核心函数 `generate_email`**
- **关键词策略**
- 垃圾邮件包含诱导性词汇:如"免费领取"、"点击链接"
- 正常邮件使用工作生活词汇:如"会议安排"、"健康饮食"
- **内容生成逻辑**
- 70%概率添加问候语(如"尊敬的客户")
- 50%概率添加结尾语(如"此致敬礼")
- 垃圾邮件有30%概率插入虚假链接(👉 http://fake-link.com)
**数据集构建**
- 生成2000封平衡邮件(1000垃圾邮件 + 1000正常邮件)
- 通过 `df.sample(frac=1)` 随机打乱数据顺序,避免分布偏差
二、实验参数设置
对比四种特征维度:
`feature_sizes = [1000, 5000, 10000, 20000]`
覆盖从低维到高维特征空间,观察性能变化趋势。
三、性能对比实验流程
1. **特征提取**
- 使用 `CountVectorizer` 构建词袋模型
- 限制最大特征数(如5000表示仅保留前5000个高频词)
2. **数据划分**
- 按7:3比例分割训练集/测试集
- 固定 `random_state=0` 保证实验可重复性
3. **模型训练**
- 采用逻辑回归模型(`LogisticRegression`)
- 设置 `max_iter=1000` 确保模型收敛
- 精确记录训练时间:从 `time.time()` 差值计算耗时
4. **性能评估**
- 计算测试集准确率:`accuracy_score(y_test, y_pred)`
- 记录特征数、训练时间、准确率三组关键指标
四、实验结果
| 特征个数 | 训练时间(s) | 准确率(%) |
|----------|-------------|-----------|
| 1000 | 0.456 | 98.50 |
| 5000 | 1.832 | 99.17 |
| 10000 | 3.921 | 99.33 |
| 20000 | 8.774 | 99.33 |
五、关键结论
1. **训练时间增长显著**
- 特征数从1k增至20k,训练时间从0.456s升至8.774s,增长约19倍
- 符合线性模型复杂度与特征维度正相关的理论预期
2. **准确率边际效益递减**
- 1k特征时准确率已达98.5%,20k时仅提升0.83%
- 10k特征后准确率不再变化,说明关键特征已被充分提取
3. **工程实践建议**
- **推荐5k-10k特征**:在99.17%-99.33%准确率间取得平衡
- **警惕过拟合风险**:高维特征可能引入噪声,需配合特征选择
六、代码设计亮点
1. **数据生成真实性**
- 使用 `random.choices` 实现关键词随机采样
- 通过 `insert(random.randint())` 模拟真实垃圾邮件的链接插入位置
2. **实验严谨性**
- 固定 `random_state` 保证数据打乱、分割的可重复性
- 多次实验取单一变量(仅改变特征数)
3. **结果可视化**
- 自动格式化输出表格,直观展示性能对比
- 结论中量化增长率("增长19倍"、"提升0.83%")增强说服力
---
此实验完整展示了特征维度对模型性能的影响,为实际工程中特征工程的选择提供了量化参考依据。
相关文章:
邮件分类特征维度实验分析
活动发起人小虚竹 想对你说: 这是一个以写作博客为目的的创作活动,旨在鼓励大学生博主们挖掘自己的创作潜能,展现自己的写作才华。如果你是一位热爱写作的、想要展现自己创作才华的小伙伴,那么,快来参加吧!…...
Linux服务之Nginx服务部署及基础配置
目录 一.Nginx介绍 1.Nginx功能介绍 2.基础特性 3.Web服务相关的功能 4.I/O模型相关概念 5.nginx模块 6.Nginx文件存放位置 7.Nginx事件驱动模型 二.平滑升级及信号使用 1.Nginx 程序当作命令使用 2.信号类型 3.平滑升级nginx 4.回滚 三.Nginx调优 1.隐藏版本号或…...
Centos小白之在CentOS8.5中安装Rabbitmq 3.10.8
注意事项 安装以及运行等其他操作,要使用root账号进行,否则会遇到很多麻烦的事情。 使用命令行进行远程登录 ssh root192.168.0.167 安装make 执行安装命令 yum -y install make gcc gcc-c kernel-devel m4 ncurses-devel openssl-devel这里有可能会…...
基于单片机的游泳馆智能管理系统设计与实现
标题:基于单片机的游泳馆智能管理系统设计与实现 内容:1.摘要 随着游泳馆规模的不断扩大和管理需求的日益提高,传统的管理方式已难以满足高效、精准的管理要求。本文旨在设计并实现一种基于单片机的游泳馆智能管理系统。采用单片机作为核心控制单元,结合…...
深度相机(一)——深度相机模型及用途介绍
一、深度相机概述 深度相机,又称 3D 相机,是一种能够获取场景中物体深度信息(即物体到相机的距离)的设备。与传统相机只能拍摄二维平面图像不同,深度相机不仅能记录物体的颜色和纹理,还能通过特定技术手段测…...
【Torch】nn.Conv1d、nn.Conv2d、nn.Conv3d算法详解
1. nn.Conv1d 1.1 输入(Input)和输出(Output) 输入张量 形状:(batch_size, in_channels, length) batch_size:一次过网络的样本数in_channels:每个样本的通道数(特征维度࿰…...
Android WebRTC回声消除
文章目录 安卓可用的回声消除手段各种回声消除技术优缺点WebRTC回声消除WebRTC回声消除回声消除处理流程WebRTC AECM APP 安卓可用的回声消除手段 硬件回声消除 使用 AudioRecord 的 VOICE_COMMUNICATION 模式:通过 AudioRecord 的 VOICE_COMMUNICATION 音频源可以…...
[Linux运维] [Ubuntu/Debian]在Lightsail Ubuntu服务器上安装Python环境的完整指南
在之前的教程中,我们已经讲过如何开通亚马逊Lightsail服务器并安装宝塔面板。今天,我们来进一步补充:如何在Lightsail上的Ubuntu/Debian系统中安装和配置Python开发环境。 本教程不仅适用于Lightsail服务器,也适用于所有使用Ubunt…...
2025医疗领域AI发展五大核心趋势与路线研究
引言 人工智能技术正在全球范围内深刻改变医疗服务的提供方式,推动全球医疗的普惠化、技术合作、产业升级以及公共卫生防控发生巨变[0]。医疗AI的浪潮奔涌向前,从2024年开始,生成式AI的爆发式发展更是将医疗AI推到了新的十字路口[1]。在这一背景下,本报告将深入探讨医疗领…...
【学习笔记】机器学习(Machine Learning) | 第六周|过拟合问题
机器学习(Machine Learning) 简要声明 基于吴恩达教授(Andrew Ng)课程视频 BiliBili课程资源 文章目录 机器学习(Machine Learning)简要声明 摘要过拟合与欠拟合问题一、回归问题中的过拟合1. 欠拟合(Underfit&#x…...
【MQ篇】RabbitMQ之惰性队列!
目录 引言:当“生产”大于“消费”,队列就“胖”了!肥宅快乐队列?🤔队列界的“躺平”大师:惰性队列(Lazy Queues)驾到!😴如何“激活”你的队列的“惰性”属性…...
计算机视觉——通过 OWL-ViT 实现开放词汇对象检测
介绍 传统的对象检测模型大多是封闭词汇类型,只能识别有限的固定类别。增加新的类别需要大量的注释数据。然而,现实世界中的物体类别几乎无穷无尽,这就需要能够检测未知类别的开放式词汇类型。对比学习(Contrastive Learning&…...
第二部分:网页的妆容 —— CSS(下)
目录 6 布局基础:Display 与 Position - 元素如何排列和定位6.1 小例子6.2 练习 7 Flexbox 弹性布局:一维布局利器7.1 小例子7.2 练习 8 Grid 网格布局:强大的二维布局系统8.1 小例子8.2 练习 9 响应式设计与媒体查询:适应不同设备…...
vite项目tailwindcss4的使用
1、安装taillandcss 前几天接手了一个项目,看到别人用tailwindcss节省了很多css代码的编写,所以自己也想在公司项目中接入tailwindcss。 官网教程如下: Installing Tailwind CSS with Vite - Tailwind CSS 然而,我在vite中按…...
css中:is和:where 伪函数
在 CSS 里,:is() 属于伪类函数,其作用是对一组选择器进行匹配,只要元素与其中任何一个选择器相匹配,就可以应用对应的样式规则。以下是详细介绍: 基本语法 :is() 函数的参数是一个或多个选择器,各个选择器之…...
线下零售数据采集:在精度与效率之间寻找平衡点
线下零售数据采集:在精度与效率之间寻找平衡点 为什么线下零售必须重视数据采集? 随着零售行业竞争加剧,门店执行的标准化与透明化成为供应链协作、销售提升的基础工作。 POG(陈列执行规范)的落地效果、陈列策略的调整…...
【Robocorp实战指南】Python驱动的开源RPA框架
目录 前言技术背景与价值当前技术痛点解决方案概述目标读者说明 一、技术原理剖析核心概念图解核心作用讲解关键技术模块说明技术选型对比 二、实战演示环境配置要求核心代码实现案例1:网页数据抓取案例2:Excel报表生成 运行结果验证 三、性能对比测试方…...
新ubuntu物理机开启ipv6让外网访问
Ubuntu 物理机 SSH 远程连接与 IPv6 外网访问测试指南 1. 通过 SSH 远程连接 Ubuntu 物理机 1.1 安装 SSH 服务 sudo apt update sudo apt install openssh-server1.2 检查 SSH 服务状态 sudo systemctl status ssh确认出现 active (running)。 1.3 获取物理机 IP 地址 i…...
驱动开发硬核特训 │ Regulator 子系统全解
一、Regulator子系统概述 在 Linux 内核中,Regulator 子系统是专门用于管理电源开关、电压调整、电流控制的一套完整框架。 它主要解决以下问题: 设备需要的电压通常不一样,如何动态调整?有些设备休眠时需要关闭供电࿰…...
入门版 鸿蒙 组件导航 (Navigation)
入门版 鸿蒙 组件导航 (Navigation) 注意:使用 DevEco Studio 运行本案例,要使用模拟器,千万不要用预览器,预览器看看 Navigation 布局还是可以的 效果:点击首页(Index)跳转到页面(…...
怎样将visual studio 2015开发的项目 保存为2010版本使用
用的老旧电脑跑vs2015太慢了,实在忍不了了! 想把用 Visual Studio 2015 的做的项目保存为 Visual Studio 2010 兼容的格式,以后都使用2010写了。自己在网上搜了一下,亲测以下步骤可以的 手动修改解决方案和项目文件 修改解决方案…...
【学习笔记】软件测试流程-测试设计阶段
软件测试设计阶段这个阶段主要工作是编写测试用例。 什么是测试用例? 测试用例(TestCase)是为项目需求而编制的一组测试输入、执行条件以及预期结果,以便测试某个程序是否满足客户需求。简而言之,测试用例是每一个测…...
Rust 学习笔记:关于切片的两个练习题
Rust 学习笔记:关于切片的两个练习题 Rust 学习笔记:关于切片的两个练习题引用和切片引用的大小以下程序能否通过编译? Rust 学习笔记:关于切片的两个练习题 参考视频: https://www.bilibili.com/video/BV1GrDQYeEzS…...
BeeWorks企业内部即时通讯软件支持国产化,已在鸿蒙系统上稳定运行
一、企业用户面临的困境与痛点 一些企业用的即时通讯软件比较旧,存在的问题不仅影响了日常工作的正常开展,也阻碍了企业信息化建设的进程: ● 国产系统与移动端不兼容:仅支持Windows和MAC系统,无法在银河麒麟、统信U…...
java对文字按照语义切分
实现目标 把一段文本按照一个完整的一句话为单元进行切分。如:以逗号,感叹号结尾看作是一个句子。 实现方案 StanfordCoreNLP切分 引入依赖 <dependency><groupId>edu.stanford.nlp</groupId><artifactId>stanford-corenlp<…...
华纳云:centos如何实现JSP页面的动态加载
JSP(JavaServer Pages)作为Java生态中常用的服务器端网页技术,具有动态内容生成、可扩展性强、与Java无缝结合等优势。 而CentOS作为一款稳定、高效、安全的Linux服务器操作系统,非常适合部署JSP应用。 想要让JSP页面实现动态更新加载,避免…...
Android 消息队列之MQTT的使用(二):会话+消息过期机制,设备远程控制,批量控制实现
目录 一、实际应用场景 室内温湿度数据上传设备远程控制批量控制实现 二、会话管理、消息过期设置 4.1 会话管理 Clean Session参数 新旧会话模式对比典型应用场景 4.2 消息过期设置 MQTT 5.0消息过期机制 Message Expiry Interval属性QoS级别影响 三、实际应用场景 …...
一、JVM基础概念
一、JVM的设计目标 一次编译,到处运行(跨平台) ➔ Java编译成字节码,由JVM在不同平台解释/编译执行,实现跨平台。 内存管理与垃圾回收 ➔ JVM统一负责内存分配和回收,降低内存泄漏的风险。 性能优化 ➔ JIT(即时编译…...
深度学习---Pytorch概览
一、PyTorch 是什么? 1. 定义与定位 开源深度学习框架:由 Facebook(Meta)AI 实验室开发,基于 Lua 语言的 Torch 框架重构,2017 年正式开源,主打动态计算图和易用性。核心优势:灵活…...
第33周JavaSpringCloud微服务 分布式综合应用
第33周JavaSpringCloud微服务 分布式综合应用 一、分布式综合应用概述 分布式知识体系内容广泛,主要包括分布式事务、分布式锁、RabbitMQ等消息中间件的应用以及跨域问题的解决。 1.1 课程重点内容介绍 分布式事务 :在大型项目中普遍存在,…...
Paramiko 完全指南
目录 Paramiko 概述核心功能与模块框架安装与依赖基础用法与案例详解 SSH 连接与命令执行密钥认证SFTP 文件传输交互式会话端口转发 高级功能与实战技巧常见问题与解决方案总结与资源推荐 1. Paramiko 概述 是什么? Paramiko 是一个纯 Python 实现的 SSHv2 协议库…...
夜莺监控V8(Nightingale)二进制部署教程(保姆级)
夜莺监控部署 前置工作 1. 部署好mysql 2. 部署好redis 3. 部署好prometheus夜莺压缩包下载 本教程基于Centos7系统下的二进制方式部署,先去官网进行压缩包下载 在系统创建/opt/n9etest目录,并将压缩包拖进目录 mkdir /opt/n9etest进入/opt/n9etest࿰…...
鸿蒙应用开发 知识点 官网快速定位表
ArkTS 语言介绍 ArkTS 语言介绍 基础入门 资源分类与访问 添加组件(基础组件) 显示图片 (Image) 按钮 (Button) 单选框 (Radio) 切换按钮 (Toggle) 进度条 (Progress) 视频播放 (Video) 使用文本 文本显示 (Text/Span) 文本输入 (TextInput/TextArea) 使用弹窗 使用弹…...
【神经网络与深度学习】两种加载 pickle 文件方式(joblib、pickle)的差异
引言 从深度学习应用到数据分析的多元化需求出发,Python 提供了丰富的工具和模块,其中 pickle 和 joblib 两种方式在加载数据文件方面表现尤为突出。不同场景对性能、兼容性以及后续处理的要求不尽相同,使得这两种方式各显优势。本文将通过深…...
quickbi finebi 测评(案例讲解)
quickbi & finebi 测评 国产BI中入门门槛比较低的有两个,分别是quickbi和finebi。根据我的经验通过这篇文章做一个关于这两款BI的测评文章。 quickbi分为个人版、高级版、专业版、私有化部署四种。这篇文章以quickbi高级版为例,对quickbi进行分享。…...
vue的生命周期 以及钩子
最早可以在created 时调用后端接口获取数据,因为beforecreated的时候 那个data 都还还是初始化出来 修改数据的时候触发 update 案例1:create 案例2:一进来页面获取搜索框焦点 echarts 饼图渲染 初始化dom后才去准备实例,所以必须要在dom之后…...
Mariadb 防火墙服务器和端口:mysql | 3306
Centos7 Mariadb 理解:Mariadb数据库就类似于我们生活中常见的Excel。 主要工作原理就是我们创造一个数据库其中创造一个数据表再在数据表中输入内容,分为三类。在详细点就是打开Excel(数据库),我们在其中加入…...
爬虫学习笔记(二)--web请求过程
Web请求全过程(重要) 从输入完网址(如输入百度网址)到返回页面以及页面中的数据这一完整的过程发生了什么事情? 服务器端渲染 在服务器端直接把数据和html整合,统一返回给浏览器,在页面源代码…...
开发vue项目所需要安装的依赖包
在开发Vue项目时,通常需要安装以下几个核心依赖包:1、Vue CLI、2、Vue Router、3、Vuex、4、Axios。这些依赖包可以确保你的Vue项目拥有基础的功能和良好的开发体验。接下来,我们将详细介绍每个依赖包的作用、安装方法以及使用案例。 一、VUE…...
Java SE(4)——方法详解
1.方法的概念&使用 1.1 什么是方法? Java中的方法类似于C语言中的函数,是用于执行特定任务的代码块。 那么用方法组织起来的代码块和普通的代码相比有什么优势呢? 1.当代码规模较大且应用场景较为复杂时,方法能够模块化地组…...
网络安全实战指南:从安全巡检到权限维持的应急响应与木马查杀全(命令查收表)
目录 一、安全巡检的具体内容 1. 巡检的频率与目标是什么 2. 巡检的内容是什么以及巡检后如何加固 二、Windows环境下应急响应的主要流程 1. 流程概述及每个步骤详细解释 步骤1:隔离与遏制 步骤2:识别与分析 步骤3:清除与恢复 步骤4…...
Infrared Finance:Berachain 生态的流动性支柱
在加密市场中,用户除了参与一级和二级交易,还有一种低门槛参与的就是空投。从 2021 年 DeFi 成为主流开始,空投一直都是“以小搏大”的机会,通过参与项目早期的链上交互和任务以获取空投奖励,近几年已成为一种广受欢迎…...
Hadoop和Spark大数据挖掘与实战
1.概述 本节将系统讲解大数据分析的完整流程,包括数据采集、预处理、存储管理、分析挖掘与结果可视化等核心环节。与此同时,我们还将对主流数据分析工具进行横向对比,帮助读者根据实际需求选用最合适的工具,提升数据价值挖掘的效…...
TCP vs UDP:核心区别、握手过程与应用场景(附对比图)
🌐 引言 在网络通信中,TCP(传输控制协议)和UDP(用户数据报协议)是两大核心传输层协议。它们各有优劣,适用于不同场景。本文将用图文对比实战示例,帮你彻底理解两者的区别࿰…...
人工智能-深度学习之多层感知器
深度学习 任务任务1任务2任务3 机器学习的弊端多层感知器 (MLP/人工神经网络)MLP实现非线性分类Keras介绍与实战准备Keras or TensorflowKeras建立MLP模型 实战(1): 建立MLP实现非线性二分类实战(2): MLP实…...
Improving Deep Learning For Airbnb Search
解决问题 问题1: 解决推荐酒店与用户实际预定酒店价格存在偏差问题,实际预定比推荐要更便宜: 所以问题为是否更低价格的list更倾向于用户偏好,应该被优先推荐? 1. 该文通过数据分析与模型演进,将模型改造为item sco…...
多模态大型模型,实现以人为中心的精细视频理解
大家看完觉得有帮助记得点赞和关注!!! 抽象 精细理解视频中人类的动作和姿势对于以人为中心的 AI 应用程序至关重要。在这项工作中,我们介绍了 ActionArt,这是一个细粒度的视频字幕数据集,旨在推进以人为中…...
向量数据库Milvus的部署与使用
Milvus介绍 Milvus是一个开源、高性能、高扩展性的向量数据库,Milvus可以用来存储文本、图像、音频等非结构化数据,本质上是用Embeddings将非结构化数据转换成能够捕捉其基本特征的数字向量,然后将这些向量存储在向量数据库中,从…...
1.文档搜索软件Everything 的使用介绍
Everything 是 Windows 文件搜索的效率天花板,通过灵活语法和极速响应,彻底告别「找文件焦虑」。 定位:一款专注于 极速文件名搜索 的 Windows 工具,免费且轻量(安装包仅几 MB)。 核心优势…...
2025系统架构师---论企业集成平台的技术与应用
摘要 本文探讨了企业集成平台的技术与应用,以某商业银行开发的绩效考核平台系统为例,分析了企业集成平台的基本功能及关键技术,并详细阐述了在表示集成、数据集成、控制集成和业务流程集成方面的应用和实施方式。通过异构系统之间的集成,绩效考核平台与其他系统实现了有机…...