【Sklearn】基于朴素贝叶斯算法的数据分类预测(Excel可直接替换数据)

【Sklearn】基于朴素贝叶斯算法的数据分类预测(Excel可直接替换数据)

  • 1.模型原理
  • 2.模型参数
  • 3.文件结构
  • 4.Excel数据
  • 5.下载地址
  • 6.完整代码
  • 7.运行结果

1.模型原理

模型原理:

朴素贝叶斯分类是基于贝叶斯定理的一种分类方法。它假设特征之间相互独立(朴素性),从而简化计算过程。朴素贝叶斯分类器适用于文本分类、垃圾邮件过滤、情感分析等多种应用场景。

贝叶斯定理:

在朴素贝叶斯分类中,我们使用贝叶斯定理来计算后验概率。对于一个待分类的数据点,假设其特征向量为 x \mathbf{x} x,类别为 y y y,贝叶斯定理表示为:

P ( y ∣ x ) = P ( x ∣ y ) ⋅ P ( y ) P ( x ) P(y|\mathbf{x}) = \frac{P(\mathbf{x}|y) \cdot P(y)}{P(\mathbf{x})} P(yx)=P(x)P(xy)P(y)

其中,

  • P ( y ∣ x ) P(y|\mathbf{x}) P(yx):给定特征 x \mathbf{x} x 的情况下,类别 y y y 的后验概率。
  • P ( x ∣ y ) P(\mathbf{x}|y) P(xy):在类别 y y y 下,特征 x \mathbf{x} x 的条件概率。
  • P ( y ) P(y) P(y):类别 y y y 的先验概率。
  • P ( x ) P(\mathbf{x}) P(x):特征 x \mathbf{x} x 的边缘概率。

朴素性假设:

朴素贝叶斯分类器假设特征之间相互独立,即给定类别的情况下,特征之间没有关联。这个假设大大简化了计算过程,尽管在实际情况中很少有特征完全独立的情况。尽管如此,朴素贝叶斯分类器在实际应用中表现良好。

数学模型:

在朴素贝叶斯分类中,我们需要计算条件概率,主要有两种类型:离散型特征和连续型特征。

离散型特征:

对于离散型特征,我们可以计算每个特征值在给定类别下的条件概率:

P ( x i ∣ y ) = Count ( x i , y ) + 1 Count ( y ) + ∣ X i ∣ P(x_i|y) = \frac{{\text{Count}(x_i, y) + 1}}{{\text{Count}(y) + |X_i|}} P(xiy)=Count(y)+XiCount(xi,y)+1

其中,

  • Count ( x i , y ) \text{Count}(x_i, y) Count(xi,y):在类别 y y y 下,特征 x i x_i xi 出现的次数。
  • Count ( y ) \text{Count}(y) Count(y):类别 y y y 的样本总数。
  • ∣ X i ∣ |X_i| Xi:特征 x i x_i xi 可能的取值数量。

连续型特征:

对于连续型特征,我们通常假设特征的分布是高斯分布(正态分布),然后计算每个特征在给定类别下的均值和方差,然后使用高斯分布的概率密度函数计算条件概率:

P ( x i ∣ y ) = 1 2 π ⋅ σ y ⋅ exp ⁡ ( − ( x i − μ y ) 2 2 σ y 2 ) P(x_i|y) = \frac{1}{{\sqrt{2 \pi} \cdot \sigma_y}} \cdot \exp\left(-\frac{(x_i - \mu_y)^2}{2 \sigma_y^2}\right) P(xiy)=2π σy1exp(2σy2(xiμy)2)

其中,

  • μ y \mu_y μy:在类别 y y y 下,特征 x i x_i xi 的均值。
  • σ y \sigma_y σy:在类别 y y y 下,特征 x i x_i xi 的标准差。

朴素贝叶斯分类器通过计算每个类别的后验概率来进行分类决策,选择具有最大后验概率的类别作为预测结果。虽然朴素贝叶斯分类器假设特征之间相互独立,在实际应用中仍然表现良好,并且具有较快的训练和预测速度。

2.模型参数

GaussianNB类是朴素贝叶斯分类器的一种实现,用于处理连续型特征。以下是GaussianNB类的主要参数列表:

  1. priors: 先验概率,可以为None(默认)或array-like。如果为None,使用数据中的样本数来估计先验概率;如果为array-like,则指定每个类别的先验概率。

  2. var_smoothing: 方差平滑项,一个非负数。默认为1e-9。用于稳定计算,避免概率为零的情况。

3.文件结构

在这里插入图片描述

iris.xlsx						% 可替换数据集
Main.py							% 主函数

4.Excel数据

在这里插入图片描述

5.下载地址

- 资源下载地址

6.完整代码

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.naive_bayes import GaussianNB
from sklearn.metrics import accuracy_score, confusion_matrix
import matplotlib.pyplot as plt
import seaborn as sns

