浅谈贝叶斯分类

article/2025/10/15 20:08:43

贝叶斯分类

贝叶斯分类是一类分类算法的总称,以贝叶斯定理为基础。其中我们较为熟悉的朴素朴素贝叶斯分类是贝叶斯分类中最简单,也是常见的一种分类方法。

贝叶斯网络

贝叶斯网络是一种概念图模型。概率图模型就是用图论和概率论的知识,利用图来表示变量之间概率依赖关系。(变量的联合概率分布)
其中,
图的节点对应随机变量
边对应随机变量的相关关系(依赖)。
有向边表示单向的依赖,无向边表示变量相互依赖。贝叶斯网络的网络结构是一个有向无环图。朴素贝叶斯就是一个只有节点,没有边的特殊的图。
概率图模型包括除了贝叶斯之外,还有最大熵模型等等其他的模型。

朴素贝叶斯算法中的原理简单理解

机器学习中处处可见概率论、微积分、线性代数的知识。在学习贝叶斯的过程中需要大量概率论的知识,结合概率论知识可以更好的理解算法原理。

原理简单介绍

先要掌握几个基本概念:随机变量,联合概率,条件概率,独立性,贝叶斯公式。
随机变量:样本空间在实数集R上的映射。常用大写字母X,Y表示。
联合概率 P(AB)表示A和B都发生的概率。
条件概率 P(B|A)在A发生的概率下,B再发生的概率。其中P(A)>0.
乘法公式: P(AB)=P(B|A)*P(A)
第一步:先让A发生,第二步:A发生的情况下,再让B发生。合起来就是A,B都发生。
全概率公式: P(B)= ∑ i = 1 n P ( B ∣ A i ) ∗ P ( A i ) \displaystyle \sum_{i=1}^n P(B|A_i)*P(A_i) i=1nP(BAi)P(Ai)

将样本空间划分为一个个独立的小块儿,反映到集合上就是A={ A 1 A_1 A1U A 2 A_2 A2U A 3 A_3 A3U…} ,其中 A i A_i Ai可以看作某个特征A的某个取值,B可以看作标签。
贝叶斯公式: P ( A i ∣ B ) = P ( A i ∣ B ) P ( B ) = P ( B ∣ A i ) ∗ P ( A i ) ∑ i = 1 n P ( B ∣ A i ) P ( A i ) \displaystyle {P(A_i|B)}={\frac{P(A_i|B)}{P(B)} }= { \frac{P(B|A_i)*P(A_i)}{\sum_{i=1}^n P(B|A_i)P(A_i)}} P(AiB)=P(B)P(AiB)=i=1nP(BAi)P(Ai)P(BAi)P(Ai)

全概率公式和贝叶斯公式是一种关系的反转。全概率可以看作 已知某个特征 A i A_i Ai 求标签为B的概率 。贝叶斯可以看作 :已知标签为B的前提下 求具有某个特征 A i A_i Ai的概率(即影响将结果划为某一类别的因素)

