spam-checkpoint

![image-20250610183601057](/Users/zhiao/Desktop/hackthe box/ai/spam/assets/image-20250610183601057.png)

P(Spam|Features) = (P(Features|Spam) * P(Spam)) / P(Features)

✅ 整体功能结构概览

步骤
内容
涉及代码 cell

📥 1

下载并解压数据集

1-3

📊 2

加载和探索数据

4-6

🧹 3

数据清洗和预处理

7-15

🧠 4

特征提取和标签处理

16

🤖 5

模型构建与调参

17-18

🧪 6

模型评估与预测新样本

19-23

💾 7

模型保存与加载

24-26


🔍 分步骤详细解释(共 27 段)

📥 数据下载与解压(1-3)

  1. 使用 requests 从 UCI 下载短信数据集。

  2. 利用 zipfile + io.BytesIO 直接在内存中解压 zip 内容到 sms_spam_collection/ 文件夹。

  3. os.listdir() 检查解压是否成功。


📊 数据加载与基础探索(4-6)

  1. 使用 pandas 加载 SMSSpamCollection 数据(tab 分隔,无表头)。

  2. 查看数据前几行、统计信息和结构(head()describe()info())。

  3. 检查是否存在缺失值。


🧹 文本清洗与预处理(7-15)

  1. 打印一条分隔线表示预处理开始。

  2. 下载 NLTK 的 punktstopwords,准备 NLP 工具。

  3. 把 message 转换为小写。

  4. 去除除了 $! 以外的标点和数字。

  5. word_tokenize() 将每条消息分词。

  6. 移除英语停用词(如 “the”, “is”, “and” 等)。

  7. 使用 PorterStemmer 词干化(将 words like "running" → "run")。

  8. 将词的列表重新拼接为字符串,供后续向量化使用。


🧠 特征提取与标签编码(16)

  1. 使用 CountVectorizer(1-2 gram)将文本转换为稀疏矩阵;

    • min_df=1, max_df=0.9 控制出现频率;

    • y = 1 代表 spam,0 是非 spam。


🤖 模型构建与超参搜索(17-18)

  1. Pipeline 串联向量器 + 多项式朴素贝叶斯分类器。

  2. 使用 GridSearchCValpha 参数做网格搜索,使用 F1 分数进行评估,输出最优模型。


🧪 新样本预测与可视化(19-23)

  1. 提供 5 条新消息做测试(包含广告、普通对话、提醒等)。

  2. 自定义 preprocess_message() 函数,实现和训练时一样的清洗流程。

  3. 对新样本做预处理。

  4. 用训练好的向量器转换为特征。

  5. 使用分类器进行预测,并输出每条消息是“Spam”还是“Not-Spam”,并展示对应的概率。


💾 模型保存与加载(24-26)

  1. 使用 joblib 保存模型到本地(.joblib 格式)。

  2. 加载模型,重复调用 .predict() 来验证保存效果。

  3. (空代码 cell,未使用)

Last updated