贝叶斯分类器算法原理

article/2025/10/6 6:20:18

目录

1.1,什么是朴素贝叶斯

1.2,极大似然估计

1.3,朴素贝叶斯分类器

1.4,朴素贝叶斯算法就程

1.5,朴素贝叶斯的优缺点


1.1,什么是朴素贝叶斯

在所有的机器学习分类算法中,朴素贝叶斯和其他绝大多数的分类算法都不同。对于大多数的分类算法,比如决策树,KNN,逻辑回归,支持向量机等,他们都是判别方法,也就是直接学习出特征输出Y和特征X之间的关系,要么是决策函数Y=f(x),要么是决策条件分布P(Y|X),但是朴素贝叶斯却是生成方法,也就是直接找出特征输出Y和特征X的联合分布P(X,Y),然后由P(Y|X)=\frac{P(X,Y)}{P(X)}得出分类的结果。

贝叶斯决策论(Bayesian decision theory)是概率框架下实施决策的基本方法,对于分类问题来说,基于贝叶斯的分类器都是在概率已知的理想情况下,贝叶斯决策论考虑如何基于概率和误判损失来标记数据的类别,朴素贝叶斯法(Naive Bayes)是基于贝叶斯定理与特征条件独立假设的分类方法。对于给定的训练数据集,首先基于特征条件独立假设学习输入/输出的联合概率分布;然后基于此模型,对给定的输入 x ,利用贝叶斯定理求出后验概率最大的输出 y

假设有N种可能的类别标记,即y={c_{1},c_{2}.........c_{N}}\lambda _{ij}是将一个真实标记为c_{j}的样本误分类为c_{i}所产生的损失,基于后验概率P(c^{i}|x)可以获得将样本x分类为c_{i}所产生的期望损失,也即是在样本x上面的“条件风险”。(在这里的后验概率可以这样理解:在已知西瓜颜色,根蒂等的情况下,将此西瓜分类为c_{j}的条件概率)。

  • 条件风险R(c_{i}|x)=\sum_{j=1}^{N}\lambda _{ij}p(c_{j}|x),这是将一个西瓜样本分类错误的条件风险。对于所有的数据样本集,我们的目标是想要最小化样本数据集的总体风险。
  • 样本集总体的风险R(h)=E_{x}[R(h(x)|x)],也就是条件风险的期望值。

那么对于每一个样本数据集的条件风险,如果我们使得每一个样本的风险都达到最小化,那么我们的总体风险也必然是最小的,也就是R(h)最小化,那么这就产生了贝叶斯判定准则:为了最小化总体的风险,只需要在每一个样本上选择哪个能使条件风险R(c|x)最小的类别标记:h^{*}(x)=argminR(c|x)h^{*}(x)被称为我们最优的贝叶斯分类器,与之对应的总体风险R(h^{*})被称为贝叶斯风险,1-R(h^{*})可以反映分类器所能达到的最好的性能。

现在假设我们的误判损失\lambda _{ij}可以写成如下形式:\lambda _{ij}=0,i=j;\lambda _{ij}=1,i\not\equiv j,,现在我们对于数据集的总体样本的条件风险可以写为:R(c|x)=1-p(c|x),这个式子是根据我们单个样本的条件风险得来的。(证明过程如下)

但是现在不要忘记,在我们目前所做的工作上,我们都是假设所有的概率都是已知的情况,但是现实的数据集特征很多,并且对于每一个特征,里面的取值也很多,所以我们要取得后验概率p(c|x)很难计算出来。计算后验概率有两种方式,第一种是对于给定的数据集,我们可以直接通过建模p(c|x)来直接的预测我们的标签类别c,这种预测方式称为判别式,另外一种是先对联合概率p(x|c)进行建模,然后由此来获得我们的后验概率p(c|x),这种预测方式称为生成式模型。对于生成式模型,我们必然要考虑:

  • 条件概率p(c|x)=\frac{p(x,c)}{p(x)}=\frac{p(xc)}{p(c)}
  • 贝叶斯定理p(c|x)也可以写为:p(c|x)=\frac{p(c)p(x|c)}{p(x)}

