【人工智能项目】机器学习中文垃圾邮件分类任务

基于tensorflow2+textCNN的中文垃圾邮件分类 阅读详情

【人工智能项目】机器学习中文垃圾邮件分类任务

在这里插入图片描述
本次采用机器学习模型对中文邮件是否为垃圾邮件进行判别。那么工友们,学起来吧!!!

在这里插入图片描述

任务说明

0,商业秘密的秘密性那是维系其商业价值和垄断地位的前提条件之一

1,南口阿玛施新春第一批限量春装到店啦   春暖花开淑女裙、冰蓝色公主衫 气质粉小西装、冰丝女王长半裙、 皇

0,带给我们大常州一场壮观的视觉盛宴

0,有原因不明的泌尿系统结石等

0,23年从盐城拉回来的麻麻的嫁妆

0,感到自减肥、跳减肥健美操、

1,感谢致电杭州萧山全金釜韩国烧烤店,本店位于金城路xxx号。韩式烧烤等,价格实惠、欢迎惠顾【全金釜韩国烧烤店】

0,这款UVe智能杀菌机器人是扫地机的最佳伴侣

最前面表示标签,0代表是正常短信,1代表垃圾短信。

可以看出邮件分类的最大问题在于语意的理解。对中英文数字夹杂的语句进行分词,去除无意义的词汇,生成语意明确的等长词向量显得尤为重要。在词向量的特征提取过程中也可以采用TF-IDF等方式,来权衡每个词的相对重要性。

导包

import os
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline
import warnings
warnings.filterwarnings("ignore")

数据初步处理

数据集读取

原始数据短信数据共有7w多条数据,在这一步需要读取txt文档,并分割出label和text。

import os
import pandas as pd

sms_data_path = "."
sms_data = pd.read_csv(os.path.join(sms_data_path,"message.txt"),encoding="utf-8",header=None,sep = '\t',names=["label","text"])
sms_data.head()

在这里插入图片描述

sms_data.shape

(754843, 2)

统计垃圾邮件和非垃圾邮件的数量

# 统计垃圾和非垃圾邮件的数量
sms_data["label"].value_counts()

在这里插入图片描述

# 以图方式表示
sns.countplot(sms_data["label"])
plt.xlabel("Label")
plt.title("Number of ham of spam messages")

在这里插入图片描述

数据集划分

在模型训练前首先需要将数据集进行分割,这里将数据取出后进行一定比例的随机分割,分成训练集数据和测试集数据。

from sklearn.model_selection import train_test_split

x_train,x_test,y_train,y_test = train_test_split(sms_data["text"][:6000],sms_data["label"][:6000],test_size=0.2,random_state=2019)
print(x_train.shape)
print(y_train.shape)
print(x_test.shape)
print(y_test.shape)

(4800,)
(4800,)
(1200,)
(1200,)

文本特征读取

文本特征介绍

文本特征提取

  • 将文本数据转换成特征向量的过程
  • 比较常用的文本特征表示法为词袋法

词袋法:

  • 不考虑词语出现的顺序,每个出现过的词汇单独作为一列特征
  • 这些不重复的特征词汇集合为词表
  • 每一个文本都可以在很长的词表上统计出一个很多列的特征向量
  • 如果每个文本都出现的词汇,一般被标记为停用词 不计入特征向量

主要有两个api来实现CounterVectorizer和TfidfVectorizer

CountVectorizer:

  • 只考虑词汇在文本中出现的频率

TfidfVectorizer:

  • 除了考量某词汇在文本出现的频率,还关注包含这个词汇的所有文本的数量
  • 能够消减高频没有意义的词汇出现带来的影响,挖掘更有意义的特征。

TFIDF

from sklearn.feature_extraction.text import CountVectorizer,TfidfVectorizer
import pickle

# tfidf向量保存

# tfidf = TfidfVectorizer()
tfidftransformer_path = './tfidftransformer.pkl'
tfidf = pickle.load(open(tfidftransformer_path,"rb"))
# x_train_df = tfidf.fit_transform(x_train)
x_train_df = tfidf.transform(x_train)

# tfidf向量保存
# tfidftransformer_path = './tfidftransformer.pkl'
# with open(tfidftransformer_path, 'wb') as fw:
#     pickle.dump(tfidf, fw)

    
x_test_df = tfidf.transform(x_test)
print(type(x_train_df))
print(x_train_df.shape)
print(tfidf.get_feature_names()[:1000])

在这里插入图片描述

朴素贝叶斯模型

寻参

from sklearn.model_selection import GridSearchCV
from sklearn.naive_bayes import MultinomialNB


