七、高斯朴素贝叶斯算法(Gaussian NB,Gaussian Naive Bayes)(有监督学习)

news2025/4/19 2:53:39

高斯朴素贝叶斯Gaussian Naive Bayes (GaussianNB).
可通过 partial_fit 对模型参数进行在线更新

一、算法思路

所谓高斯贝叶斯指的便是假定样本每个特征维度的条件概率均服从高斯分布,进而再根据贝叶斯公式来计算得到新样本在某个特征分布下其属于各个类别的后验概率,最后通过极大化后验概率来确定样本的所属类别。

二、官网API

官网API
导包:from sklearn.naive_bayes import GaussianNB

class sklearn.naive_bayes.GaussianNB(*, priors=None, var_smoothing=1e-09)

①类别的先验概率priors

priors,类别的先验概率。如果指定,则不会根据数据调整先验概率
参数形状类似array数组,默认为None

具体官网详情如下:
在这里插入图片描述

使用方法

beyond = ["fiber","pilling"]
gaussian = GaussianNB(priors=beyond)

②var_smoothing

所有特征中最大方差的一部分,为保证计算的稳定性而添加到方差中
参数是个浮点数,默认10的-9次方

具体官网详情如下:
在这里插入图片描述

使用方法

GaussianNB(var_smoothing=1e-8)

③最终构建模型

GaussianNB(var_smoothing=1e-8)

三、代码实现

①导包

这里需要评估、训练、保存和加载模型,以下是一些必要的包,若导入过程报错,pip安装即可

import numpy as np
import pandas as pd 
import matplotlib.pyplot as plt
import joblib
%matplotlib inline
import seaborn as sns
from sklearn.preprocessing import LabelEncoder
from sklearn.model_selection import train_test_split
from sklearn.naive_bayes import GaussianNB
from sklearn.metrics import confusion_matrix, classification_report, accuracy_score

②加载数据集

数据集可以自己简单整个,csv格式即可,我这里使用的是6个自变量X和1个因变量Y
在这里插入图片描述

fiber = pd.read_csv("./fiber.csv")
fiber.head(5) #展示下头5条数据信息

在这里插入图片描述

③划分数据集

前六列是自变量X,最后一列是因变量Y

常用的划分数据集函数官网API:train_test_split
在这里插入图片描述
test_size:测试集数据所占比例
train_size:训练集数据所占比例
random_state:随机种子
shuffle:是否将数据进行打乱
因为我这里的数据集共48个,训练集0.75,测试集0.25,即训练集36个,测试集12个

X = fiber.drop(['Grade'], axis=1)
Y = fiber['Grade']

X_train, X_test, y_train, y_test = train_test_split(X,Y,train_size=0.75,test_size=0.25,random_state=42,shuffle=True)

print(X_train.shape) #(36,6)
print(y_train.shape) #(36,)
print(X_test.shape) #(12,6)
print(y_test.shape) #(12,)

④构建GaussianNB模型

参数可以自己去尝试设置调整

gaussian = GaussianNB(var_smoothing=1e-8)

⑤模型训练

就这么简单,一个fit函数就可以实现模型训练

gaussian.fit(X_train,y_train)

⑥模型评估

把测试集扔进去,得到预测的测试结果

y_pred = gaussian.predict(X_test)

看看预测结果和实际测试集结果是否一致,一致为1否则为0,取个平均值就是准确率

accuracy = np.mean(y_pred==y_test)
print(accuracy)

也可以通过score得分进行评估,计算的结果和思路都是一样的,都是看所有的数据集中模型猜对的概率,只不过这个score函数已经封装好了,当然传入的参数也不一样,需要导入accuracy_score才行,from sklearn.metrics import accuracy_score

score = gaussian.score(X_test,y_test)#得分
print(score)

⑦模型测试

拿到一条数据,使用训练好的模型进行评估
这里是六个自变量,我这里随机整个test = np.array([[16,18312.5,6614.5,2842.31,25.23,1147430.19]])
扔到模型里面得到预测结果,prediction = gaussian.predict(test)
看下预测结果是多少,是否和正确结果相同,print(prediction)

test = np.array([[16,18312.5,6614.5,2842.31,25.23,1147430.19]])
prediction = gaussian.predict(test)
print(prediction) #[2]

⑧保存模型

lsvc是模型名称,需要对应一致
后面的参数是保存模型的路径

joblib.dump(gaussian, './gaussian.model')#保存模型

