1.实验目的和要求

会用Python创建朴素贝叶斯模型

使用朴素贝叶斯模型对垃圾邮件分类

会把文本文件变成向量

会用评价朴素贝叶斯模型的分类效果

2.实验环境

pycharm2021.3.1、Win11

处理器    Intel(R) Core(TM) i5-10210U CPU @ 1.60GHz   2.11 GHz

机带 RAM  16.0 GB (15.8 GB 可用)

系统类型   64 位操作系统, 基于 x64 的处理器

3.实验内容

把给定的数据集message.csv拆分成训练集测试集使用sklearn. naive_bayes.MultinomialNB类创建一个朴素贝叶斯模型,使用训练数 据训练出一个预测模型,然后用预测模型对测试集中数据进行分类,评价模型的分类效果。

message.csv数据集中包含大量的短信,每行数据包括2个字段:短信内容,短信类 别(1或者0),短信类别为1的是垃圾邮件。

MultinomialNB对象的$\alpha$属性,可以用于设置或获取相应的平滑参数值。

4.代码

import pandas as pd
import re
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.naive_bayes import MultinomialNB
from sklearn.metrics import accuracy_score# 读取CSV文件,将数据集按3:1的比例拆分成训练集合测试集
print("1、读取csv文件数据,并拆分成训练数据和测试数据....")
df = 'messages.csv'
data = pd.read_csv(df)
fp = open(df, encoding="utf-8")
dataset = data.iloc[:, 0]  # 短信内容
labels = data.iloc[:, 1]  # 短信分类结果split_ratio = 0.75  # 75%的训练数据
training_data = []
testing_data = []
np.random.seed(0)x_train, x_test, y_train, y_test = train_test_split(dataset, labels, train_size=0.75, random_state=0)xTrain = x_train.reset_index(drop=True)
yTrain = y_train.reset_index(drop=True)
xTest = x_test.reset_index(drop=True)
yTest = y_test.reset_index(drop=True)# 将文本拆分成单词def tokenize(message):message = message.lower()all_words = re.findall("[a-z0-9']+", message)return set(all_words)print("2、构建词汇表,并形成Feature矩阵和Classify矩阵....")
# 构建词汇表
word_dict = []
for i in range(len(xTrain)):te = tokenize(xTrain[i])for word in te:word_dict.append(word)# print(word_dict)
# print(len(word_dict))
word_dict_set = set(word_dict)
word_dict_done = list(word_dict_set)
num_features = len(word_dict_done)# 生成训练矩阵(特征+标签)
# 构建词汇表,形成特征矩阵和分类矩阵def generateMat(data):num_samples = len(data)feature = np.zeros((num_samples, num_features))classify = np.zeros(num_samples)for i in range(num_samples):te = tokenize(data[i])# classify[i] = data[1]    # 有错误,显示是空的字符串,没有解决for word in te:if word in word_dict_done:feature[i][word_dict_done.index(word)] = 1return feature
# def generateMat(data):
#     num_samples = len(data)
#     feature = np.zeros((num_samples, num_features))
#     classify = np.zeros(num_samples)
#     for i in range(num_samples):
#         data_row = data[i]
#         classify[i] = data_row[1]
#         for word in data_row[0]:
#             if word in word_dict:
#                 feature[i][word_dict.index(word)] = 1
#     return feature, classifyxTrain_future = generateMat(xTrain)
xTest_future = generateMat(xTest)
print("3、根据训练数据,形成Feature矩阵和Classify矩阵....")
# 训练集的维度
print("训练矩阵特征维度:", xTrain_future.shape)
# 测试集的维度
print("4、根据测试数据,形成Feature矩阵和Classify矩阵....")
print("测试矩阵特征维度:", xTest_future.shape)# 用训练集训练朴素贝叶斯模型
print("5、训练朴素贝叶斯模型....")
model = MultinomialNB()
model.fit(xTrain_future, yTrain)# 用测试集进行预测
print("6、用测试集进行预测....")
predict_classify = model.predict(xTest_future)
# 计算并显示模型的准确率、精度、召回率和F1值
TN = FP = TP = FN = 0
for i in range(len(predict_classify)):if yTest[i] == 0 and predict_classify[i] == 0:TN += 1if yTest[i] == 0 and predict_classify[i] == 1:FP += 1if yTest[i] == 1 and predict_classify[i] == 1:TP += 1if yTest[i] == 1 and predict_classify[i] == 0:FN += 1
p = TP / (TP + FP)
r = TP / (TP + FN)
# F1值(是一个平均数,对精度与召回率进行平均的结果)
F1 = 1 / ((1 / 2) * (1 / p + 1 / r))
# 用测试集进行预测
# predict_classify与yPredict一样的
print("7、评价模型,计算准确率、精度、召回率和F1值....")
yPredict = model.predict(xTest_future)
print("Accuracy:", format(accuracy_score(yTest, yPredict)))  # 准确率
print("Precision:", p)  # 精度
print("Recall:", r)  # 召回率
print("F1 Score:", F1)  # F1值

5.流程图

6.结果截图

sklearn.naive_bayes.MultinomialNB()函数全称是先验为多项式分布的朴素贝叶斯;除了MultinomialNB之外,还有GaussianNB就是先验为高斯分布的朴素贝叶斯。

关注公众号,回复#垃圾邮件分类数据集#

7.参考资料

我亲爱的老师