其中p(c)称为先验概率,可以根据我们的数据集通过频率来直接计算出来,比如西瓜的好和坏,我们可以通过统计个数进行统计出来,p(x|c)是样本x相对于类标记c条件下的类条件概率,比如我现在确定我们的西瓜是好瓜的前提下,那么我们西瓜的颜色是青绿色的概率,p(x)与我们的类别标记无关,因此估计p(c|x)的问题最后就被我们转化为基于训练的数据集估计先验概率和条件概率p(x|c)的问题。(先验概率,根据我们的大数定律,在样本数据集很多的情况下,我们可以使用频率进行估计),但是对于我们的后验概率,由于我们的样本有很多的特征,每一个特征对应于很多的取值,但是在每一个取值的样本对应的数量可能不是很多,所以我们此时不能使用频率进行估计。下面介绍如何估计我们的条件概率。

1.2,极大似然估计

估计类条件概率,一种常用的策略是先假设数据集具有某一种概率分布,在基于训练的样本对概率分布的参数进行估计,关于类别c的类条件概率是p(x|c),假设p(x|c)具有确定的形式并且被参数向量\theta _{c}唯一确定,那么我们的任务就是利用训练集D估计参数\theta _{c}

D_{c}标示训练集D中第c类样本组成的集合,假设样本是独立同分布的,那么估计参数\theta _{c}对于数据集D_{c}的似然是:

P(D_{c}|\theta _{c})=\prod p(x|\theta _{c}),之所以采用连乘,是因为假设我们各个样本之间式相互独立的。现在我们要对\theta _{c}进行似然估计,就是要寻找能最大化似然函数的的参数值\theta _{c}。数据计算过程中,可能造成数据产生下溢,所以我们常常采用对数似然。LL(\theta _{c})=logP(D_{c}|\theta _{c})=\sum log(P(x|\theta _{c})),此时参数\theta _{c}的极大似然估计是:\theta _{c}=argmaxLL(\theta _{c}),通过极大似然估计,我们可以求得样本的均值和方差,然后对于连续性属性,我们可以直接带入公式求得概率。

1.3,朴素贝叶斯分类器

  • 基于贝叶斯公式p(c|x)=\frac{p(c)p(x|c)}{p(x)}来估计后验概率p(c|x)的困难在于类条件概率p(x|c)是所有属性的联合概率,很难从有限的训练数据集上直接获得,所以朴素贝叶斯采用了“属性条件的独立性假设”来估计,也就是对于所有的属性,假设为相互的独立,不对分类的结果产生任何的影响。基于属性独立性假设,:
  • P(c|x)=\frac{p(c)p(x|c)}{px}=\frac{p(c)}{p(x)}\prod_{i=1}^{d}p(x_{i}|c),其中d标示属性的个数,x_{i}x在第i个属性上面的取值。对于所有的类别来说,p(x)是相同的,我们的最小化分类错误率的贝叶斯最优分类器可以表示为:h_{nb}(x)=argmaxP(c)\prod_{i=1}^{d}p(x_{i}|c)。朴素贝叶斯的训练过程就是基于训练数据集,先根据大数定律估算先验概率,在为每一个属性估算条件概率。
  • D_{c}表示训练集D中第c类样本组成的集合(c其实就是代表我们的每一种类别),如果样本足够充分,那么我们的先验概率可以表示为:p(c)=\frac{|D|}{|D_{c}|},对于离散的属性而言,让D_{c,xi}表示D_{c}中在第i个属性上取值为x_{i}的样本组成的集合,我们可以表示出后验概率:p(x_{i}|c)=\frac{|D_{c,xi}|}{|D_{c}|},如果是对于连续性数值,我们可以考虑密度函数,假定p(x_{i}|c)~N(\mu _{c,i},\sigma _{c,i}^{2}),其中的\mu _{c,i}\sigma _{c,i}^{2}代表第c类样本在第i个属性上面的均值和方差。p(x_{i}|c)=\frac{1}{\sqrt{2\pi }\sigma _{c,i}}exp(-\frac{(x_{i}-\mu _{c,i})^{2}}{2\sigma _{c,i}^{2}})