def naive_bayes_classification(data_path, test_size=0.2, random_state=42):
    # 加载数据
    data = pd.read_excel(data_path)

    # 分割特征和标签
    X = data.iloc[:, :-1]  # 所有列除了最后一列
    y = data.iloc[:, -1]   # 最后一列

    # 划分训练集和测试集
    X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=test_size, random_state=random_state)

    # 创建朴素贝叶斯分类器
    # 1. ** priors: ** 先验概率,可以为None(默认)或array - like。如果为None,使用数据中的样本数来估计先验概率;如果为array - like,则指定每个类别的先验概率。
    # 2. ** var_smoothing: ** 方差平滑项,一个非负数。默认为1e - 9。用于稳定计算,避免概率为零的情况。
    # 在你提供的示例中,`model = GaussianNB(priors=[0.2, 0.3, 0.5], var_smoothing=1e-8)`
    # 意味着你在创建朴素贝叶斯分类器时,显式地指定了三个类别的先验概率为0.2、0.3和0.5,
    # 并设置了方差平滑项为`1e-8`,以确保概率计算的稳定性。
    model = GaussianNB(priors=[0.2, 0.3, 0.5], var_smoothing=1e-8)

    # 在训练集上训练模型
    model.fit(X_train, y_train)

    # 在测试集上进行预测
    y_pred = model.predict(X_test)

    # 计算准确率
    accuracy = accuracy_score(y_test, y_pred)
    return confusion_matrix(y_test, y_pred), y_test.values, y_pred, accuracy

if __name__ == "__main__":
    # 使用函数进行分类任务
    data_path = "iris.xlsx"
    confusion_mat, true_labels, predicted_labels, accuracy = naive_bayes_classification(data_path)

    print("真实值:", true_labels)
    print("预测值:", predicted_labels)
    print("准确率:{:.2%}".format(accuracy))

    # 绘制混淆矩阵
    plt.figure(figsize=(8, 6))
    sns.heatmap(confusion_mat, annot=True, fmt="d", cmap="Blues")
    plt.title("Confusion Matrix")
    plt.xlabel("Predicted Labels")
    plt.ylabel("True Labels")
    plt.show()

    # 用圆圈表示真实值,用叉叉表示预测值
    # 绘制真实值与预测值的对比结果
    plt.figure(figsize=(10, 6))
    plt.plot(true_labels, 'o', label="True Labels")
    plt.plot(predicted_labels, 'x', label="Predicted Labels")

    plt.title("True Labels vs Predicted Labels")
    plt.xlabel("Sample Index")
    plt.ylabel("Label")
    plt.legend()
    plt.show()


7.运行结果

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

海康威视摄像头二次开发_云台控制_视频画面实时预览(基于Qt实现)

一、项目背景 需求:需要在公司的产品里集成海康威视摄像头的SDK,用于控制海康威视的摄像头。 拍照抓图、视频录制、云台控制、视频实时预览等等功能。 开发环境: windows-X64(系统) + Qt5.12.6(Qt版本) + MSVC2017_X64(使用的编译器) 海康威视提供了设备网络SDK,设备网…

爬虫练手项目——获取龙族小说全文