贝叶斯公式是一切贝叶斯算法的理论依据。当把B理解为标签Y, A i A_i Ai理解为特征X对应的取值时,P( A i A_i Ai|B)可以看作分类为Y(Y取一个特定的值),特征为 X i X_i Xi的概率——这称为先验概率(已经知道分类的标签,求对应特征的概率。反之,为再特征 X i X_i Xi下标签为Y(Y=0,1,2,…)的概率,即后验概率

朴素贝叶斯方法有一个重要假设:——各特征(属性)之间是有条件独立*。

即两者的取值完全无影响,这样可以在计算概率的时候简化了很多计算,这也是为什么叫做朴素的原因。但实际应用中,很多时候各个特征之间不是独立的。

机器学习中的朴素贝叶斯

分类算法总是先从训练集中学习,获取某种信息来建立模型,然后用测试集进行预测。朴素贝叶斯是从一张有标签的表中,计算各种概率,再直接放到测试集上,没有建模求参的过程。
朴素贝叶斯是真正的概率模型,而其他一些分类算法,如决策树,随机森林,逻辑回归,都是通过取平均或少数服从多数的比例,或者归一化和sigmod函数将最后的结果压缩到区间0-1之间从而获得分类为Y(Y取特定值)的一种概率,不是真正意义上的概率。

现实中的大多数标签还是连续型变量,要处理连续型变量的概率,就不是单纯的数样本个数的占比的问 题了。求解连续型变量的概率,需要引入各种概率论中的数字分布,使用各种分布下的概率密度曲线来估计一个概 率。其中涉及的数学原理极其复杂的,必须要熟悉概率论和微积分。

利用sklearn实现一个简单的朴素贝叶斯算法

  • sklearn.naive_bayes
    • 高斯朴素贝叶斯 naive_bayes.GaussianNB
      • 假设P( X i X_i Xi|Y)服从高斯分布(即正态分布)
    • 多项式朴素贝叶斯 naive_bayes.MultinomialNB
      • 假设P( X i X_i Xi|Y)服从多项式分布
    • 伯努利贝叶斯 naive_bayes.BernoulliNB
      • 假设P( X i X_i Xi|Y)服从伯努利分布。(通俗的讲,假设抛一枚一硬币为正面朝上的概率为a,则反面朝上的概率为1-a,这样的概率分布就是服从伯努利分布)

利用高斯贝叶斯实例化
我这里用的开发环境是Jupyter Notebook

//导入相关库和数据
from sklearn.naive_bayes import GaussianNB
from sklearn datasets import load_digits
from sklearn.model_selection import train_test_split
from sklearn.metrics import brier_score_loss  #导入布里尔分数data = load_digits()
X, Y = data.data, data.targetXtrain, Xtest, Ytain, Ytest = train_test_split(X, Y, test_size=0.3,random_state=90)gnb = GaussianNB()
gnb = gnb.fit(Xtrain,Ytrain)
score = gnb.score(Xtest,Ytest)  #查看在测试集上的预测准确率
pre = gnb.predict(Xtest)         #查看预测结果
pre.shapepre_pro = gnb.predict_prob(Xtest)   #查看预测为Y的概率
brier_score_loss(Ytest,prob[:,0],pro_label)  #查看第一个类别下的布里尔分数
#布里尔分数用来衡量概率预测的准确程度,表示的是概率预测相对于测试样本的均方误差,所以分数越高,模型预测效果越差

半朴素贝叶斯

前面我们说到了朴素贝叶斯的前提假设是:各特征之间相互独立,而在实际模型中我们并不满足这样的假设,因为很多样本之间的各个特征有各种关联关系,并不独立。半朴素贝叶斯放宽了这个假设,允许一些特征之间拥有依赖关系。

常用的半朴素贝叶斯模型

在这里插入图片描述

从上面的图中 我们可以看出,第一种是朴素贝叶斯分类中各特征之间的依赖关系——各属性之间是相互独立的。
2. SPODE
假设各属性都依赖一个“超级属性”, x d x_d xd就是超父属性。
3. AODE
先将所有属性都作为超父属性,建立SPODE模型,然后从中选出较好的属性集成作为最终的模型。(感觉和集成算法有点像。。。)
4. TAN
假设每个属性只依赖一个属性,但并不是统一的超父。它是将每个属性看成一个** 无向完全图**,每条边的权重就是两条边的相关性(对应属性的相关性就出来了)。这里涉及了概率图模型。

具体的计算公式的推导过程很复杂 需要花时间去了解。

在机器学习的过程中会发现很多算法或者概念需要大量的数学知识作为基础,特别是概率论和数理统计方面的许多知识,许多算法公式的推导需要掌握一些概念如:概率公式,贝叶斯,协方差,期望,极大似然, 比如PCA降维中就要了解协方差,EM算法就是最大期望算法,通过极大似然估计参数等等。因此要打好数理基础,才能将算法的原理理解的更为透彻。


http://chatgpt.dhexx.cn/article/nKei8CqM.shtml

相关文章

基于Python实现的图片贝叶斯分类器分类

使用流程及应用展示: 1. 选择图片: 控制台版本从命令行输入 当直接回车时将读取默认路径图片(./assets/生活照-武.jpg),相对路径是从打开程序的文件夹开始的,若输入路径无效或不可读将继续询问输入 GUI 从文件浏览器…

【贝叶斯分类4】贝叶斯网

文章目录 1. 半朴素贝叶斯分类器知识回顾2. 贝叶斯网学习笔记2.1 引言2.2 知识卡片2.3 概率图模型(PGM)2.3.1 引言2.3.2 为什么引入概率图?2.3.3 概率图的三个基本问题(表示,学习,推断) 2.4 贝叶斯网2.4.1 贝叶斯网的表达2.4.2 结…

机器学习算法-朴素贝叶斯分类

机器学习算法--朴素贝叶斯分类 引入贝叶斯决策论条件概率和全概率公式贝叶斯推断和朴素贝叶斯推断拉普拉斯平滑 代码实例1、言论过滤器2、垃圾邮件过滤器 代做 引入 贝叶斯决策论(Bayesian decision theory)是概率论框架下实施决策的基本方法。对分类任务来说,在所有…

【ML】贝叶斯分类和朴素贝叶斯分类

一、介绍 贝叶斯定理是英国数学家托马斯贝叶斯提出的,为了解决一个“逆概率”问题。 贝叶斯分类是一类分类算法的总称,这类算法均以贝叶斯定理为基础,故统称为贝叶斯分类。而朴素贝叶斯分类是贝叶斯分类中最简单,也是常见的一种…

机器学习之朴素贝叶斯分类

朴素贝叶斯分类 贝叶斯定理和基础概率论朴素贝叶斯高斯朴素贝叶斯,多项式朴素贝叶斯,伯努利朴素贝叶斯的区别几种朴素贝叶斯实战总结 贝叶斯定理和基础概率论 概率,其实在我们生活中十分常见,它是对未来事件发生可能性的表述&…

机器学习--朴素贝叶斯分类函数

一、前言 朴素贝叶斯算法是有监督的学习算法,解决的是分类问题,如客户是否流失、是否值得投资、信用等级评定等多分类问题。该算法的优点在于简单易懂、学习效率高、在某些领域的分类问题中能够与决策树、神经网络相媲美。但由于该算法以自变量之间的独…

机器学习之贝叶斯算法图像分类

数据集:数据集采用Sort_1000pics数据集。数据集包含1000张图片,总共分为10类。分别是人(0),沙滩(1),建筑(2),大卡车(3),恐龙&#xff…

使用 Python 进行朴素贝叶斯分类

定义 在机器学习中,贝叶斯分类器是一种简单的概率分类器,它基于应用贝叶斯定理。朴素贝叶斯分类器使用的特征模型做出了很强的独立性假设。这意味着一个类的特定特征的存在与其他所有特征的存在是独立的或无关的。 独立事件的定义: 两个事件…

数据分类《二》贝叶斯分类

本博客是参考《数据仓库与数据挖掘技术》以及诸多道友的blog。仅作为自己学习的一个总结。 贝叶斯分类是一种基于统计学的分类方法,可以预测一个类成员关系的可能性。数据挖掘主要使用两种分类,朴素贝叶斯和贝叶斯网络方法。前者使用贝叶斯进行预测&…

贝叶斯分类及其代码

学期末的综述报告我选择了贝叶斯分类,既然已经写了就将它分享一下。 主要目的就是以教促学。 如有问题欢迎在评论区进行讨论。 随着现代社会信息技术的发展,对于数据的挖掘越来越重要,分类是数据挖掘中应用领域极其广泛的技术之一[1]&#…

栈和队列、

目录 1、栈: 1.1、栈的概念及结构: 1.2、栈的实现: 1.2.1、test.c源文件: 1.2.2、Stack.c源文件: 1.2.3、Stack.h头文件: 1.3、例题1: 2、队列: 2.1、队列的概念及结构&…

栈和队列——表达式求值大全

表达式求值 一.关于三种表达式的分类 中缀表达式:即我们最为常见的表达式,运算符号位于参与运算的连个操作数中间的表达式称作中缀表达式前缀表达式:前缀表达式是一种没有括号的算术表达式,与中缀表达式不同的是,其将…

栈与队列-

基础 stl中栈和队列不是容器,而是容器适配器。它们提供接口,由其他容器实现。 20. 有效的括号 给定一个只包括 ‘(’,‘)’,‘{’,‘}’,‘[’,‘]’ 的字符串 s ,判断字符串是否…

数据结构----栈和队列

xdm这玩意我不会导入,只能截图了。 目录 栈篇 1.1栈 1.2.栈操作数据元素的两种动作: 2.代码实现 2.1初始化和销毁 2.2插入 2.3删除和判空 2.4返回栈顶值,计算栈长 队列篇 3.1队列 4.代码实现 4.1初始化和销毁和判空 4.2入列 4.3出列 4.4…

栈(Stack)和队列(Queue)详解

1. 什么是栈,栈存储结构详解 同顺序表和链表一样,栈也是用来存储逻辑关系为 “一对一” 数据的线性存储结构,如图 1 所示。 图 1 栈存储结构示意图 从图 1 我们看到,栈存储结构与之前所学的线性存储结构有所差异,这缘…

栈和队列--栈

1、顺序栈 一组地址连续的存储单元加一个标识栈顶元素的指针。 #define MaxSize 50 //定义栈中最大元素个数 typedef struct{ ElemType data[MaxSize];//存放栈中的元素int Top;//栈顶指针 }SqStack;栈空:s.top-1 栈满:s.topMaxSize-1 栈长&#xff…

什么是栈?什么是队列?栈与队列的特点

栈 栈(Stack)是限定在仅在表尾插入的线性表。 因此对于栈来说,表尾具有特殊的含义。我们把表尾称作栈顶(top),把表头称作栈底(bottom)。不含元素的栈称为空栈。 想象一下进栈的顺序…

栈和队列——相关例题

文章目录 一、栈例题——模拟栈具体实现1. 模板1.1 代码注解1.2 实现代码 2. STL2.1 代码注解2.2 实现代码 二、栈例题——表达式求值具体实现1. 实现思路2. 代码注解3. 实现代码 三、单调栈例题——单调栈具体实现1. 实现思路2. 实现代码 四、队列例题——模拟队列具体实现1. …

【栈和队列】

大家好,这里是针对栈和队列做的一些总结归类,主要是介绍了栈和队列的相关操作,特意整理出来一篇博客供我们一起复习和学习,如果文章中有理解不当的地方,还希望朋友们在评论区指出,我们相互学习,共同进步! 文章目录 一:栈1.1 栈的概念及结构1.2 栈的实现1.3 典型案例…

栈、队列

顺序栈,即栈的顺序存储结构是利用一组地址连续的存储单元依次存放自栈底到栈顶的数据元素,同时附设指针top指示栈项元素在顺序栈中的位置。通常的习惯做法是以top=0表示空栈,鉴于C语言中数组的下标约定从0开始,则当以C…