param_grid = {
    "alpha":np.concatenate(
        [
            np.arange(0.0001,0.001,0.0001),
            np.arange(0.001,0.01,0.001),
            np.arange(0.01,0.1,0.01),
            np.arange(0.1,1,0.1),
            np.arange(1,10,1),
            np.arange(10,100,5)
        ]
    )
}
model = MultinomialNB()
grid_cv_model = GridSearchCV(model,param_grid,n_jobs=-1,verbose=3,cv=3)
grid_cv_model.fit(x_train_df,y_train)

在这里插入图片描述

#对指标评价
print("{}{}".format("Best Estimator: ",grid_cv_model.best_estimator_))
print("{}{}".format("Besr Params: ",grid_cv_model.best_params_))
print("{}{}".format("Bset Scores: ",grid_cv_model.best_score_))

在这里插入图片描述

贝叶斯模型建立以及训练

建立贝叶斯模型

NB_model = MultinomialNB(alpha=0.1, class_prior=None, fit_prior=True)

贝叶斯模型训练

NB_model.fit(x_train_df,y_train)

贝叶斯模型保存

from sklearn.externals import joblib
joblib.dump(NB_model, "nb_model.m")

贝叶斯模型预测

prediction = dict()

prediction["MultinomialNB"] = NB_model.predict(x_test_df)

贝叶斯模型评估

from sklearn.metrics import accuracy_score,f1_score,confusion_matrix,classification_report

print(classification_report(y_test,prediction["MultinomialNB"],target_names=["Ham","Spam"]))

在这里插入图片描述

  • TP(True Positive):被正确分类的正样本

  • FP(False Positive):被错误分类的正样本

  • TN(True Negative):被正确分类的负样本

  • FN(False Negative):被错误分类的负样本

  • Precision精度;Recall召回率

  • Precision = TP/(TP+FP)即分类器认为是正类且确实是正类的部分占分类器认为是正类的比例

  • Recall = TP/(TP+FN)即分类器认为是正类且确实是正类站所有确实是正类的比例。

# 混淆矩阵
def plot_confusion_matrix(y_test,y_pred,title=""):
    conf_mat=confusion_matrix(y_test,y_pred)
    conf_mat_normalized=conf_mat.astype("float")/conf_mat.sum(axis=1)[:,np.newaxis]
    
    figsize=(22,5)
    
    ticksize=18
    titlesize=ticksize+8
    labelsize=ticksize+5
    
    xlabel="Predicted label"
    ylabel="True label"
    
    params={"figure.figsize":figsize,
                   "axes.labelsize":labelsize,
                   "axes.titlesize":titlesize,
                    "xtick.labelsize":ticksize,
                    "ytick.labelsize":ticksize}
    
    plt.rcParams.update(params)
    
    plt.subplot(121)
    sns.heatmap(conf_mat,annot=True)
    plt.title(title)
    plt.xlabel(xlabel)
    plt.ylabel(ylabel)
    
    plt.subplot(122)
    sns.heatmap(conf_mat_normalized,annot=True)
    plt.title(title)
    plt.xlabel(xlabel)
    plt.ylabel(ylabel)
    plt.show()
    
    print("Confusion  Matrix:\n")
    print(conf_mat)
    print("\n\nConfusion Matrix Normalized:\n")
    print(conf_mat_normalized)
plot_confusion_matrix(y_test,prediction["MultinomialNB"],title="MultinomialNB")

在这里插入图片描述

x_test[y_test<prediction["MultinomialNB"]]

在这里插入图片描述

x_test[y_test>prediction["MultinomialNB"]]

在这里插入图片描述

其它的机器学习算法

from sklearn.linear_model import LogisticRegression
from sklearn.svm import SVC
from sklearn.naive_bayes import MultinomialNB
from sklearn.neighbors import KNeighborsClassifier
from sklearn.ensemble import AdaBoostClassifier,RandomForestClassifier,BaggingClassifier,ExtraTreesClassifier
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import accuracy_score,f1_score,confusion_matrix,classification_report
from sklearn.externals import joblib
models = {
    "KNeighborsClassifier":KNeighborsClassifier(),
    "LogisticRegression":LogisticRegression(),
    "DecisionTreeClassifier":DecisionTreeClassifier(),
    "RandomForestClassifier":RandomForestClassifier(),
    "ExtraTreesClassifier":ExtraTreesClassifier()
}

prediction = dict()
score_map = {}

for model_name in models:
    print(model_name)
    model = models[model_name]
    print("training..")
    model.fit(x_train_df,y_train)
    print("saving...")
    joblib.dump(model,model_name+".m")
    print("predicting...")
    prediction[model_name]=model.predict(x_test_df)
    score=accuracy_score(y_test,prediction[model_name])
    score_map[model_name]=score
    print(score)

