首页 > 编程语言 >12.10实验六:朴素贝叶斯算法实现与测试

12.10实验六:朴素贝叶斯算法实现与测试

时间:2024-12-12 14:56:43浏览次数:4  
标签:score pred 贝叶斯 准确度 算法 train 测试 12.10 test

 

 

一、实验目的

深入理解朴素贝叶斯的算法原理,能够使用 Python 语言实现朴素贝叶斯的训练与测试,并且使用五折交叉验证算法进行模型训练与评估。

 

二、实验内容

(1)从 scikit-learn 库中加载 iris 数据集,使用留出法留出 1/3 的样本作为测试集(注意同分布取样);

(2)使用训练集训练朴素贝叶斯分类算法;

(3)使用五折交叉验证对模型性能(准确度、精度、召回率和 F1 值)进行评估和选择;

(4)使用测试集,测试模型的性能,对测试结果进行分析,完成实验报告中实验六的部分。

 

三、算法步骤、代码、及结果

   1. 算法伪代码

开始

 

   - 导入数据集处理库

   - 导入模型选择和评估库

 

   - X = 特征数据

   - y = 标签数据

 

   - 使用留出法,测试集占 1/3

   - 确保分层抽样以保持类别分布

 

   - model = 创建高斯朴素贝叶斯分类器

   - model.训练(X_train, y_train)

 

   - cv_scores = 计算交叉验证得分

 

   - y_pred = 交叉验证预测(X_train, y_train)

 

   - accuracy = 计算准确度(y_train, y_pred)

   - precision = 计算精度(y_train, y_pred)

   - recall = 计算召回率(y_train, y_pred)

   - f1 = 计算 F1 值(y_train, y_pred)

 

   - 打印交叉验证准确度

   - 打印训练集准确度

   - 打印精度

   - 打印召回率

   - 打印 F1 值

 

    - y_test_pred = model.预测(X_test)

 

    - test_accuracy = 计算准确度(y_test, y_test_pred)

    - test_precision = 计算精度(y_test, y_test_pred)

    - test_recall = 计算召回率(y_test, y_test_pred)

    - test_f1 = 计算 F1 值(y_test, y_test_pred)

 

    - 打印测试集准确度

    - 打印测试集精度

    - 打印测试集召回率

    - 打印测试集 F1 值

 

结束

   2. 算法主要代码

完整源代码\调用库方法(函数参数说明)

'''

Created on 2024年12月12日

 

@author: 席酒

'''

from sklearn import datasets

from sklearn.model_selection import train_test_split, cross_val_score, cross_val_predict

from sklearn.naive_bayes import GaussianNB

from sklearn.metrics import precision_score, recall_score, f1_score, accuracy_score

 

# 加载 iris 数据集

iris = datasets.load_iris()

X = iris.data # 特征

y = iris.target # 标签

 

# 留出法,分割数据集,测试集占 1/3

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33, random_state=42, stratify=y)

 

# 创建朴素贝叶斯分类器

model = GaussianNB()

 

# 使用训练集训练模型

model.fit(X_train, y_train)

 

# 进行五折交叉验证

cv_scores = cross_val_score(model, X_train, y_train, cv=5)

 

# 使用交叉验证预测

y_pred = cross_val_predict(model, X_train, y_train, cv=5)

 

# 计算评估指标

accuracy = accuracy_score(y_train, y_pred)

precision = precision_score(y_train, y_pred, average='weighted')

recall = recall_score(y_train, y_pred, average='weighted')

f1 = f1_score(y_train, y_pred, average='weighted')

 

# 输出评估结果

print(f'交叉验证准确度: {cv_scores.mean()}')

print(f'训练集准确度: {accuracy}')

print(f'精度: {precision}')

print(f'召回率: {recall}')

print(f'F1 值: {f1}')

 

# 使用测试集进行预测

y_test_pred = model.predict(X_test)

 

# 计算测试集的评估指标

test_accuracy = accuracy_score(y_test, y_test_pred)

test_precision = precision_score(y_test, y_test_pred, average='weighted')

test_recall = recall_score(y_test, y_test_pred, average='weighted')

test_f1 = f1_score(y_test, y_test_pred, average='weighted')

 

# 输出测试结果

print(f'测试集准确度: {test_accuracy}')

print(f'测试集精度: {test_precision}')

print(f'测试集召回率: {test_recall}')

print(f'测试集 F1 值: {test_f1}')

 

 

 

   3. 训练结果截图(包括:准确率、精度(查准率)、召回率(查全率)、F1)

 

 

 

四、实验结果分析

1. 测试结果截图(包括:准确率、精度(查准率)、召回率(查全率)、F1)

 

 

 

