Python基于词袋模型特征和TFIDF特征进行支持向量机模型中文邮件分类项目实战

本文涉及的产品
模型训练 PAI-DLC,100CU*H 3个月
模型在线服务 PAI-EAS,A10/V100等 500元 1个月
交互式建模 PAI-DSW,每月250计算时 3个月
简介: Python基于词袋模型特征和TFIDF特征进行支持向量机模型中文邮件分类项目实战

说明:这是一个机器学习实战项目(附带数据+代码+文档+视频讲解),如需数据+代码+文档+视频讲解可以直接到文章最后获取。

image.png

image.png

1.项目背景

随着互联网的发展,越来越多的用户通过互联网来交流,电子邮件成为人们日常生活交流的重要工具。用户每星期可能收到成百上千的电子邮件,但是大部分是垃圾邮件。据时代杂志估计,1994年人们发送了7760亿封电子邮件,1997年则是26000亿封,2000年更是达到了66000亿封。电子邮件特别是垃圾邮件的泛滥已经严重影响电子商务活动的正常开展。人们通常要花费很多时间对电子邮件进行处理,但效果却不明显,严重影响了正常的商务活动。对邮件进行合理的分类,为用户挑选出有意义的电子邮件是所有用户的迫切要求。

目前的邮件分类方法大多是将邮件分为垃圾邮件与非垃圾邮件,从而实现对邮件的自动过滤。本项目基于词袋模型特征和TFIDF特征进行支持向量机模型中文邮件分类,邮件类别分为正常邮件和垃圾邮件。

2.数据采集

本次建模数据来源于网络,数据项统计如下:

image.png

数据详情如下(部分展示):

正常邮件:

image.png

垃圾邮件:

image.png

每一行代表一封邮件。

3.数据预处理

3.1查看数据

关键代码

print("总的数据量:", len(labels))

corpus, labels = remove_empty_docs(corpus, labels)  # 移除空行

print('样本之一:', corpus[10])
print('样本的label:', labels[10])
label_name_map = ["垃圾邮件", "正常邮件"]
print('实际类型:', label_name_map[int(labels[10])])

 

结果如图所示:

image.png

4.特征工程

4.1数据集拆分

关键代码

train_corpus, test_corpus, train_labels, test_labels = prepare_datasets(corpus, labels, test_data_proportion=0.3)

把数据集分为70%训练集和30%测试集。

4.2加载停用词

关键代码

with open("stop_words.utf8", encoding="utf8") as f:
    stopword_list = f.readlines()

停用词列表如下,部分展示:

image.png

4.3分词

关键代码

import jieba
tokens = jieba.lcut(text)
tokens = [token.strip() for token in tokens]

结果如图所示:

训练集分词展示:

image.png

测试集分词展示:

image.png

4.4移除特殊字符

关键代码

pattern = re.compile('[{}]'.format(re.escape(string.punctuation)))  # re.escape就能自动处理所有的特殊符号
# string.punctuation返回所有标点符号
filtered_tokens = filter(None, [pattern.sub('', token) for token in tokens])
filtered_text = ' '.join(filtered_tokens)

 

4.5去停用词

关键代码

filtered_tokens = [token for token in tokens if token not in stopword_list]
filtered_text = ''.join(filtered_tokens)

 

4.6归整化

关键代码

for text in corpus:

    text = remove_special_characters(text)  # 出去特殊符号
    text = remove_stopwords(text)  # 去除停用词
    normalized_corpus.append(text)

结果如图所示:

归整化后的训练集:

image.png

归整化后的测试集:

image.png

4.7词袋模型特征提取

关键代码

# min_df:在构建词汇表时,忽略那些文档频率严格低于给定阈值的术语。
# ngram_range(1,1)表示仅使用单字符
vectorizer = CountVectorizer(min_df=1, ngram_range=ngram_range)
features = vectorizer.fit_transform(corpus)  # 学习词汇表字典并返回文档术语矩阵

结果如图所示:

image.png

4.8 TFIDF特征提取

关键代码

vectorizer = TfidfVectorizer(min_df=1,  # 在构建词汇表时,忽略那些文档频率严格低于给定阈值的术语
                             norm='l2',  # 每个输出行都有单位范数,可以是:* ' l2 ':向量元素的平方和为1。当应用l2范数时,两个向量之间的余弦相似度是它们的点积
                             smooth_idf=True,  # 通过在文档频率上增加1来平滑idf权重,就好像在一个额外的文档中只包含集合中的每一个词一样。防止零分歧。
                             ngram_range=ngram_range)  # ngram_range(1,1)表示仅使用单字符