在这里插入图片描述

预测

# 带预测的文本
predict_text = "商业秘密的秘密性那是维系其商业价值和垄断地位的前提条件之一"
predict_text = [predict_text]
# 加载tfidf向量
import pickle

tfidftransformer_path = './tfidftransformer.pkl'
tfidf = pickle.load(open(tfidftransformer_path,"rb"))
# 文本特征提取
predict_vector = tfidf.transform(predict_text)
# 加载贝叶斯算法
from sklearn.externals import joblib
model = joblib.load("nb_model.m")
# 预测
predict_score = model.predict(predict_vector)
predict_proba = model.predict_proba(predict_vector)
predict_proba

array([[0.97234983, 0.02765017]])

predict_proba[0][predict_score]

array([0.97234983])

predict_score

array([0], dtype=int64)

if predict_score == 0:
    print("这条短信是正常短信!")
elif predict_score == 1:
    print("这条短信是垃圾短信!")
这条短信是正常短信!

小结

那么本次任务就到此结束了,回头见!!!
在这里插入图片描述

垃圾邮件识别(一):用机器学习做中文邮件内容分类 总的来说,一封邮件可以分为发送人、接收人、抄送人、主题、时间、内容等要素,所以很自然的可以认为主要通过上述要素中的发送方、主题以及内容来进行垃圾邮件判断。 因此我们依次对上述要素进行分析: 垃圾邮件内容分类(通过提取垃圾邮件内容进行判断) 中文垃圾邮件分类 英文垃圾邮件分类 垃圾邮件标题分类 垃圾邮件发送方分类 最终,我们可以根据这三个维度进行综合评判,从而实现垃圾邮件的准确分类。本文将根据邮件内容进行垃圾邮件分类。... 阅读详情

相关推荐

【朴素贝叶斯】中文垃圾邮件分类

文章目录一、数据集和资料 一、数据集和资料

可乐大牛的博客 6532

中文邮件分类[朴素贝叶斯、支持向量机、Logistic,TF-IDF,词袋模型]

本文通过两种文本向量化的方式即TF-IDF和词袋模型对中文文本邮件进行预处理,利用朴素贝叶斯、支持向量机、Logistic回归3种模型分别在两种向量化方式下进行建模分析,通过对比各个模型在对应向量化方式的训练精确度和测试精度以及分析ROC曲线图,利用网格搜索和交叉验证的方法此基础上,得到朴素贝叶斯模型表现最优的参数,对应交叉验证平均精确度为0.935,测试集精确度为0.936,比原始参数高17.2%,证明了模型的可靠性。

qq_40102732的博客 5431

【机器学习】实验3,贝叶斯垃圾邮件识别(完整代码实现+报告)

电子邮件是互联网的一项重要服务,在大家的学习、工作和生活中会广泛使用。但是大家的邮箱常常被各种各样的垃圾邮件填充了。有统计显示,每天互联网上产生的垃圾邮件有几百亿近千亿的量级。因此,对电子邮件服务提供商来说,垃圾邮件过滤是一项重要功能。而朴素贝叶斯算法在垃圾邮件识别任务上一直表现非常好,至今仍然有很多系统在使用朴素贝叶斯算法作为基本的垃圾邮件识别算法。本次实验数据集来自的中文垃圾邮件数据集,目录解压后包含三个文件夹,其中data目录下是所有的邮件(未分词),已分词好的邮件在data_cut目录下。

高丽大学人工智能硕士在读|专注大模型、RAG、OCR与AI工程实践 5031

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

本项目应用应用两种特征提取方法进行支持向量机模型中文邮件分类研究,通过数据预处理、特征工程、模型构建、模型评估等工作,最终模型的F1分值达到0.97,这在文本分类领域,是非常棒的效果,可以应用于实际工作中。本次机器学习项目实战所需的资料,项目资源如下项目说明链接https提取码bcbp网盘如果失效,可以添加博主微信zy10178083httpshttpshttpshttpshttpshttpshttpshttpshttpshttpshttpshttps。......

张陈亚的博客 2364

基于朴素贝叶斯和逻辑回归的垃圾邮件分类

基于朴素贝叶斯和逻辑回归的垃圾邮件分类

需要远程指导仿真实验、代码有问题的,请后台私信或者关注公众号 1534

【基于PyTorch】多项式贝叶斯分类器实现中文文本情感分类任务

