在日常生活和工作中,垃圾短信已经成为用户不可忽视的干扰因素。从简单的广告推销到复杂的钓鱼诈骗,垃圾短信不仅浪费时间,还可能带来安全隐患。为了帮助用户更高效地识别和拦截垃圾短信,我们开发了一款基于机器学习的中文垃圾短信检测系统,支持多种模型和灵活的参数配置,让垃圾短信无所遁形。
核心代码概览与亮点
本项目使用了 Python 语言,集成了 scikit-learn
机器学习库,代码清晰且易于维护,适合数据科学爱好者和开发者使用。以下是系统的核心功能模块说明。
完整代码获取地址:超强垃圾短信检测系统:助你轻松识别垃圾短信
1. 数据加载与预处理
在 main.py
文件中,数据加载和预处理是检测系统的第一步。我们提供了 read_stopwords
和 train
函数,分别用于停用词加载和模型训练。
def read_stopwords(stopwords_path):
with open(stopwords_path, 'r', encoding='utf-8') as f:
stopwords = f.read().splitlines()
return stopwords
亮点:
- 支持自定义停用词表,通过
stopwords.txt
提供自定义中文停用词。 - 采用
CountVectorizer
和TfidfVectorizer
进行词向量化,适配不同文本处理需求。
2. 模型选择与训练
该系统提供了三种经典的机器学习文本分类模型,用户可以通过命令行自由切换:
- 朴素贝叶斯 (MultinomialNB)
- 逻辑回归 (Logistic Regression)
- 支持向量机 (SVM)
if args.model == 'naive_bayes':
model = MultinomialNB(alpha=args.alpha)
elif args.model == 'logistic':
model = LogisticRegression(max_iter=200, random_state=args.random_state)
elif args.model == 'svm':
model = SVC(probability=True, kernel='linear', random_state=args.random_state)
亮点:
- 通过
argparse
实现参数化训练,用户可自定义模型类型与超参数(如alpha
、ngram
)。 - 自动化的
Pipeline
实现,从数据预处理到模型训练仅需一行代码调用。
3. 模型评估与可视化
训练完成后,系统自动评估模型的性能,并通过混淆矩阵进行可视化展示:
def plot_confusion_matrix(y_true, y_pred, labels, save_path=None):
cm = metrics.confusion_matrix(y_true, y_pred)
sns.heatmap(cm, annot=True, fmt='d', cmap='Blues', xticklabels=labels, yticklabels=labels)
plt.xlabel('Predicted Label')
plt.ylabel('True Label')
plt.title('Confusion Matrix')
plt.savefig(save_path)
亮点:
- 使用
matplotlib
和seaborn
生成混淆矩阵热力图,便于直观了解模型性能。 - 评估指标包括 准确率、精确率、召回率、F1-score 和可选的 AUC 曲线。
4. 模型保存与批量预测
完成训练后,系统自动保存模型,便于后续快速调用进行批量短信检测:
pipeline = Pipeline([
('vect', vectorizer),
('clf', model)
])
joblib.dump(pipeline, args.output_model)
使用保存的模型进行预测示例:
pipeline = joblib.load('sms_spam_pipeline.pkl')
predictions = pipeline.predict(["免费领取优惠券,点击链接即可兑换", "您的快递已送达,请点击链接确认"])
print(predictions)
F:\Anaconda\envs\py39\python.exe H:\python2025年项目\垃圾短信分类系统\中文垃圾短信分类(二)带UI界面\code\main.py
在测试集上的混淆矩阵:
[[126342 1099]
[ 830 13319]]
在测试集上的分类结果报告:
precision recall f1-score support
0 0.99 0.99 0.99 127441
1 0.92 0.94 0.93 14149
accuracy 0.99 141590
macro avg 0.96 0.97 0.96 141590
weighted avg 0.99 0.99 0.99 141590
在测试集上的Accuracy: 0.9864
Precision: 0.9238
Recall: 0.9413
F1 score: 0.9325
AUC: 0.9887
模型Pipeline已保存到: sms_spam_pipeline.pkl
示例测试: ['乌兰察布丰镇市法院成立爱心救助基金', '感谢致电杭州萧山全金釜韩国烧烤店,本店位于金城路xxx号。韩式烧烤等,价格实惠、欢迎惠顾【全金釜韩国烧烤店】', '免费领取优惠券,点击链接即可兑换']
预测结果: [0 1 0]
Process finished with exit code 0
亮点:
- 通过
joblib
实现模型持久化,便于在生产环境下快速部署。 - 支持批量短信检测,方便企业级短信网关的集成。
5. 丰富的命令行参数支持
使用 argparse
,系统支持从命令行灵活调整模型、数据、超参数等。以下是一个示例命令行调用:
python main.py --data_path ./dataset/sms_pub.csv \
--stopwords_path ./dataset/stopwords.txt \
--model naive_bayes \
--vectorizer tfidf \
--alpha 1.0 \
--ngram 2 \
--test_size 0.2 \
--output_model sms_spam_pipeline.pkl
系统优势
✅ 高效准确:
使用经典的机器学习算法,搭配优化的超参数,提供高效且准确的垃圾短信检测能力。
✅ 灵活可配置:
支持多种模型与文本向量化方式,自由调整超参数以适应不同数据集。
✅ 可视化支持:
自动生成混淆矩阵与性能报告,帮助用户直观理解模型的表现。
✅ 批量检测:
保存模型后可直接用于批量检测,适用于企业短信网关或反欺诈系统。
✅ 易用性强:
命令行友好,仅需一行命令即可完成训练与预测。