特别注意,如果某个属性的值在训练数据集中没有与某一个类同时出现过,根据我们上面的条件概率估计,会出现概率为0的情况,因此无论该样本的其他属性的情况是什么样,结果可能都不是很合理,为了避免这种情况,在我们估计概率的值的时候,通常要进行平滑处理,常用拉普拉斯修正的方法,令N标示训练集D中可能出现的类别数目,N_{i}标示第i个属性可能的取值数,因此我们的先验概率和后验概率被标示为:

  • 先验概率:P(c)=\frac{|D_{c}|+1}{|D|+N},对于我们某一种类别,令其样本的个数+1,但是对于总体的样本,每一个分类都要+1,也就是分母需要加N,这个N就代表分类的个数。
  • 条件概率:p(x_{i}|c)=\frac{|D_{c,xi}|+1}{|D_{c}|+N_{i}},在这里分母上加的也是第i个属性的分类的总数量。

1.4,朴素贝叶斯算法就程

我们假设训练的数据集有m个样本和n个维度,一共有k个特征的输出类别,分别是c_{1},c_{2}......c_{k},每一个特征输出的类别的样本个数为m_{1},m_{2}......m_{k},在第k个类别中,如果是离散的特征,那么特征x_{j}各个类别的取值为m_{kjl}l取值为1,2,3....s_{j}s_{j}为特征j不同的取值数。算法输出为样本集xtest的分类结果。

算法流程:

  • 如果没有先验概率,那么就先计算yk个先验概率。p(y=c_{k})=\frac{m_{k}+\lambda }{mK+\lambda },否则p(y=c_{k})输出为先验概率。
  • 分别计算第k个类别的第j维特征的第l个取值的条件概率。p(x_{j}=x_{jl}|Y=C_{K})
    • 如果是离散值,p(x_{j}=x_{jl}|Y=C_{K})=\frac{m_{kjl+\lambda }}{m_{k}+S_{j}\lambda }\lambda可以取值为1或者其他大于0的数字。
    • 如果是稀疏二项离散值,P(x_{j}=x_{jl}|Y=C_{k})=P(j|Y=c_{k})x_{jl}+(1-P(j|Y=c_{k}))(1-x_{jl}),此时l只有两种取值。
    • 入过是连续值不需要计算各个l的取值概率,直接求正态分布的参数。p(x_{i}|c)=\frac{1}{\sqrt{2\pi }\sigma _{c,i}}exp(-\frac{(x_{i}-\mu _{c,i})^{2}}{2\sigma _{c,i}^{2}}),需要求出\mu _{c,i}\sigma _{c,i}^{2},这两个量分别代表均值和方差。
    • 对于数据集xtest,分别计算p(y=c_{k})\prod_{j=1}^{n}p(X_{j}=x_{jtest}|y=c_{k})的概率。
    • 最后确定数据集的分类结果,C_{result}=argmaxP(y=c_{k})\prod_{j=1}^{n}P(X_{j}=x_{jtest}|y=c_{k}).
    • 在整个的计算过程中,没有复杂的矩阵运算,所以贝叶斯算法运算速度很快。

1.5,朴素贝叶斯的优缺点

优点:

  • 在较少数据集的情况下仍然可以处理数据,可以处理多分类问题。
  • 朴素贝叶斯模型发源于古典数学理论,有稳定的分类效率。
  • 对小规模的数据表现很好,能个处理多分类任务,适合增量式训练,尤其是数据量超出内存时,我们可以一批批的去增量训练。
  • 对缺失数据不太敏感,算法也比较简单,常用于文本分类。

缺点:

  • 理论上,朴素贝叶斯模型与其他分类方法相比具有最小的误差率。但是实际上并非总是如此,这是因为朴素贝叶斯模型给定输出类别的情况下,假设属性之间相互独立,这个假设在实际应用中往往是不成立的,在属性个数比较多或者属性之间相关性较大时,分类效果不好。而在属性相关性较小时,朴素贝叶斯性能最为良好。对于这一点,有半朴素贝叶斯之类的算法通过考虑部分关联性适度改进。
  • 需要知道先验概率,且先验概率很多时候取决于假设,假设的模型可以有很多种,因此在某些时候会由于假设的先验模型的原因导致预测效果不佳。
  • 由于我们是通过先验和数据来决定后验的概率从而决定分类,所以分类决策存在一定的错误率。
  • 对输入数据的表达形式很敏感。