网站信息 目标网站信息如下:包含了龙族1-5全部内容 代码 import requests from bs4 import BeautifulSoup import os import timeheaders {User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Sa…

NAS搭建指南一——服务器的选择与搭建

一、服务器的选择 有自己的本地的公网 IP 的请跳过此篇文章按需求选择一个云服务器,目的就是为了进行 frp 的搭建,完成内网穿透我选择的是腾讯云服务器,我的配置如下,仅供参考: 4. 腾讯云服务器官网地址 二、服务器…

工具推荐:Wireshark网络协议分析工具(对比tcpdump)

文章首发地址 Wireshark是一款开源的网络协议分析工具,可以捕获网络数据包并对其进行详细的分析和解释。下面是Wireshark的详细介绍: Wireshark 工作原理 Wireshark通过捕获网络接口上的数据包,将其转换为可读的格式,并在界面…

React入门 jsx学习笔记

一、JSX介绍 概念:JSX是 JavaScript XML(HTML)的缩写,表示在 JS 代码中书写 HTML 结构 作用:在React中创建HTML结构(页面UI结构) 优势: 采用类似于HTML的语法,降低学…

java中右移>>和无符号右移>>>的区别

public static void main(String[] args) {byte[] dest new byte[2];dest[0] 0x15; //0001 0101dest[1] (byte) 0xfb;//1111 1011System.out.println((dest[0] >> 4) & 0xff);//右移 应该是0000 0001 十进制结果显示1 结果也是1,正确System.out.printl…

【Linux命令详解 | chown命令】 chown命令用于修改文件或目录的所有者,常与chmod一起使用

文章标题 简介一,参数列表二,使用介绍1. 更改文件的所有者2. 递归地更改目录及其内容的所有者3. 使用--from参数改变所有者4. 使用--reference参数参考其他文件或目录的所有者5. 获取帮助信息和版本信息 总结 简介 在Linux系统中,chown命令被…

【AI作画】使用Stable Diffusion的艺术二维码完全生成攻略

文章目录 前言Stable Diffusion 简介 什么是云端平台?优势灵活性和可扩展性成本效益高可用性和容错性管理简便性 选择适合的云端平台 平台优势平台操作购买算力并创建工作空间启动工作空间应用市场一键安装 使用Stable-Diffusion作图使用控制网络将文本转图像二维码…

03-基础入门-搭建安全拓展

基础入门-搭建安全拓展 1、涉及的知识点2、常见的问题3、web权限的设置4、演示案例-环境搭建(1)PHPinfo(2)wordpress(3)win7虚拟机上使用iis搭建网站(4)Windows Server 2003配置WEB站…

Tomcat 部署及优化

Tomcat概述 Tomcat 是 Java 语言开发的,Tomcat 服务器是一个免费的开放源代码的 Web 应用服务器,是 Apache 软件基金会的 Jakarta 项目中的一个核心项目,由 Apache、Sun 和其他一些公司及个人共同开发而成。在中小型系统和并发访问用户不是很…

深入了解Linux运维的重要性与最佳实践

Linux作为开源操作系统的代表,在企业级环境中的应用越来越广泛。而在保障Linux系统的正常运行和管理方面,Linux运维显得尤为关键。本文将介绍Linux运维的重要性以及一些最佳实践,帮助读者更好地了解和掌握Linux系统的运维技巧。 首先&#xf…

实验二十八、三角波发生电路参数的确认

一、题目 利用 Multisim 确定图1所示电路中各元件的参数,使输出电压的频率为 500 Hz 500\,\textrm{Hz} 500Hz、幅值为 6 V 6\,\textrm{V} 6V 的三角波。 图 1 三角波发生电路 图1\,\,三角波发生电路 图1三角波发生电路 2、仿真电路 A 1 \textrm A_1 A1​ 采用…

三维模型OSGB格式轻量化在三维展示效果上的重要性探讨

三维模型OSGB格式轻量化在三维展示效果上的重要性探讨 三维模型在展示中的效果是十分关键的,因为它直接影响用户对模型的理解和体验。而OSGB格式轻量化是实现优质三维展示效果的关键技术之一。下面将详细介绍轻量化OSGB格式的三维模型在三维展示效果上的重要性。 首…

什么是抖音SEO,如何做好抖音短视频的SEO优化?

抖音SEO,全称是抖音搜索引擎优化,指的是在了解抖音搜索引擎自然排名机制及算法的基础上,对视频内容进行调整优化,让其排名靠前,从而增加用户点击的概率,达到排名和营销目的。 1、了解算法规则 每个平台都…

mclust学习总结

mclust example1 import numpy as np import pandas as pd from matplotlib import pyplot as plt from sklearn.datasets import make_blobs X, y make_blobs(n_samples300, centers4, cluster_std0.60, random_state0) # n_features2是默认的 plt.scatter(X[:,0], X[:,1]) …

微信小程序实现双向滑动快捷选择价格(价格区间)

实现样子 提示:效果可以自己自定义,自己将文字样式更改为自己项目属性即可 实现达到方法 1、左边为最低价,右边为最高价格,可以拖动左边最低价选择价格。拖动右边为最高价。 2、当两个价格重合时,继续拖动&#xff0…

leetcode 面试题 02.05 链表求和

⭐️ 题目描述 🌟 leetcode链接:面试题 02.05 链表求和 ps: 首先定义一个头尾指针 head 、tail,这里的 tail 是方便我们尾插,每次不需要遍历找尾,由于这些数是反向存在的,所以我们直接加起来若…

15个免费的图标素材网站推荐

想象力没有限制。你在寻找下载免费矢量图标网站吗?本文为需要使用各种图标美化网页布局和界面设计,简单提升更好用户体验的设计师提供了15个矢量图标网站。 1.即时设计资源社区 即时设计是国内一款专业级的 UI 设计工具,像 PC 端的网页&…

打造数字化营销闭环,破解精准获客难题

现阶段,企业需要进行数字化营销闭环,以实现更精确的客户获取。随着数字技术的迅猛发展,企业需要将在线广告、社交媒体营销和数据分析等工具相互结合,建立一个完整的数字化营销流程。通过使用客户细分、精准定位和个性化广告等手段…

SpringBoot中间件使用之EventBus、Metric、CommandLineRunner

1、EventBus 使用EventBus 事件总线的方式可以实现消息的发布/订阅功能,EventBus是一个轻量级的消息服务组件,适用于Android和Java。 // 1.注册事件通过 EventBus.getDefault().register(); // 2.发布事件 EventBus.getDefault().post(“事件内容”); …