features = vectorizer.fit_transform(corpus)  # 学习词汇表和idf,返回文档术语矩阵。

结果如图所示:

image.png

5.构建支持向量机分类模型

5.1基于词袋模型特征的支持向量机

关键代码

# 基于词袋模型的支持向量机方法
print("基于词袋模型的支持向量机")
svm_bow_predictions = train_predict_evaluate_model(classifier=svm,
                                                   train_features=bow_train_features,
                                                   train_labels=train_labels,
                                                   test_features=bow_test_features,
                                                   test_labels=test_labels)

5.2基于TFIDF特征的支持向量机

关键代码

# 基于tfidf的支持向量机模型
print("基于tfidf的支持向量机模型")
svm_tfidf_predictions = train_predict_evaluate_model(classifier=svm,
                                                     train_features=tfidf_train_features,
                                                     train_labels=train_labels,
                                                     test_features=tfidf_test_features,
                                                     test_labels=test_labels)

 

6.模型评估

6.1评估指标及结果

评估指标主要包括准确率、查准率、查全率(召回率)、F1分值等等。  

关键代码

print('准确率:', np.round(metrics.accuracy_score(true_labels, predicted_labels), 2))
print('查准率:', np.round(metrics.precision_score(true_labels, predicted_labels, average='weighted'), 2))
print('召回率:', np.round(metrics.recall_score(true_labels, predicted_labels, average='weighted'), 2))
print('F1得分:', np.round(metrics.f1_score(true_labels, predicted_labels, average='weighted'), 2))

 

模型名称

指标名称

指标值

测试集

基于词袋模型特征的支持向量机模型

准确率

0.97

查准率

0.97

查全率

0.97

F1分值

0.97

 

模型名称

指标名称

指标值

测试集

基于TFIDF特征的支持向量机模型

准确率

0.97

查准率

0.97

查全率

0.97

F1分值

0.97

通过上表可以看到,两种特征提取的模型的准确率均为97%,F1分值均为0.97,说明模型效果良好。

6.2分类报告

关键代码

# 分类报告
print(classification_report(true_labels, predicted_labels))

结果如图所示:

基于词袋模型特征的分类报告

image.png

类型为垃圾邮件的F1分值为0.97;类型为正常邮件的F1分值为0.97

基于TFIDF特征的分类报告

image.png

类型为垃圾邮件的F1分值为0.97;类型为正常邮件的F1分值为0.97

6.3混淆矩阵

关键代码

# 构建数据框
cm_matrix = pd.DataFrame(data=cm, columns=['Actual :0', 'Actual :1'],
                         index=['Predict :0', 'Predict :1'])

sns.heatmap(cm_matrix, annot=True, fmt='d', cmap='YlGnBu')  # 热力图展示
plt.show()  # 展示图片

结果如图所示:

基于词袋模型特征的分类报告

image.png

从上图可以看到,预测为垃圾邮件 实际为正常邮件的有91封;预测为正常邮件  实际为垃圾邮件的有5封。

基于TFIDF特征的分类报告

image.png

从上图可以看到,预测为垃圾邮件 实际为正常邮件的有89封;预测为正常邮件  实际为垃圾邮件的有6封。

7.模型预测展示

显示正确分类的邮件:

image.png

显示错误分类的邮件:

image.png

8.总结展望

本项目应用两种特征提取方法进行支持向量机模型中文邮件分类研究,通过数据预处理、特征工程、模型构建、模型评估等工作,最终模型的F1分值达到0.97,这在文本分类领域,是非常棒的效果,可以应用于实际工作中。

# 本次机器学习项目实战所需的资料,项目资源如下:
 
# 项目说明:
 
# 获取方式一:
 
# 项目实战合集导航:
 
https://docs.qq.com/sheet/DTVd0Y2NNQUlWcmd6?tab=BB08J2
 
# 获取方式二:
 