参考资料:

[1]《机器学习》周志华著

[2] https://www.cnblogs.com/pinard/p/6069267.html

[3] https://www.cnblogs.com/pinard/p/6069267.html

 


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

相关文章

【贝叶斯分类3】半朴素贝叶斯分类器

文章目录 1. 朴素贝叶斯分类器知识回顾1.1 类别,特征1.2 风险,概率1.3 类条件概率 2. 半朴素贝叶斯分类器学习笔记2.1 引言2.2 知识卡片2.3 半朴素贝叶斯分类器2.4 独依赖估计2.4.1 简介2.4.2 SPODE(超父独依赖估计)2.4.3 AODE(平均独依赖估计)2.4.4 TAN…

【贝叶斯分类2】朴素贝叶斯分类器

文章目录 1. 贝叶斯决策论回顾1.1 分类原理1.2 贝叶斯分类器1.3 P(c|x)1.4 计算公式1.5 极大似然估计 2. 朴素贝叶斯分类器学习笔记2.1 引言2.2 知识卡片2.3 朴素贝叶斯分类器2.4 拉普拉斯平滑 3. 朴素贝叶斯分类器拓展3.1 数据处理3.2 收集其他资料 1. 贝叶斯决策论回顾 1.1 …

朴素贝叶斯分类器

前知识了解: 贝叶斯决策论是概率框架下实施决策的基本方法。 贝叶斯定理: 贝叶斯定理是由果溯因的思想,当知道某件事情的结果后,由结果推断出这件事是由各种原因导致的概率为多少。极大似然估计: 朴素贝叶斯分类器…

贝叶斯分类器matlab实现

用matlab模拟最小错误率贝叶斯分类器与最小风险分类器,效果个人感觉还算能看的下去^_^ 注意:如果对实验原理还不算太懂,可以看其他大牛的博客或者看书,不管怎么样概率论知识是前提,不如乘法定理,条件概率&…

机器学习-贝叶斯分类器

https://www.toutiao.com/a6684876999611122187/ 2019-04-28 17:36:54 目录: 1.贝叶斯分类器的基础 2.朴素贝叶斯分类器 3.朴素贝叶斯分类实例 4.关于朴素贝叶斯容易忽略的点 5.朴素贝叶斯分类器的优缺点 1. 摘要 贝叶斯分类器是一类分类算法的总称&#xf…

贝叶斯分类器(Bayes Classifier)

一、贝叶斯定理 1、背景: 贝叶斯定理也称贝叶斯推理,早在18世纪,英国学者贝叶斯(1702~1763)曾提出 引用:百度百科 贝叶斯定理是关于随机事件A和B的条件概率(或边缘概率)的一则定理。其中P(A|B)…

实验五 贝叶斯分类器(模式识别与机器学习)

目录 实验一 离散型数据的朴素贝叶斯分类 实验步骤: NBtrain.m NBtest.m main.m 实验二 连续型数据的朴素贝叶斯分类 实验步骤: naiveBayestrain.m navieBayestest.m main.m 实验一 离散型数据的朴素贝叶斯分类 data数据集中含有625个样本,每个样…

贝叶斯分类器详解

文章目录 一、贝叶斯简介二、贝叶斯决策论三、极大似然估计例题解析 四、朴素贝叶斯分类器例题解析 五、半朴素贝叶斯分类器 一、贝叶斯简介 简介:贝叶斯分类器是一类分类算法的总称,这类算法均以贝叶斯定理为基础,故统称为贝叶斯分类器。而…

机器学习(六)——贝叶斯分类器

贝叶斯分类器是一类分类算法的总称,均以贝叶斯定理为理论基础 一、预备知识—贝叶斯决策论 1.公式 \qquad 贝叶斯决策论是概率框架下的实施决策的基本方法。对于分类任务来说,在所有相关概率都已知的理想情况下,贝叶斯决策论考虑如何基于概率…

