机器学习实验四:贝叶斯分类器

news2025/1/25 4:45:22

系列文章目录

  1. 机器学习实验一:线性回归
  2. 机器学习实验二:决策树模型
  3. 机器学习实验三:支持向量机模型
  4. 机器学习实验四:贝叶斯分类器
  5. 机器学习实验五:集成学习
  6. 机器学习实验六:聚类

文章目录

  • 系列文章目录
  • 一、实验目的
  • 二、实验原理
  • 三、实验内容
    • 1. 朴素贝叶斯
    • 2. 半朴素贝叶斯
    • 3. 高斯分布的朴素贝叶斯计算方法
    • 4. 实验数据介绍
    • 5. 评价指标介绍
  • 四、实验步骤
    • 1. 划分数据集
    • 2. 训练朴素贝叶斯分类方法
    • 3. 评价分类器
    • 4. 使用分类器进行预测
  • 总结


一、实验目的

(1)了解朴素贝叶斯与半朴素贝叶斯的区别与联系,掌握高斯分布的朴素贝叶
斯计算方法;
(2)编程实现朴素贝叶斯分类器;
(3)使用朴素贝叶斯分类器实现多分类预测,度量模型性能。

二、实验原理

使用 Python 读取数据集信息并生成对应的朴素贝叶斯分类器,随后使用生
成的分类器实现多分类预测,并根据精确率、召回率和 F1值度量模型性能。

三、实验内容

1. 朴素贝叶斯

朴素贝叶斯(Naive Bayes)是基于贝叶斯定理与特征独立假设的分类方法。
使用朴素贝叶斯方法时,首先基于训练数据,基于特征条件独立假设学习输入与
输出的联合概率分布;随后对于给定的 X,利用贝叶斯定理求解后验概率最大的
输出标签。

2. 半朴素贝叶斯

半朴素贝叶斯是适当考虑一部分属性之间的相互依赖信息,其中“独依赖估
计”(One-Dependent Estimator,简称 ODE)是半朴素分类中最常用的一种策略。
所谓“独依赖估计”,也就是假设每个属性在分类类别之外最多仅依赖于一个其
他属性。
与基于特征的条件独立性假设开展的朴素贝叶斯方法相比,其最大的区别就
是半朴素贝叶斯算法放宽了条件独立假设的限制,考虑部分属性之间的相互依赖
信息。但两者有共同特点:假设训练样本所有属性变量的值都已被观测到,即训
练样本是完整的。

3. 高斯分布的朴素贝叶斯计算方法

使用条件:所有特征向量都是连续型特征变量且符合高斯分布。
概率分布密度:在这里插入图片描述

4. 实验数据介绍

实验数据为来自 UCI 的鸢尾花三分类数据集 Iris Plants Database。
数据集共包含 150 组数据,分为 3 类,每类 50 组数据。每组数据包括 4 个
参数和 1 个分类标签,4 个参数分别为:萼片长度 sepal length、萼片宽度 sepal
width、花瓣长度 petal length、花瓣宽度 petal width,单位均为厘米。分类
标签共有三种,分别为 Iris Setosa、Iris Versicolour 和 Iris Virginica。
数据集格式如下图所示:在这里插入图片描述
为方便后续使用,该数据集需要进行特征向量与标签分割以及标签编号。

5. 评价指标介绍

评价指标选择精确率 P、召回率 R、F1度量值 F1,计算公式如下:在这里插入图片描述
具体代码实现时,可以直接调用 sklearn 库中的相应方法进行计算。

四、实验步骤

1. 划分数据集

按照实验要求,本次数据集划分采用随机划分 80%数据用于训练,其余 20%
数据用于测试。使用 sklearn 库的 train_test_split()方法划分数据,代码如
下:

X_train, X_test, y_train, y_test = train_test_split(X, y, 
test_size=0.2)

2. 训练朴素贝叶斯分类方法

由于实验数据中四个特征变量均为连续型特征变量,我们如果需要使用高斯
分布朴素贝叶斯的话,只需要验证他是否符合高斯分布即可。这里使用 Q-Q 图来
验证数据是否符合高斯分布,如果数据符合高斯分布,则该 Q-Q 图趋近于落在
y=x 线上,绘制的代码如下:

