第六次实验:使用朴素贝叶斯对垃圾邮件分类(CUST)
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)相关推荐
- Python实现基于朴素贝叶斯的垃圾邮件分类 标签: python朴素贝叶斯垃圾邮件分类 2016-04-20 15:09 2750人阅读 评论(1) 收藏 举报 分类: 机器学习(19) 听说
Python实现基于朴素贝叶斯的垃圾邮件分类 标签: python朴素贝叶斯垃圾邮件分类 2016-04-20 15:09 2750人阅读 评论(1) 收藏 举报 分类: 机器学习(19) 听说朴 ...
- 机器学习--使用朴素贝叶斯进行垃圾邮件分类
一.学习背景 垃圾邮件的问题一直困扰着人们,传统的垃圾邮件分类的方法主要有"关键词法"和"校验码法"等,然而这两种方法效果并不理想.其中,如果使用的是" ...
- 朴素贝叶斯法 - 垃圾邮件分类
本文基于朴素贝叶斯构建一个分类垃圾邮件的模型,研究对象是英文的垃圾邮件. 邮件内容保存在txt文件中,其中分为训练样本train和测试样本test. 在训练样本中正常邮件命名为:pos:垃圾邮件命名为 ...
- [CS229学习笔记] 5.判别学习算法与生成学习算法,高斯判别分析,朴素贝叶斯,垃圾邮件分类,拉普拉斯平滑
本文对应的是吴恩达老师的CS229机器学习的第五课.这节课介绍了判别学习算法和生成学习算法,并给出了生成学习算法的一个实例:利用朴素贝叶斯进行垃圾邮件分类. 判别学习(Discriminative L ...
- AI基础:朴素贝叶斯与垃圾邮件分类
来,继续回顾基础算法 文章目录 背景&贝叶斯原理 贝叶斯分类器 朴素贝叶斯分类器 西瓜数据集下的朴素贝叶斯示例 朴素贝叶斯分类的优缺点 朴素贝叶斯关键问题 朴素贝叶斯企业中的应用案例 基于朴素 ...
- 朴素贝叶斯(垃圾邮件分类)
一.基于贝叶斯决策理论的分类方法 朴素贝叶斯是经典的机器学习算法之一,也是为数不多的基于概率论的分类算法.对于大多数的分类算法,在所有的机器学习分类算法中,朴素贝叶斯和其他绝大多数的分类算法都不同.比 ...
- Python微调文本顺序对抗朴素贝叶斯算法垃圾邮件分类机制
封面图片:<Python可以这样学>,ISBN:9787302456469,董付国,清华大学出版社 图书详情(京东): ================= 关于朴素贝叶斯算法中文垃圾邮件分 ...
- 机器学习实战之朴素贝叶斯与垃圾邮件分类
文章目录 一.实现原理 1.1 贝叶斯理论与公式 1.2 朴素贝叶斯分类器 1.3 拉普拉斯修正 1.4 分类小案例 二.代码实现 2.1 数据准备与处理 2.2 创建词汇表 2.3 构建词袋/词集模 ...
- 朴素贝叶斯 实现 垃圾邮件分类
1.贝叶斯的基本思想: 已知公式:p(y|x)=p(x|y)*p(y)/p(x) 可以将x看做特征向量,y为结果,那么p(y|x)就是在x特征出现的情况下,结果为y的概率. 在机器学习中,p(y|x) ...
最新文章
- css删除线_前端删除文字贯穿线的方法有哪些
- 使用Teams接收Azure服务运行状况通知
- java中输入任意一个数 分别写出他个位 十位_Java 任意输入一个整数,求各个位数之和...
- Mybatis的解析模块基础
- 微软rt做打印服务器,转换打印监视器以便与群集打印服务器配合使用
- 作为测试人员,这些工具不会真不行
- CS231n李飞飞计算机视觉 卷积神经网络详解上
- ACM算法设计---BFS、DFS
- 百度云盘群组中资源文件实时同步更新保存到自己群组的方法
- Oracle官方PLSQL学习网址
- 【更新】VMware虚拟机黑群晖7.1.1 RC(懒人包)
- 新版标准日本语中级_第二十六课
- 做多应用层,做多WEB3华人创业者
- iOS开发者知识普及,Swift 挑战 Objective-C,谁会笑到最后?
- 用php写后端怎么使用模板_用PHP保守秘密
- 斐波那契问题(兔子问题)
- 业务运营支撑系统 BOSS(Business Operation Support System)。
- 动物 v.s. AI奥运会:你会赌一只鸟还是机器人夺冠?
- Live软件开发面面谈——权限
- API 设计、开发、测试一体化协作平台ApiFox、ApiPost和YAPI对比