多项式朴素贝叶斯(Multinomial Naive Bayes, MultinomialNB)是一种常用于文本分类的算法,特别适用于多类别文本分类。其在处理离散数据(如文本数据中的词频)时表现优异,可以用于情感分析、垃圾邮件检测等任务。多项式朴素贝叶斯分类器是一种简单但功能强大的文本分类工具,在处理中文文本情感分析任务中表现尤为出色。通过适当的文本预处理和特征提取技术,可以实现高效的情感分类效果。

走向CTO的路上... 1184

毕业设计 : 中文文本分类 ( 机器学习 和 深度学习 ) - 新闻分类 情感分类 垃圾邮件分类

1 前言 学长今天帮助同学开发项目,正好需要到文本分类,今天就带大家梳理一下中文文本分类的主要方法和流程 学长本片博客的目的主要记录学长自己构建文本分类系统的过程,分别构建基于传统机器学习的文本分类和基于深度学习的文本分类系统,并在同一数据集上进行测试。 2 中文文本分类 作为NLP领域最经典的场景之一,文本分类积累了大量的技术实现方法,如果将是否使用深度学习技术作为标准来衡量,实现方法大致可以分成两类: 基于传统机器学习的文本分类 基于深度学习的文本分类 facebook之前开源的fastText属于

HUXINY的博客 1万+

中文的垃圾邮件分类.rmd

文件是rmd格式,可以直接在r中打开,其中涉及的数据获取:https://trec.nist.gov/data/spam.html, 与《机器学习与R语言》书中数据库同源,但使用了其中的中文文本, 文件名为trec06c

通俗易懂的机器学习——筛选垃圾邮件(贝叶斯分类)

贝叶斯分类背景及贝叶斯公式解析,同时应用贝叶斯公式使用邮件数据集进行垃圾邮件分类实战

艾醒的博客 8202

中文垃圾邮件分类数据集

具有中文垃圾邮件,正常邮件,测试邮件等资料,可以用于朴素贝叶斯分类来检测垃圾邮件

文本分类-中文垃圾邮件分类.zip

中文垃圾邮件项目: 数据集分为:ham_data.txt 和 Spam.data.txt , 对应为 正常邮件和垃圾邮件 其中每行代表着一个邮件

基于机器学习(朴素贝叶斯)的垃圾邮件检测

1.概念介绍。 机器学习我们一般可以分为两大类,模式识别和异常检测。从行为来看,模式识别和异常检测边界比较模糊。在模式识别中,我们试图发现隐藏在数据中的显式或潜在的特性,形成特征集进行分类判断。异常检测从另一个维度进行知识发掘,最后的目标是建立给定数据中大部分的正太性,不是学习某些数据子集存在的特定模式,从各种正常情况的偏离都是异常行为,这也就是异常检测,比如说离群点检测。 2.背景介绍 邮...

MR王峰的专栏 7038

锂电池主动均衡理解

锂电池主动均衡方案总结: 来自:http://wenku.baidu.com/link?url=EWiyACZ3aLPhcOjI4FZL3uQ9d0FD6dBhADQSVQiaSmRHHATTdSig1Wy39JY7-ijCzbAEYG1ymz6Lv5zhGdZaStQSHzFt6v3h3_tMrJudz9O 目前车厂采用被动均衡方案的公司:(来自网页) 目前采用主动均衡的...

weixin_34365417的博客 2911

Python数据分析-垃圾邮件分类

Python数据分析-垃圾邮件分类

m0_62638421的博客 1796

自动驾驶仿真 (四)—— 基于PreScan与Simulink的AEB系统多场景验证

本文详细介绍了基于PreScan与Simulink的AEB系统多场景验证方法,涵盖标准场景搭建、复杂工况扩展及控制策略优化。通过仿真技术,显著降低测试成本并提升场景覆盖率,有效解决实车测试中的痛点问题。特别适用于自动驾驶领域的AEB系统开发与验证。

weixin_28273593的博客 249

从“看不懂Sansen”到亲手搭建:一个Class AB输出级+浮动电压源的保姆级设计复盘

本文详细记录了从理论困惑到实践突破的Class AB输出级与浮动电压源设计全过程。通过电流镜调试、恒定跨导优化及版图匹配等关键步骤,作者实现了高性能运放设计,并分享了从仿真到实测的宝贵经验,为模拟电路初学者提供实用指导。

weixin_33737774的博客 869

python 邮件分类_python_NLP实战之中文垃圾邮件分类