from scipy.stats import probplot
probplot(data,dist='norm',plot=plt)
plt.title('sepal length')
plt.show()
#然后,使用 sklearn 库的 GaussianNB()方法训练分类器
clf = GaussianNB()
clf.fit(X_train, y_train)

3. 评价分类器

使用精确率、召回率、F1度量值对分类器作为评价指标,使用 sklearn 库中
的 accuracy_score()、precision_score()、recall_score()、f1_score()方法
进行计算,具体代码如下:

y_pred = clf.predict(X_test)
print(precision_score(y_test, y_pred, average=None))
print(recall_score(y_test, y_pred, average=None))
print(f1_score(y_test, y_pred, average=None))

4. 使用分类器进行预测

我们选取测试集的最后一条数据进行预测,观察分类器计算得到的概率、分
类结果与真实标签的内容。具体代码如下:

y_proba = clf.predict_proba(X_test[:1])
y_pred_num = clf.predict(X_test[:1])[0]
print("预测值:"+str(y_pred_num)+ " "+label[y_pred_num])
print("预计的概率值:", y_proba)
print("实际值:"+str(y_test[:1][0])+ " "+label[y_test[:1][0]])

总结

以上就是今天要讲的内容,机器学习实验四:贝叶斯分类器

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1297672.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ubuntu22.04 安装cuda

CUDA(Compute Unified Device Architecture)是由 NVIDIA 开发的一种并行计算平台和编程模型。它允许开发者利用 NVIDIA 的 GPU(图形处理单元)进行高效的计算处理。CUDA 通过提供一系列的 C、C 和 Fortran 扩展,使得开发…

谈谈对OOA、OOD、OOP理解

1 前言 按照开发阶段排序,有如下排序: OOA阶段:面向对象分析,此阶段领域建模,需求分析。OOD阶段:面向对象设计,此阶段输出系统概要设计、系统详细设计。OOP阶段:面向对象编程&#…

Android引用SDK包实现高德地图展示

一、准备工作 注册高德地图开放平台 注册过程我就不多说了,挺简单的,需要登录,然后注册成为开发者,还需要支付宝认证、手机号码验证、邮箱验证挺多的,但是速度很快。基本上随时验证随时注册成功。新建应用新建…

C# | 对比不同种类的锁

文章目录 C# 对比不同种类的锁异同点对比表使用方法lock语句Monitor类Mutex类Semaphore类ReaderWriterLock类 结语 C# 对比不同种类的锁 Hi,在C#编程中,想要保护共享资源,通常会用到各种类型的锁。今天我们就来一起看看C#中不同种类的锁&…

UE4.27-UE5.1设置打包Android环境

打包Android配置文件 1. 配置打包Android的SDK需求文件位于下面文件中: 2. 指定了对应的SDK环境变量名字以及NDK需求等: UE4.27-UE5.1--脚本自动配置 安装前提 1. 务必关闭虚幻编辑器和Epic Games Launcher,以确保NDK组件的安装或引擎环境…

ubuntu 20.04.6 server 服务器 下载与安装

下载地址:https://releases.ubuntu.com/20.04.6/ubuntu-20.04.6-live-server-amd64.iso 第一步: 准备U盘,使用软碟通将下载好的镜像写入到U盘中 软碟通网址:https://www.cn.ultraiso.net/xiazai.html 点击:文件 ->…

unity 2d 入门 飞翔小鸟 Cinemachine 记录分数(十二)

1、创建文本 右键->create->ui->leagcy->text 2、设置字体 3、设置默认值和数字 4、当切换分辨率,分数不见问题 拖拽这里调整 调整到如下图 5、编写得分脚本 using System.Collections; using System.Collections.Generic; using UnityEngine; …

MVC、MVP、MVVM模式的区别