链接:https://pan.baidu.com/s/1KbSmPLG_QFsnSE-LU8cGUA 
提取码:v8fq
相关实践学习
使用PAI-EAS一键部署ChatGLM及LangChain应用
本场景中主要介绍如何使用模型在线服务(PAI-EAS)部署ChatGLM的AI-Web应用以及启动WebUI进行模型推理,并通过LangChain集成自己的业务数据。
机器学习概览及常见算法
机器学习(Machine Learning, ML)是人工智能的核心,专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能,它是使计算机具有智能的根本途径,其应用遍及人工智能的各个领域。 本课程将带你入门机器学习,掌握机器学习的概念和常用的算法。
相关文章
|
2月前
|
机器学习/深度学习 算法 Python
机器学习特征筛选:向后淘汰法原理与Python实现
向后淘汰法(Backward Elimination)是机器学习中一种重要的特征选择技术,通过系统性地移除对模型贡献较小的特征,以提高模型性能和可解释性。该方法从完整特征集出发,逐步剔除不重要的特征,最终保留最具影响力的变量子集。其优势包括提升模型简洁性和性能,减少过拟合,降低计算复杂度。然而,该方法在高维特征空间中计算成本较高,且可能陷入局部最优解。适用于线性回归、逻辑回归等统计学习模型。
136 7
|
4月前
|
数据采集 数据可视化 数据挖掘
金融波动率的多模型建模研究:GARCH族与HAR模型的Python实现与对比分析
本文探讨了金融资产波动率建模中的三种主流方法:GARCH、GJR-GARCH和HAR模型,基于SPY的实际交易数据进行实证分析。GARCH模型捕捉波动率聚类特征,GJR-GARCH引入杠杆效应,HAR整合多时间尺度波动率信息。通过Python实现模型估计与性能比较,展示了各模型在风险管理、衍生品定价等领域的应用优势。
612 66
金融波动率的多模型建模研究:GARCH族与HAR模型的Python实现与对比分析
|
5月前
|
机器学习/深度学习 数据可视化 TensorFlow
使用Python实现深度学习模型的分布式训练
使用Python实现深度学习模型的分布式训练
268 73
|
5月前
|
机器学习/深度学习 数据采集 搜索推荐
使用Python实现智能食品消费偏好预测的深度学习模型
使用Python实现智能食品消费偏好预测的深度学习模型
226 23
|
5月前
|
机器学习/深度学习 数据采集 供应链
使用Python实现智能食品消费需求分析的深度学习模型
使用Python实现智能食品消费需求分析的深度学习模型
154 21
|
5月前
|
机器学习/深度学习 数据采集 数据挖掘
使用Python实现智能食品消费模式预测的深度学习模型
使用Python实现智能食品消费模式预测的深度学习模型
136 2
|
2月前
|
机器学习/深度学习 存储 设计模式
Python 高级编程与实战:深入理解性能优化与调试技巧
本文深入探讨了Python的性能优化与调试技巧,涵盖profiling、caching、Cython等优化工具,以及pdb、logging、assert等调试方法。通过实战项目,如优化斐波那契数列计算和调试Web应用,帮助读者掌握这些技术,提升编程效率。附有进一步学习资源,助力读者深入学习。
|
2月前
|
人工智能 Java 数据安全/隐私保护
[oeasy]python081_ai编程最佳实践_ai辅助编程_提出要求_解决问题
本文介绍了如何利用AI辅助编程解决实际问题,以猫屎咖啡的购买为例,逐步实现将购买斤数换算成人民币金额的功能。文章强调了与AI协作时的三个要点:1) 去除无关信息,聚焦目标;2) 将复杂任务拆解为小步骤,逐步完成;3) 巩固已有成果后再推进。最终代码实现了输入验证、单位转换和价格计算,并保留两位小数。总结指出,在AI时代,人类负责明确目标、拆分任务和确认结果,AI则负责生成代码、解释含义和提供优化建议,编程不会被取代,而是会更广泛地融入各领域。
99 28
|
2月前
|
机器学习/深度学习 数据可视化 TensorFlow
Python 高级编程与实战:深入理解数据科学与机器学习
本文深入探讨了Python在数据科学与机器学习中的应用,介绍了pandas、numpy、matplotlib等数据科学工具,以及scikit-learn、tensorflow、keras等机器学习库。通过实战项目,如数据可视化和鸢尾花数据集分类,帮助读者掌握这些技术。最后提供了进一步学习资源,助力提升Python编程技能。
|
2月前
|
Python
[oeasy]python074_ai辅助编程_水果程序_fruits_apple_banana_加法_python之禅
本文回顾了从模块导入变量和函数的方法,并通过一个求和程序实例,讲解了Python中输入处理、类型转换及异常处理的应用。重点分析了“明了胜于晦涩”(Explicit is better than implicit)的Python之禅理念,强调代码应清晰明确。最后总结了加法运算程序的实现过程,并预告后续内容将深入探讨变量类型的隐式与显式问题。附有相关资源链接供进一步学习。
51 4

热门文章

最新文章