机器学习——贝叶斯分类器

这里写目录标题 1.贝叶斯分类器属于生成式模型2.贝叶斯定理3.朴素贝叶斯分类器3.1朴素贝叶斯分类器中的数学模型3.2分类器的分类准则 1.贝叶斯分类器属于生成式模型 对于数据的判别分类有两种策略模型:判别式模型和生成式模型 判别式模型 : 逻辑回归、决策树、支持…

贝叶斯分类器原理——学习笔记

贝叶斯分类器原理 简介一、逆概率推理与贝叶斯公式1、确定性推理与概率推理2、贝叶斯公式 二、贝叶斯分类的原理三、概率估计1、先验概率的估计2、类条件概率的估计 四、贝叶斯分类的错误率五、常用贝叶斯分类器1、最小错误率贝叶斯分类器2、最小风险贝叶斯分类器3、朴素贝叶斯…

机器学习-贝叶斯分类器(附Python代码)

1. 贝叶斯原理 Naive Bayes 官方网址: https://scikit-learn.org/stable/modules/naive_bayes.html GitHub地址:https://github.com/gao7025/naive_bayes.git 贝叶斯分类是以贝叶斯定理为基础的一种分类算法,其主要思想为:先验…

chrome插件开发入门实战——CSDN免登陆拷贝、免关注查看

官方资料 docextensions官方chrome-extensions-samples 实战CSDN插件(V3) 功能 CSDN: 复制代码免登陆;CSDN: 免关注博主看文章;CSDN: 替换CSDN代码拷贝按钮,登陆也不用CSDN复制按…

Github实用浏览器插件推荐

文章目录 1. github树形目录插件-octotree(有付费功能)2. 快速下载github项目——GitHub加速3. 下载github中指定文件——GitZip for github4. github代码定义跳转浏览插件-Sourcegraph 某天看直播课程的时候看到这样一个界面: 然后就搜了一下…

IDEA必备插件

一、插件入口 二、IDEA必备插件 插件安装目录:C:\Users\用户名\AppData\Roaming\JetBrains\IntelliJIdea2021.3\plugins 1.Alibaba Java Coding Guidelines 推荐指数:★★★ 介绍:阿里巴巴Java编码指南 安装之后右键菜单会多出两个选项&a…

Visual Studio 2017,C++MFC免注册调用大漠插件图文教程,详细版

Visual Studio 2017,CMFC免注册调用大漠插件图文教程,详细版 前言 提示:这里可以添加本文要记录的大概内容: 有很多人都在问CMFC怎么免注册调用?其实这些都有参考但是对于新手来说,编译器对新手的不友好&#xff0c…

PHPstorm必备插件推荐

1、.env files support 对.env 文件的支持 2、 .ignore 对.ignore 文件的支持 3、 Ideolog 对 .log 文件的支持 4、 Chinese (Simplified) Language Pack / 中文语言包 官方版中文语言包 | 汉化语言包 5、 Git 对Git的支持 6、 GitToolBox 支持在文件中展示当前代码最后的…

【BurpSuite】插件之自用插件

自用burpsuite插件汇总 前言 自用的一些burpsute插件,有的是自己改着写的,有的是用别人写的,备份记录为主要目的。万一哪天环境崩了也能快速记起来要用什么插件。 重写右键执行 自己重写的一些代码,核心点是处理http请求&…

插件的使用

1、插件写法:插件通常会为 Vue 添加全局功能,添加全局方法或者属性; 添加全局资源:指令/过滤器/过渡等;通过全局 mixin 方法添加一些组件选项; 添加 Vue 实例方法,通过把它们添加到 Vue.proto…

TypechoCMS通用发布插件-【免登录版本】

Typecho是一个操作简单快速的轻量博客平台。 轻量高效:不足 400KB 的代码,就实现了完整的插件与模板机制。超低的 CPU 和内存使用率,足以发挥主机的最高性能。 先进稳定:支持 BAE/GAE/SAE 等各类云主机,即使面对突如…