一、机器学习训练的要素数据、转换数据的模型、衡量模型好坏的损失函数、调整模型权重以便最小化损失函数的算法二、机器学习的组成部分1、按照学习结果分类预测、聚类、分类、降维2、按照学习方法分类监督学习,无监督学习,半监督学习,增强学习补充:特征提取(BOW TFIDF Ngram)三、实战中文垃圾文件分类1、数据提取def get_data():'''获取数据,数据的载入:return: 文本数...

weixin_29786123的博客 2147

银行卡密码键盘 SM4 ECB模式+ANSI X9.8 格式标准(带主账号信息)PIN 加解密示例

文章目录1.软加解密示例2.知识点①ANSI X9.8 格式标准②主密钥,工作密钥加解密基本概念:加密种类:3.密码键盘操作4.工具 1.软加解密示例 ————————————————————————————————————————————------ 已知数据: 银行测试主密钥TMK: 1234567890ABCDEFABCDEF0987654321 通过签到接口得到: 工作密钥密文KeyVal...

老孟嘚吧嘚 6655

【初中生讲机器学习】9. 我是怎么用朴素贝叶斯实现垃圾邮件分类的?真的超全!

【初中生讲机器学习】用朴素贝叶斯算法带你实现垃圾邮件分类!保证学会!

weixin_46836893的博客 1934

分支界定法(branch and bound)与背包问题的代码实现

分支界定法(branch and bound)与背包问题的代码实现 LastEditTime: - 2021.2.3 不卖茶的吴龙茗茶 分支界定法是一种在整数规划中常用的算法,其主要思想为将大问题分割成小问题进行求解。分支界定法是围绕着一个二叉树进行的,以背包问题为例: 假设小明有一个背包,其总的容积为30,小明有三件东西可以带,三件东西的体积分别为:10,15,20。求问小明如何能够在背包中装下更大体积的物品? .

小吴同学的小屋 1885

系规备考论文:论IT服务规划设计

系规备考论文:论IT服务规划设计

liuxu324的博客 1146

使用朴素贝叶斯算法实现中文邮件分类_基于机器学习(朴素贝叶斯)的垃圾邮件检测...

1.概念介绍。机器学习我们一般可以分为两大类,模式识别和异常检测。从行为来看,模式识别和异常检测边界比较模糊。在模式识别中,我们试图发现隐藏在数据中的显式或潜在的特性,形成特征集进行分类判断。异常检测从另一个维度进行知识发掘,最后的目标是建立给定数据中大部分的正太性,不是学习某些数据子集存在的特定模式,从各种正常情况的偏离都是异常行为,这也就是异常检测,比如说离群点检测。2.背景介绍邮件已在日常工...

weixin_42519514的博客 1979

innovus:ccopt_design流程

我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧?spec文件可以只创建一次,无需多次创建。2)virtual balance阶段。3)Full Balancing阶段。4)Clock Routing阶段。1)clustering阶段。

m0_61544122的博客 2483

【毕业设计】深度学习中文文本分类(新闻分类 情感分类 垃圾邮件分类)

🔥 Hi,大家好,这里是丹成学长的毕设系列文章!🔥 对毕设有任何疑问都可以问学长哦!这两年开始,各个学校对毕设的要求越来越高,难度也越来越大… 毕业设计耗费时间,耗费精力,甚至有些题目即使是专业的老师或者硕士生也需要很长时间,所以一旦发现问题,一定要提前准备,避免到后面措手不及,草草了事。为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天要分享的新项目是🚩中文文本分类 ( 机器学习 和 深度学习 ) - 新闻分类 情感分类 垃圾邮件分类。

caxiou的博客 2162

SAP SLT 在 carve-out 场景中的关键作用:从理论到实操全景展现

深入剖析 SAP Landscape Transformation(SLT Replication Server)在 carve‑out 场景中的价值,需要从 carve‑out 本身的背景逻辑说起。carve‑out 指的是企业因并购、拆分、剥离商业单元等因素,而将 SAP 系统中某部分业务(例如组织单元、公司代码、模块数据等) separated 出来,导入到独立的系统中。这一过程极具挑战性,既要确保业务连续性,又要实现数据精准迁移和系统隔离 (

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 7554

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

机器学习-02-机器学习算法分类以及在各行各业的应用

本系列是机器学习课程的第02篇,主要介绍机器学习算法分类以及在各行各业的应用。

IT从业者的成长历程 2914

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

上一篇: 【人工智能项目】Bert实现泰迪杯论坛文本分类任务
下一篇: 【人工智能项目】深度学习实现图像多标签分类
mind_programmonkey
mind_programmonkey 领域专家: 算法与数据结构技术领域 领域专家: 算法与数据结构技术领域
博客等级 码龄9年 4435粉丝 1111原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

mind_programmonkey

你的鼓励是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值