2. 对比分析

高准确度、精度、召回率和 F1 值表明模型能够有效地分类 iris 数据集中的不同类别。过拟合风险:虽然训练集和交叉验证的准确度都很高,但测试集的准确度略低,可能存在轻微的过拟合现象。尽管如此,92% 的测试集准确度仍然是一个很好的结果。

标签:score,pred,贝叶斯,准确度,算法,train,测试,12.10,test
From: https://www.cnblogs.com/yindantong/p/18602467

相关文章

  • 什么是算法网关视频分析网关、IP-CAMERA、视频服务器与数字视频录像机?
    AI技术在安防领域的大量落地应用,深度学习方法及性能的提升,计算机视觉、图像处理、视频结构化和大数据分析等技术的完善,使得安防产品逐步走向智能化。在现代视频监控领域,随着技术的进步,我们有了多种设备和技术来满足不同的监控需求。这些技术包括IP-CAMERA、视频服务器和数字视频......
  • 12.9实验五:BP 神经网络算法实现与测试
    实验五:BP神经网络算法实现与测试 一、实验目的深入理解BP神经网络的算法原理,能够使用Python语言实现BP神经网络的训练与测试,并且使用五折交叉验证算法进行模型训练与评估。 二、实验内容(1)从scikit-learn库中加载iris数据集,使用留出法留出1/3的样本作为测试集......
  • 【推荐算法】单目标精排模型——Wide & Deep
    keyword:Google应用商店Motivation:作者认为一个好的推荐模型需要包含memorization和generalization。memorization主要负责记忆法频繁出现的特征项;generalization主要负责挖掘新的特征组合;截至2016年,作者认为目前的基于神经网络的推荐模型会过度泛化并推荐相关性较低的物品(ge......
  • 转载:【AI系统】内存分配算法
    本文将介绍AI编译器前端优化部分的内存分配相关内容。在AI编译器的前端优化中,内存分配是指基于计算图进行分析和内存的管理,而实际上内存分配的实际执行是在AI编译器的后端部分完成的。本文将包括三部分内容,分别介绍模型和硬件的内存演进,内存的划分与复用好处,节省内存的算法......
  • 转载:【AI系统】布局转换原理与算法
    数据布局转换目前已经越来越多地用于编译器的前端优化,将内部数据布局转换为后端设备友好的形式。数据布局转换主要影响程序的空间局部性,所谓空间局部性指的是如果一个内存位置被引用了一次,那么程序很可能在不远的将来引用其附近的一个内存位置,它会影响到程序执行中的缓存及其他性......
  • 算法题1
    题目编写一个方法,求两个字符串的最长公共子串(LongestCommonSubstring)的长度。输入:• 两个字符串str1和str2。输出:• 它们的最长公共子串的长度(即最大连续相同子串的长度)。测试用例输入字符串1 输入字符串2 期望输出 说明"abcdef" "zcdemf" 3 最长公共子串为"cde""12......
  • A*算法(matlab)求解题目
    代码(Astar.m文件)%A*算法主函数,用于求从起点到目标节点的最短路径function[path,cost]=AStar(w,startIndex,goalIndex)%w为邻接矩阵,表示图中节点间的连接关系和距离%startIndex为起点节点的索引%goalIndex为目标节点的索引%定义节点结构体,用于存储节点的相关信息......
  • 转载:【AI系统】Winograd 算法
    在上一篇文章的介绍中,介绍了Im2Col技术,它通过将三维张量重新排列成矩阵形式,然后利用基于内存访问局部性的优化库如GEMM(通用矩阵乘法库)加速计算。随后,还探讨了空间组合优化,这一种利用局部性原理来提升效率的技术。在本文将重点介绍Winograd优化算法,它是矩阵乘优化方法中Copp......
  • 转载:【AI系统】Im2Col 算法
    作为早期的AI框架,Caffe中卷积的实现采用的是基于Im2Col的方法,至今仍是卷积重要的优化方法之一。从上一篇文章的介绍中可以看到,在CNN中卷积直接计算的定义中,卷积核在输入图片上滑动,对应位置的元素相乘后相加求和,滑窗的大小由卷积核决定。由于滑动操作时的窗口的数据横向是......
  • 转载:【AI系统】Winograd 算法
    在上一篇文章的介绍中,介绍了Im2Col技术,它通过将三维张量重新排列成矩阵形式,然后利用基于内存访问局部性的优化库如GEMM(通用矩阵乘法库)加速计算。随后,还探讨了空间组合优化,这一种利用局部性原理来提升效率的技术。在本文将重点介绍Winograd优化算法,它是矩阵乘优化方法中Copp......