# 简介
数据集:SMS Spam Collection Dataset
目标:将短信分为 ham 和 spam 两类
# 使用的模型
# 文本嵌入
TF-IDF
# 监督学习
- SVM
 - 决策树
 - 朴素贝叶斯
 
# 无监督学习
- k-means
 - gmm
 - dbscan
 
# 项目过程
主要是下面几个阶段:
- 数据预处理(数据加载,清洗,向量化)
 - 模型训练
 - 模型评估
 
对于监督学习模型,数据还进行了特征标准化;训练测试比为 8:2
对于无监督模型,数据进行了 PCA 降维
# 评估结果
# 无监督模型
总体性能较差,难以实现分类的目的。
# k-means
混淆矩阵:
[4596 229]  | |
[ 745 2]  | 
分类报告:
classification_report:  | |
precision recall f1-score support  | |
ham 0.86 0.95 0.90 4825  | |
spam 0.01 0.00 0.00 747  | |
accuracy 0.83 5572  | |
macro avg 0.43 0.48 0.45 5572  | |
weighted avg 0.75 0.83 0.78 5572  | 
# dbscan
由于 dbscan 的特性,聚簇不止两个。这里选取数据最多的作为两类。
混淆矩阵:
[ 409 4371]  | |
[ 20 706]  | 
分类报告:
classification_report:  | |
precision recall f1-score support  | |
ham 0.86 1.00 0.93 4371  | |
spam 1.00 0.01 0.02 712  | |
accuracy 0.86 5083  | |
macro avg 0.93 0.50 0.47 5083  | |
weighted avg 0.88 0.86 0.80 5083  | 
# gmm
混淆矩阵:
[1912 2913]  | |
[ 532 215]  | 
分类报告:
classification_report:  | |
precision recall f1-score support  | |
ham 0.93 0.60 0.73 4825  | |
spam 0.22 0.71 0.33 747  | |
accuracy 0.62 5572  | |
macro avg 0.57 0.66 0.53 5572  | |
weighted avg 0.84 0.62 0.68 5572  | 
# 分析与评价
无监督模型可能难以捕捉垃圾邮件的特征,不能形成有效的聚类。
文本聚类算法介绍
# 监督模型
# SVM
模型准确率: 96.95%
分类报告:
precision recall f1-score support  | |
0 0.97 1.00 0.98 966  | |
1 0.98 0.79 0.87 149  | |
accuracy 0.97 1115  | |
macro avg 0.97 0.89 0.93 1115  | |
weighted avg 0.97 0.97 0.97 1115  | 
混淆矩阵:
[963 3]  | |
[ 31 118]  | 
模型交叉验证:{'mean_accuracy': 0.9721761712793103, 'std_accuracy': 0.006412315654777117}
# DecisionTree
模型准确率: 94.17%
分类报告:
precision recall f1-score support  | |
0 0.95 0.99 0.97 966  | |
1 0.90 0.63 0.74 149  | |
accuracy 0.94 1115  | |
macro avg 0.92 0.81 0.86 1115  | |
weighted avg 0.94 0.94 0.94 1115  | 
混淆矩阵:
[956 10]  | |
[ 55 94]  | 
模型交叉验证:{'mean_accuracy': 0.9488419320257886, 'std_accuracy': 0.007344538548604231}
# NaiveBayes
模型准确率: 78.03%
分类报告:
precision recall f1-score support  | |
0 0.97 0.77 0.86 966  | |
1 0.37 0.87 0.51 149  | |
accuracy 0.78 1115  | |
macro avg 0.67 0.82 0.69 1115  | |
weighted avg 0.89 0.78 0.81 1115  | 
混淆矩阵:
[740 226]  | |
[ 19 130]  | 
模型交叉验证:{'mean_accuracy': 0.8012078935845752, 'std_accuracy': 0.01837261295740388}
# 分析与评价
可以看到,三者的表现均良好,其中 SVM 效果最好,朴素贝叶斯相对较差。推测出监督学习可以较好地学习到垃圾短信的特征,实现分类效果。
# 总结
# 模型性能差异的根本原因
| 原因 | 影响 | 
|---|---|
| 数据特征:文本经 TF-IDF 后是高维稀疏数据 | 非线性、非球状、非高斯 —— 对聚类不友好 | 
| 监督信息可用性 | 有监督模型能 “学会” 哪些特征是 spam 的,聚类模型只能 “猜” | 
| 类别不平衡:ham 多,spam 少 | 聚类容易将所有样本归为大类 | 
| 聚类模型假设不成立 | k-means:类是球状;GMM:类是高斯;DBSCAN:类是密集簇 | 
# 模型优劣与适用性对比表
| 模型 | 类型 | 优点 | 缺点 | 适合任务 | 
|---|---|---|---|---|
| SVM | 监督 | 精度高,泛化强,适合高维数据 | 对大数据耗时 | 文本分类、情感分析等 | 
| 决策树 | 监督 | 可解释性强,运行快 | 容易过拟合,边界不平滑 | 结构化数据、快速部署场景 | 
| 朴素贝叶斯 | 监督 | 快速、易实现 | 特征独立假设不总成立,易误报 | 邮件初筛、简单分类 | 
| K-Means | 无监督 | 简单、可扩展 | 不适合高维、非凸类、不平衡数据 | 用户分群(数值型特征) | 
| DBSCAN | 无监督 | 能处理噪声点、发现异常形状簇 | 高维空间下效果差 | 空间聚类、异常检测 | 
| GMM | 无监督 | 软聚类、概率解释性 | 对高维稀疏文本不适用 | 连续型信号聚类(音频等) |