⑨加载和使用模型

gaussian_yy = joblib.load('./gaussian.model')

test = np.array([[11,99498,5369,9045.27,28.47,3827588.56]])#随便找的一条数据
prediction = gaussian_yy.predict(test)#带入数据,预测一下
print(prediction) #[4]

完整代码

模型训练和评估,不包含⑧⑨。

import numpy as np
import pandas as pd 
import matplotlib.pyplot as plt
import joblib
%matplotlib inline
import seaborn as sns
from sklearn.preprocessing import LabelEncoder
from sklearn.model_selection import train_test_split
from sklearn.naive_bayes import GaussianNB
from sklearn.metrics import confusion_matrix, classification_report, accuracy_score

fiber = pd.read_csv("./fiber.csv")
fiber.head(5) #展示下头5条数据信息

X = fiber.drop(['Grade'], axis=1)
Y = fiber['Grade']

X_train, X_test, y_train, y_test = train_test_split(X,Y,train_size=0.75,test_size=0.25,random_state=42,shuffle=True)

print(X_train.shape) #(36,6)
print(y_train.shape) #(36,)
print(X_test.shape) #(12,6)
print(y_test.shape) #(12,)

gaussian = GaussianNB(var_smoothing=1e-8)

gaussian.fit(X_train,y_train)

y_pred = gaussian.predict(X_test)
accuracy = np.mean(y_pred==y_test)
print(accuracy)

score = gaussian.score(X_test,y_test)#得分
print(score)

test = np.array([[16,18312.5,6614.5,2842.31,25.23,1147430.19]])
prediction = gaussian.predict(test)
print(prediction) #[2]

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

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

相关文章

计算机组成原理之硬件的基本组成,深入介绍两大计算机结构体系,从底层出发认识计算机。

大家好,欢迎阅读《计算机组成原理》的系列文章,本系列文章主要的内容是从零学习计算机组成原理,内容通俗易懂,大家好好学习吧!!! 更多的优质内容,请点击以下链接查看哦~~ ↓ ↓ ↓ …

【Log】为类中的所有日志打印添加前缀

文章目录 前言验证探索后记 前言 有没有一种办法,在一个类中(业务逻辑)。logger.info 的时候自动加上日志前缀,这样子查日志更方便。stackoverflow 上面有对该问题的讨论,实测可用,这里记录一下。 来自stackoverflow 简洁可用的…

离线部署 python 3.x 版本

文章目录 离线部署 python 3.x 版本1. 下载版本2. 上传到服务器3. 解压并安装4. 新建软连信息5. 注意事项 离线部署 python 3.x 版本 1. 下载版本 python 各版本下载地址 本次使用版本 Python-3.7.0a2.tgz # linux 可使用 wget 下载之后上传到所需服务器 wget https://www.py…

使用Go开源的一款性能监控软件,开箱即用,自动化图表生成

使用Go开源的一款性能监控软件,开箱即用,自动化图表生成。 uptrace介绍 uptrace是一体化工具,优化性能并监视错误和日志的开源监控系统。Uptrace是一个经济高效的跟踪解决方案,可帮助您监控、了解和优化复杂的分布式系统。对您的…

运行springBoot项目

本文背景:接手后端Maven管理的springBoot项目,但是不太清楚具体怎么运行项目 写此文章作为纪念 参考链接:IDEA运行SpringBoot项目(图文详细讲解)_idea项目运行_叫我小楠的博客-CSDN博客 步骤如下: 1.设…

3D打印预处理软件——CHITUBOX Pro 1.4.1

CHITUBOX PRO登场 革命性的3D打印数据处理软件,让你发挥3D打印的无限潜力 支持多种主流CAD文件格式 除了传统的stl和obj文件,CHITUBOX Pro还支持导入各种主流的CAD文件格式,包括3ds、3mf、3dm、stp、step、wrl、x3d、sat、sab、dae、dxf、f…

uniapp合法域名配置

首先打开微信开发者平台 找到开发管理 打开开发设置 找到服务器域名>修改 request 写入域名前缀即可 > 完成 重启小程序即可 感谢观看

React redux更新数据的诡异特征==》彻底掌握redux更新state机制的精髓

此文章是跟随我上一篇文章《Redux Toolkit中action派发但state值不更新的原因》写的。 本来一切都搞定了,此时我突发奇想: 如果让api服务端不发送包含x-pagination的header信息,web端会不会报错。因为按照web端 redux原有的逻辑:…

