# 简介
数据集: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 | 无监督 | 软聚类、概率解释性 | 对高维稀疏文本不适用 | 连续型信号聚类(音频等) |