第六次实验:使用朴素贝叶斯对垃圾邮件分类(CUST)相关推荐

  1. Python实现基于朴素贝叶斯的垃圾邮件分类 标签: python朴素贝叶斯垃圾邮件分类 2016-04-20 15:09 2750人阅读 评论(1) 收藏 举报 分类: 机器学习(19) 听说

    Python实现基于朴素贝叶斯的垃圾邮件分类 标签: python朴素贝叶斯垃圾邮件分类 2016-04-20 15:09 2750人阅读 评论(1) 收藏 举报  分类: 机器学习(19)  听说朴 ...

  2. 机器学习--使用朴素贝叶斯进行垃圾邮件分类

    一.学习背景 垃圾邮件的问题一直困扰着人们,传统的垃圾邮件分类的方法主要有"关键词法"和"校验码法"等,然而这两种方法效果并不理想.其中,如果使用的是" ...

  3. 朴素贝叶斯法 - 垃圾邮件分类

    本文基于朴素贝叶斯构建一个分类垃圾邮件的模型,研究对象是英文的垃圾邮件. 邮件内容保存在txt文件中,其中分为训练样本train和测试样本test. 在训练样本中正常邮件命名为:pos:垃圾邮件命名为 ...

  4. [CS229学习笔记] 5.判别学习算法与生成学习算法,高斯判别分析,朴素贝叶斯,垃圾邮件分类,拉普拉斯平滑

    本文对应的是吴恩达老师的CS229机器学习的第五课.这节课介绍了判别学习算法和生成学习算法,并给出了生成学习算法的一个实例:利用朴素贝叶斯进行垃圾邮件分类. 判别学习(Discriminative L ...

  5. AI基础:朴素贝叶斯与垃圾邮件分类

    来,继续回顾基础算法 文章目录 背景&贝叶斯原理 贝叶斯分类器 朴素贝叶斯分类器 西瓜数据集下的朴素贝叶斯示例 朴素贝叶斯分类的优缺点 朴素贝叶斯关键问题 朴素贝叶斯企业中的应用案例 基于朴素 ...

  6. 朴素贝叶斯(垃圾邮件分类)

    一.基于贝叶斯决策理论的分类方法 朴素贝叶斯是经典的机器学习算法之一,也是为数不多的基于概率论的分类算法.对于大多数的分类算法,在所有的机器学习分类算法中,朴素贝叶斯和其他绝大多数的分类算法都不同.比 ...

  7. Python微调文本顺序对抗朴素贝叶斯算法垃圾邮件分类机制

    封面图片:<Python可以这样学>,ISBN:9787302456469,董付国,清华大学出版社 图书详情(京东): ================= 关于朴素贝叶斯算法中文垃圾邮件分 ...

  8. 机器学习实战之朴素贝叶斯与垃圾邮件分类

    文章目录 一.实现原理 1.1 贝叶斯理论与公式 1.2 朴素贝叶斯分类器 1.3 拉普拉斯修正 1.4 分类小案例 二.代码实现 2.1 数据准备与处理 2.2 创建词汇表 2.3 构建词袋/词集模 ...

  9. 朴素贝叶斯 实现 垃圾邮件分类

    1.贝叶斯的基本思想: 已知公式:p(y|x)=p(x|y)*p(y)/p(x) 可以将x看做特征向量,y为结果,那么p(y|x)就是在x特征出现的情况下,结果为y的概率. 在机器学习中,p(y|x) ...

最新文章

  1. css删除线_前端删除文字贯穿线的方法有哪些
  2. 使用Teams接收Azure服务运行状况通知
  3. java中输入任意一个数 分别写出他个位 十位_Java 任意输入一个整数,求各个位数之和...
  4. Mybatis的解析模块基础
  5. 微软rt做打印服务器,转换打印监视器以便与群集打印服务器配合使用
  6. 作为测试人员,这些工具不会真不行
  7. CS231n李飞飞计算机视觉 卷积神经网络详解上
  8. ACM算法设计---BFS、DFS
  9. 百度云盘群组中资源文件实时同步更新保存到自己群组的方法
  10. Oracle官方PLSQL学习网址
  11. 【更新】VMware虚拟机黑群晖7.1.1 RC(懒人包)
  12. 新版标准日本语中级_第二十六课
  13. 做多应用层,做多WEB3华人创业者
  14. iOS开发者知识普及,Swift 挑战 Objective-C,谁会笑到最后?
  15. 用php写后端怎么使用模板_用PHP保守秘密
  16. 斐波那契问题(兔子问题)
  17. 业务运营支撑系统  BOSS(Business Operation Support System)。
  18. 动物 v.s. AI奥运会:你会赌一只鸟还是机器人夺冠?
  19. Live软件开发面面谈——权限
  20. API 设计、开发、测试一体化协作平台ApiFox、ApiPost和YAPI对比

热门文章

  1. 使用scons软件构建工具
  2. 关于PA的偏置电路线宽设计
  3. 全网最全的鸿蒙源码结构分析(附自制4张架构图)
  4. vue-form-making
  5. EXCEL做俄罗斯方块的详细步骤
  6. vim编辑器编辑文件语法_语法与Microsoft编辑器:您应该使用哪个?
  7. 水平渐近线与铅直渐近线
  8. 一个女孩从软件测试工程师到主管的成长
  9. 【知识星球】云、IT、数据、计算存储相关售前资料
  10. 悟_面向对象_小游戏和进阶