【PowerShell】PowerShell的Core版本的额外配置

在PowerShell 7.1 安装完成后,默认情况下打开PowerShell 会直接进入到系统内置的PowerShell,如果希望通过远程连接或者PowerShell Web Access 进入到PowerShell 7环境的界面,就需要进行环境的再配置才能实现PowerShell 7.1 的环境连接。需要为外部的环境提供连接的话需要按照…

GNU C中({})表达式的返回值

文章目录 先放结论废话({})复合表达式介绍最后的废话 先放结论 ({子表达式1;子表达式2;})是GNU C中的一个拓展,返回值是最后一个表达式的返回值,也就是子表达式2的返回值。 废话 这个表达式是在看Linux源码的时候发现的(内核小白随便翻看到的…

将强化学习引入NLP:原理、技术和代码实现

目录 1. 强化学习简介1.1 什么是强化学习?1.2 强化学习的核心组件1.2.1 智能体 (Agent)1.2.2 状态 (State)1.2.3 动作 (Action)1.2.4 奖励 (Reward) 2. 强化学习与NLP的结合2.1 为什么在NLP中使用强化学习?2.2 强化学习在NLP中的应用场景2.2.1 对话系统2…

SAP Oracle表空间扩展技术手册

1、DBACOCKPIT下查看表空间 当表空间不足(达到99%)时,需要按以下步骤扩充表空间(每次扩充20000M,20G): (也可以通过DB13,DB02查看表空间) 新浪博客 Tablespace PSAPSR3 is 100% used | SAP Community Oracle是通过增加数据文件的方式来为表空间扩容。为指定表空间增…

【2023全新保姆级教图文教程】三分钟快速安装好Anacaonda3+Pycharm运行Python

😎 作者介绍:我是程序员洲洲,一个热爱写作的非著名程序员。CSDN全栈优质领域创作者、华为云博客社区云享专家、阿里云博客社区专家博主、前后端开发、人工智能研究生。公粽号:程序员洲洲。 🎈 本文专栏:本文…

抖音seo账号矩阵源码系统

1. 开通多个抖音账号,并将它们归纳为一个账号矩阵系统。 2. 建立一个统一的账号管理平台,以便对这些账号进行集中管理,包括账号信息、内容发布、社区交互等。 3. 招募专业的运营团队,对每个账号进行精细化运营,包括内…

恢复删除文件?不得不掌握的4个方法!

“删除了的文件还可以恢复吗?有个文件我本来以为不重要了,就把它删除了,没想到现在还需要用到!这可怎么办?有没有办法找回来呢?” 重要的文件一旦丢失或误删可能都会对我们的工作和学习造成比较大的影响。怎…

【JavaScript保姆级教程】Javascript常量

文章目录 前言一、常量1.1 常量是什么1.2 常量的作用 二、示例代码2.1 示例1:声明一个常量2.2 示例2:常量的命名规则2.3 示例3:常量与变量的区别 总结 前言 欢迎来到【JavaScript保姆级教程】!在本篇教程中,我们将讨论…

基于微信小程序的小说图书商城管理系统设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言用户微信端的主要功能有:管理员的主要功能有:具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序(小蔡coding)有保障的售后福利 代码参考源码获取 前言 💗博主介绍:✌全网粉…

CSDN热榜分析3:实现领域热榜的爬取

文章目录 领域热榜爬取函数领域热榜按钮功能实现 热榜分析系列: CSDN热榜分析🔥 UI界面🔥 领域热榜 领域热榜爬取函数 CSDN热榜共有21个子领域,包括C、云原生、人工智能、前沿技术、软件工程、后端、Java、JavaScript、PHP、P…

NSSCTF

[SWPUCTF 2021 新生赛]gift_F12 在源代码界面找到了flag [SWPUCTF 2021 新生赛]jicao 源码 <?php highlight_file(index.php); include("flag.php"); $id$_POST[id]; $jsonjson_decode($_GET[json],true); if ($id"wllmNB"&&$json[x]"…

Learn Prompt- Midjourney 图片生成:常用参数

在上一页当中&#xff0c;我们在解说基本设置的同时&#xff0c;举例了不少以--开头的参数。 参数是添加到提示中的选项&#xff0c;可更改图像的生成方式&#xff0c;图像的纵横比&#xff0c;在 Midjourney模型版本之间切换&#xff0c;更改使用的 Upscaler 等等。使用参数的…