前言:这三个表现层框架设计模式是依次进化而形成MVC—>MVP—>MVVM。在以前传统的开发模式当中即MVC模式,前端人员只负责Model(数据库)、 View(视图)和 Controller /Presenter/ViewModel(控…

Java程序设计实验6 | 集合类

*本文是博主对Java各种实验的再整理与详解,除了代码部分和解析部分,一些题目还增加了拓展部分(⭐)。拓展部分不是实验报告中原有的内容,而是博主本人自己的补充,以方便大家额外学习、参考。 (解…

LeetCode算法题解(单调栈)|LeetCode503. 下一个更大元素 II、LeetCode42. 接雨水

一、LeetCode503. 下一个更大元素 II 题目链接:503. 下一个更大元素 II 题目描述: 给定一个循环数组 nums ( nums[nums.length - 1] 的下一个元素是 nums[0] ),返回 nums 中每个元素的 下一个更大元素 。 数字 x 的…

【Web渗透】渗透测试简介

基本介绍 渗透测试(Penetration Testing)是一种通过模拟恶意攻击者的技术与手法对目标系统在可控制的范围内进行安全测试和安全评估的过程,其目的是在挖掘当前系统潜在的安全风险点后对系统进行安全升级来提升系统的安全性,并以此来规避被恶意攻击者入侵…

【C语言】操作符详解(二)

目录 移位操作符 左移操作符 右移操作符 位操作符:&、|、^、~ 一道面试题 移位操作符 <<左移操作符 >>右移操作符注:移位…

2023年【R2移动式压力容器充装】考试试卷及R2移动式压力容器充装实操考试视频

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 R2移动式压力容器充装考试试卷是安全生产模拟考试一点通生成的&#xff0c;R2移动式压力容器充装证模拟考试题库是根据R2移动式压力容器充装最新版教材汇编出R2移动式压力容器充装仿真模拟考试。2023年【R2移动式压力…

WGCLOUD v3.5.0 新增支持监测交换机的接口状态UP DOWN

WGCLOUD v3.5.0开始 可以监测交换机或SNMP设备的接口状态了&#xff0c;直接上图

浅析以太网接口及串口转以太网技术

浅析以太网接口 以太网相关接口主要包括&#xff1a;MII/RMII/SMII以及GMII/RGMII/SGMII接口。 一、MII接口 MII&#xff08;Media Independent Interface&#xff09;介质无关接口或称为媒体独立接口&#xff0c;它是IEEE-802.3定义的以太网行业标准。它包括一个数据接口和…

《安富莱嵌入式周报》第328期:自主微型机器人,火星探测器发射前失误故障分析,微软推出12周24期免费AI课程,炫酷3D LED点阵设计,MDK5.39发布

周报汇总地址&#xff1a;嵌入式周报 - uCOS & uCGUI & emWin & embOS & TouchGFX & ThreadX - 硬汉嵌入式论坛 - Powered by Discuz! 更新一期视频教程&#xff1a; 【实战技能】 单步运行源码分析&#xff0c;一期视频整明白FreeRTOS内核源码框架和运行…

使用 iperf 和 iftop 测试网络带宽

博主历时三年精心创作的《大数据平台架构与原型实现&#xff1a;数据中台建设实战》一书现已由知名IT图书品牌电子工业出版社博文视点出版发行&#xff0c;点击《重磅推荐&#xff1a;建大数据平台太难了&#xff01;给我发个工程原型吧&#xff01;》了解图书详情&#xff0c;…

C# WPF上位机开发(串口界面设计)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 如果只是把上位机看成是纯软件开发&#xff0c;本身不和硬件打交道的话&#xff0c;那么这就把上位机的操作范围给限定死了。事实上&#xff0c;上…

Java基础-JDK的组成

目录 1. JDK的组成2.Java的跨平台、工作原理 1. JDK的组成 JVM&#xff1a;Java虚拟机&#xff0c;真正运行Java程序的地方核心类库&#xff1a;Java自己写好的程序&#xff0c;给程序员自己的程序调用的JRE&#xff1a;Java的运行环境JDK&#xff1a;Java开发工具包 JDK是由J…

LinuxBasicsForHackers笔记 -- 文件系统和存储设备管理

设备目录/dev Linux 有一个特殊的目录&#xff0c;其中包含代表每个连接设备的文件&#xff1a;相应命名的 /dev 目录。 /dev中有很多设备列表。 特别令人感兴趣的是设备 sda1、sda2、sda3、sdb 和 sdb1&#xff0c;它们通常是硬盘驱动器及其分区以及 USB 闪存驱动器及其分区…