【机器学习】深入浅出讲解贝叶斯分类算法

news2024/10/25 7:30:29

0. 前言

1.贝叶斯分类器介绍

贝叶斯分类是一类分类算法的总称,这类算法均以贝叶斯定理为基础,故统称为贝叶斯分类。而朴素贝叶斯(Naive Bayes)分类是贝叶斯分类中最简单,也是常见的一种分类方法。

一些很常见的分类算法(如:KNN,逻辑回归,决策树),这些模型学习目的是学习输出 Y Y Y和特征 X X X之间的关系。它们属于判别方法

但这篇文章所讲的贝叶斯分类算法,它是基于概率论的生成方法,直接找出输出 Y Y Y和输入特征 X X X之间的联合分布 P ( X , Y ) P(X, Y) P(X,Y) ,进而根据贝叶斯公式 P ( Y ∣ X ) = P ( X , Y ) P ( X ) P(Y\mid X)=\frac{P(X,Y)}{P(X)} P(YX)=P(X)P(X,Y)来进行判定。

那么

2. 概率基础

2.1 贝叶斯公式

p ( w i ∣ x ) = p ( x ∣ w i ) p ( w i ) p ( x ) p(w_i|x)=\frac{p(x|w_i)p(w_i)}{p(x)} p(wix)=p(x)p(xwi)p(wi)

上述这个简洁的公式就算贝叶斯公式,这么简单真的可以用来进行分类吗?

首先上述公式有以下两个创新点:

1. 用概率的形式表示所有形式的不确定性
2. 引入了“先验”和后验的概念

贝叶斯概率基础:描述两个相关的随机事件或随机变量的概率关系:

设试验 𝐸 的样本空间为 𝑆,𝑥 为 𝐸 的事件, 𝒘𝟏 , 𝒘𝟐 ,…, 𝒘𝒄 为 S 的一个划分,且𝑝(𝑥) > 0, 𝑝 𝒘𝒊 > 𝟎(𝒊 = 𝟏, 𝟐, … 𝒄) ,则

① 先验概率𝒑(𝒘𝒊):预先已知的或者可以估计的模式识别系统位于某种类型的概率。根据大量统计确定某类事物出现的比例,如𝑝 (男生) 代表整个教室里面男生的比列,这个是已知的。
② 条件概率𝒑(𝒙|𝒘𝒊):类别状态为𝒘𝒊时,样本𝑥出现的概率
③ 后验概率𝒑(𝒘𝒊|𝒙):一个具体事物属于某种类别的概率. 后验概率涉及一个具体事物,而先验概率是泛指一类事物,因此 𝑝( 男生|𝑥) 和𝑝( 男生) 是两个不同的概念。
④ 全概率:样本𝑥在所有类别里出现的概率之和,也称为𝑥的全概率: p ( x ) = ∑ i = 1 c p ( x ∣ w i )   p ( w i ) p(x)=\sum_{i=1}^cp(x|w_i)\:p(w_i) p(x)=i=1cp(xwi)p(wi)

⑤ 贝叶斯公式: 描述两个有因果关系的随机事件之间的概率关系, p ( w i ∣ x ) = p ( x ∣ w i ) p ( w i ) p ( x ) p(w_i|x)=\frac{p(x|w_i)p(w_i)}{p(x)} p(wix)=p(x)p(xwi)p(wi)

在这里插入图片描述

2.2 不確定性推理

推理可分为以下几种推理:

  1. 确定性推理(非概率推理):
    ➢ 如条件 B 存在,就一定会有结果 A。现在已知条件 B 存在,可以得出结论是结
    果 A 一定也存在。

    真正的确定性推理在真实世界中并不存在!即使条件概率P(A|B)=1 ,条件B存在,也不意味着结果A 就确定一定会发生。

    如果每个类别的样本分布在互不相交的特征空间区域中,也就是说,不同类的样本,其特征向量会落入到特征空间的不同区域中。因此,可以在特征空间中画出类别之间的分类决策边界。在识别一个样本时,如果该样本的特征向量落入了某决策区域中,则它一定属于对应的类。这称为“确定性的统计分类”

  2. 非确定性推理(概率推理):
    ➢ 如条件 B 存在,则结果 A 发生的概率为 P(A|B)。P(A|B)也称为结果 A 发生的条件概率(ConditionalProbability)。

    如果每个类别样本的分布区域无法清晰地分开,也就是说,当样本属于不同类时,也都有可能出现特征空间中的同一个点,即对应到同一个特征向量的取值。那么,虽然样本各不相同,每个样本也都有自己真实所属的类别,但是当抽取出一些特征,将样本映射到特征空间的一个点时,可能会出现多对一的映射。此时,根据特征向量识别一个样本时,就无法确定地判定该样本属于哪一个类,而只能得出它属于某一个类或者某几个类的概率,然后根据概率的大小来做出最终的分类决策。这种统计分类的方式,称为“不确定的统计分类”。

  3. 逆概率推理:
    ➢ 已知条件 B 存在,则结果 A 发生的概率为P(A|B);反之,发现结果 A 出现了,求条件 B 存在的概率 P(B|A)是多少?
    根据所看到的结果,来推测产生这一结果的原因。这种推理的过程我们成为“逆向推理”。贝叶斯公式就算解决逆概率推理,根据后验结果预测先验

一、贝叶斯算法核心思想与原理

1.1 原理介绍

上述什么先验、后验,其实都是从概率的角度去看这个贝叶斯公式。贝叶斯算法的核心思想是通过考虑特征概率(后验结果概率)来预测分类(先验),即对于给出的待分类样本,求解在此样本出现的条件下各个类别出现的概率,哪个最大,就认为此待分类样本属于哪个类别。

在这里插入图片描述
用贝叶斯公式解决分类问题,预测出样本属于每个类的概率:

  1. 贝叶斯公式阐明了两个随机变量之间的因果关系,分类问题中的特征向量取值 x x x和样本所属类型 y y y 之间具有因果关系——因为样本属于类型 y y y,所以具有特征值 x x x

  2. 分类器要做的则是根据这种因果关系,由特征向量进行反推,反推每个样本所属的类别;根据贝叶斯公式,样本属于每个类的后验概率为:
    p ( y i ∣ x ) = p ( x ∣ y i ) p ( y i ) p ( x ) , p(y_i|x)=\frac{p(x|y_i)p(y_i)}{p(x)}, p(yix)=p(x)p(xyi)p(yi),

    p ( y i ) 为每一类出现的概率, p ( x ∣ y i )  是类条件概率,即每一类的样本所服从的概率分布, p ( x ) 为证 据因子,对所有类相同 p(y_i)\text{为每一类出现的概率,}p(x|y_i)\text{ 是类条件概率,即每一类的样本所服从的概率分布,}p(x)\text{为证}\\\text{据因子,对所有类相同} p(yi)为每一类出现的概率,p(xyi) 是类条件概率,即每一类的样本所服从的概率分布,p(x)为证据因子,对所有类相同

  3. 如果只需要分类而不需要得到后验概率的值,则可以忽略证据因子,因为它对所有类都相同,预测函数为: argmax ⁡ y p ( x ∣ y i ) p ( y i ) \underset{y}{\operatorname*{argmax}}p(x|y_i)p(y_i) yargmaxp(xyi)p(yi)

    这是一个求最大值的操作。它遍历所有可能的类别  y ,找到使得  p ( x ∣ y i ) p ( y i )  最大的那个类别 \text{这是一个求最大值的操作。它遍历所有可能的类别 }y\text{,找到使得 }p(x|y_i)p(y_i)\text{ 最大的那个类别} 这是一个求最大值的操作。它遍历所有可能的类别 y,找到使得 p(xyi)p(yi) 最大的那个类别

1.2 实例解析

举例01:

题目:在一个社会中,男性和女性的比例基本是一样的,也就是说如果把男性作为一类,女性作为另一类,那么两个类别的先验概率都是 0.5,也可以说,我们在路上随机遇到一个人,他是男性和女性的概率各为 50%。如果我们在路上看到了一个人的背影,发现他是长发,那么他是男性或女性的概率会发生什么变化吗?

答:把“长发”作为一个样本所具有的特征值,计算后验概率:P(男性|长发)和P(女性|长发)无论这个人识别为男性还是识别为女性,都有可能犯错!----“不确定统计分类”的本质特点。

推理过程:
条件1:男性留长发的概率是5%和女性留长发的概率是70%,则P(长发|男性)=0.05,P(长发|女性)=0.7. ——条件概率1
条件2:设 P(男性)=50%,(女性)=50%——先验概率2
结论1:P(男性|长发)=(0.05 * 0.5)/(0.05 * 0.5 + 0.7 * 0.5)=1/15=0.067;——后验概率

如果我们在一个特殊的环境中,男性女性的先验概率并不相同
条件3: 男性大约占总人群的 75%,女性大约占 25%,
结论2:P(男性|长发)=(0.050.75)/(0.050.75+0.7*0.25)=3/17=0.176;

🚨注意:在各类别先验概率不均等时,后验概率也会发生很大的变化。

1.3 总结

假设在学习阶段通过训练已得到模型的联合概率𝑝(𝒙, 𝑦)(对于生成模型)后验概率𝑝(𝑦|𝒙)(对于判别模型),需要对类型输出做出最终判决,即决策。贝叶斯决策是基于贝叶斯公式

在这里插入图片描述

上述的 p ( x , y ) p(x,y) p(x,y)就是$p(xy);即特征值和类别同时出现的概率。

二、贝叶斯分类器的分类

2.0 前言

➢ 用贝叶斯公式解决分类问题,预测出样本属于每个类的概率,不同的假设导致了不同的贝叶斯分类器

不同的假设主要是对数据分布做出分类决策的特定前提设定

① 最小错误概率贝叶斯分类器
② 最小风险贝叶斯分类器
③ 假设特征向量的各个分量相互独立 - 朴素贝叶斯分类器
④ 假设每个类的特征向量服从多维正态分布 - 正态贝叶斯分类器

2.1:最小错误概率贝叶斯分类器(最大后验概率)

2.1.1:介绍

➢ 对于分类问题,决策准则是使得错误分类率最小,即最小错误分类率(Minimum
Misclassification Rate,MMR)

➢ 对于二分类问题:

前提条件是假设所有错误的代价是平等的

首先,我们有一个二分类问题,这意味着我们要将数据分为两类,分别是 C 1 C_1 C1 C 2 C_2 C2。为了进行分类,我们把特征空间(也就是数据可能出现的所有特征组合所构成的空间)划分成了两个区域 R 1 R_1 R1 R 2 R_2 R2

对于第一个情况:

假设存在一个数据点 x x x,它实际上是属于类别 C 2 C_2 C2 的。但是,我们的分类规则却把它划分到了区域 R 1 R_1 R1 中,这就产生了错误分类。

那么,错误概率 p ( x ∈ R 1 , C 2 ) p(x\in R_1,C_2) p(xR1,C2) 表示的是所有像这样被错误分到 R 1 R_1 R1 区域且实际上属于 C 2 C_2 C2 类别的数据点出现的可能性。

为了计算这个概率,我们需要考虑在区域 R 1 R_1 R1 内,属于类别 C 2 C_2 C2 的概率分布情况。概率分布函数 p ( x , C 2 ) p(x,C_2) p(x,C2) 描述了数据点 x x x 属于类别 C 2 C_2 C2 的概率在整个特征空间中的变化情况。

通过对区域 R 1 R_1 R1 上的这个概率分布函数进行积分 ∫ R 1 p ( x , C 2 )   d x \int_{R_1}p(x,C_2)\:dx R1p(x,C2)dx,我们就能得到数据点实际上属于类别 C 2 C_2 C2 但却被错误分到区域 R 1 R_1 R1 的总体概率。

对于第二个情况:

同理,当一个数据点 x x x 实际上是属于类别 C 1 C_1 C1 的,但被错误地划分到了区域 R 2 R_2 R2 中。

错误概率 p ( x ∈ R 2 , C 1 ) p(x\in R_2,C_1) p(xR2,C1) 表示这种错误分类情况发生的可能性。

通过对区域 R 2 R_2 R2 上属于类别 C 1 C_1 C1 的概率分布函数 p ( x , C 1 ) p(x,C_1) p(x,C1) 进行积分 ∫ R 2 p ( x , C 1 ) d x \int_{R_2}p(x,C_1)dx R2p(x,C1)dx,我们就得到了数据点实际上属于类别 C 1 C_1 C1 但却被错误分到区域 R 2 R_2 R2 的总体概率。

总的来说,这两个公式帮助我们定量地描述在二分类中,由于区域划分不准确导致的错误分类的可能性大小。

将两者合并:

p e = p ( x ∈ R 1 , C 2 ) + p ( x ∈ R 2 , C 1 ) = ∫ R 1 p ( x , C 2 )   d x + ∫ R 2 p ( x , C 1 )   d x p_e=p(x\in R_1,C_2)+p(x\in R_2,C_1)=\int_{R_1}p(x,C_2)\:dx+\int_{R_2}p(x,C_1)\:dx pe=p(xR1,C2)+p(xR2,C1)=R1p(x,C2)dx+R2p(x,C1)dx

这个式子中,𝑝𝑒 表示分类的总错误概率

🍊基于概率 的决策原则:

接下来,当面对一个新的数据点 𝑥 时,如果 𝑝(𝑥, 𝐶1) > 𝑝(𝑥, 𝐶2) ,我们就将其分类为 𝐶1 类别;反之,如果 𝑝(𝑥, 𝐶1) < 𝑝(𝑥, 𝐶2) ,就将其分类为 𝐶2 类别。

基于后验概率 的决策原则:

𝑝(𝐶1|𝑥) 和 𝑝(𝐶2|𝑥) ,分别表示在已知数据点 𝑥 的情况下,它属于类别 𝐶1 和 𝐶2 的条件概率。如果 𝑝(𝐶1|𝑥) > 𝑝(𝐶2|𝑥) ,意味着在给定 𝑥 的条件下,它属于 𝐶1 类别的可能性更大,所以分类为 𝐶1 ;反之则分类为 𝐶2 。

推广到多类情况,设有{𝐶1, 𝐶2, … , 𝐶𝐾}种类型,最后分类结果为 C i ∗ = argmax ⁡ C i p ( C i ∣ x ) C^{*}_{i}=\underset{C_{i}}{\operatorname*{argmax}}p(C_{i}|x) Ci=Ciargmaxp(Cix)后验概率最大的类作为分类输出。

下面我们来正式介绍最小错误概率分类器:


2.1.2:讲解

🚉在模式分类问题中,人们往往希望尽量减少分类错误,使错误率最小的分类规则,称为基于最小错误率的贝叶斯决策。贝叶斯分类器在最小化分类错误率上是最优的。

➢ 在对样本进行决策时,使其错误率最小的决策就是使后验概率最大的决策,所以在无特殊说明下说的贝叶斯决策通常就是指最小错误率贝叶斯决策。最小错误贝叶斯分类器的目的就是 min ⁡ P ( e ) = ∫ P ( e ∣ x ) p ( x ) d x \min P(e)=\int P(e\mid x)p(x)dx minP(e)=P(ex)p(x)dx

➢ 因为𝒑(𝒙)是一致的,简化后分类器的判别函数为: arg ⁡ max ⁡ y p ( x ∣ w i ) p ( w i ) \arg\max_yp(x|w_i)p(w_i) argmaxyp(xwi)p(wi) 即最大后验概率,其中类条件概率可以是均匀分布、指数分布、正态分布等。

➢ 贝叶斯分类器需要知道每类样本的特征向量服从的概率密度,常用正态分布来表示特征向量的概率分布。

在这里插入图片描述
下面我们来讲解这个图像的含义:

  1. 横轴代表特征向量x,y 轴代表基于特征向量得出的后验概率y = P(wi/x) = p(x/wi)*p(wi)

  2. 第一个函数是表示类别1的分布,纵轴此时表示P(C1/x) ; 第二个函数代表2类别的分布

  3. t这条竖线是两个类别的分界点。

  4. 最大后验概率:此时,t会与两个函数有两个交点,每次选择y值高的那个交点类作为预测类;经过这个步骤,t位于两个函数互相的交点处。

  5. 最小错误概率:因为 min ⁡ P ( e ) = ∫ P ( e ∣ x ) p ( x ) d x \min P(e)=\int P(e\mid x)p(x)dx minP(e)=P(ex)p(x)dx,从上图可以看到,红色区域+黄色区域代表分成了2类,但是实际是1类的错误概率;绿色概率代表,分成了1但实际是2类的错误概率;我们发现,如果想要让整个错误概率最小,则必须黄色区域为0,则此时t也位于两个函数的互相交点处。

综上, 错误率最小的决策和使后验概率最大的决策在目的和效果上是一致的,这两种决策方式的本质都是为了在分类任务中尽可能准确地将数据点分配到正确的类别,以达到最优的分类效果。

2.1.3:例题讲解

举例02:

某地发生了一起交通事故肇事逃逸事件,现场有一位目击者,他非常肯定地说,他看见肇事车的车标是右侧的车标,而不是左侧的车标。如果这个目击者的可信度非常99%用最小错误率贝叶斯分类器来算一算:

P(认成左标|实为右标)=0.01, P(认成右标|实为右标)=0.99,
在这里插入图片描述

题目:
(1)设 P(左标)=P(右标)=50%, ——————市场占有率
则P(实为右标|认成右标)=(0.99 * 0.5)/(0.99 * 0.5 + 0.01 * 0.5)=0.99 只有 1%的可能性认错。

(2)设 P(左标)=99%;P(右标)=1%, ——————市场占有率
则P(实为右标|认成右标)= (0.99 * 0.01)/(0.99 * 0.01 + 0.01 * 0.99) = 0.5, 有50%的可能性认错.

举例03

2013 年 3 月底以来,人感染 H7N9 型禽流感的病例开始出现,并造成了一定的社会恐慌。根据目前数据统计,该病的总体发病率大约为 1000 万分之一,对照普通流感的发病率可高达30%。研究发现,易感人群中99%的人感染H7N9型禽流感病例曾出现过发热、咳嗽等急性呼吸道感染症状,而同样的易感人群中 80%的普通流感患者也出现过同样症状。

题目:
现有一位患者属于易感人群,并出现了发热、咳嗽等急性呼吸道感染症状,请问是否应当按照人感染H7N9型禽流感疑似病例对待?该患者实为H7N9禽流感感染的后验概率

答:

P(H7N9)=0.0000001/(0.0000001+0.3); P(流感)=0.3/(0.0000001+0.3)——对样本空间进行划分

P(H7N9|症状)=(0.0000001/(0.0000001+0.3)*0.99)/(0.0000001/(0.0000001+0.3)*0.99+0.3/(0.0000001+0.3)*0.8)=0.000000412

2.2 最小风险贝叶斯分类器

2.2.1:介绍

在前面“最小错误概率贝叶斯分类器”中,各种错误代理的损失我们默认前提都是相等的。但是实施情况并不如此,比如在例题3中,如果我们把一个换了禽流感的人误判为正常,则这个带来的损失是极大的。所以,当使用贝叶斯分类器时,仅仅考虑识别错误率低是不够的,还应当把所采取的分类决策所带来的后果考虑进去,这就是“最小风险贝叶斯分类器”的由来。

  1. 基本概念:最小风险贝叶斯决策就是考虑各种错误造成损失不同时的一种最优决策。
  2. 决策𝜶𝒊:把待识别样本𝑥归为𝐶𝑖类中
  3. 损失𝝀𝒊𝒋:把真实属于𝐶𝑗类的样本𝑥归到𝐶𝑖类中带来的损失
  4. 条件风险𝑹(𝜶𝒊|𝒙):把样本𝑥采取决策𝛼𝑖后可能的总的风险

R ( α i ∣ x ) = E [ λ i j ] = ∑ j = 1 c λ i j P ( C j ∣ x ) , i = 1 , 2 , . . . c {\color{Red} } \mathrm{R}(\alpha_i|x)=E\big[\lambda_{ij}\big]=\sum_{j=1}^c\lambda_{ij}P\big(C_j\big|x\big),i=1,2,...c R(αix)=E[λij]=j=1cλijP(Cj x),i=1,2,...c

  1. 决策规则: 若 R ( α k ∣ x ) = min ⁡ i = 1 , 2 , . . . , c R ( α i ∣ x )  则  x ∈ ω k \text{若}R(\alpha_k|x)=\min_{i=1,2,...,c}R(\alpha_i|x)\text{ 则 }x\in\omega_k R(αkx)=mini=1,2,...,cR(αix)  xωk

🍊预测步骤

(1)已知类条件概率密度𝑝(𝑥|𝐶𝑗)和先验概率𝑃(𝐶𝑗), 𝑗 = 1,2, … , 𝑐以及给出待识别𝑥的情况下,根据贝叶斯公式计算后验概率: 𝑃(𝐶𝑗|𝑥);

(2)利用第1步计算的后验概率决策损失表,计算采取𝛼𝑖, 𝑖 = 1,2, … , 𝑎的条件风险 R ( α i ∣ x ) = ∑ j = 1 c λ ( α i , C j ) P ( C j ∣ x ) ; R(\alpha_i|x)=\sum_{j=1}^c\lambda(\alpha_i,C_j)P(C_j|x); R(αix)=j=1cλ(αi,Cj)P(Cjx);

(3)对第2步得到的𝑎个条件风险值 R ( α i ∣ x ) , i = 1 , 2 , . . . , a R(\alpha_i|x),\quad i=1,2,...,a R(αix),i=1,2,...,a进行比较,找出使条件风险最小的决策 a k a_k ak,即 R ( α k ∣ x ) = min ⁡ i = 1 , 2 , . . . , a R ( α i ∣ x ) R(\alpha_k|x)=\min_{i=1,2,...,a}R(\alpha_i|x) R(αkx)=mini=1,2,...,aR(αix)

2.2.2:例题讲解

举例04:

如果将一名普通流感患者误诊为H7N9型禽流感患者,所浪费的社会资源只有将一名
H7N9 型禽流感患者误诊为普通流感患者所带来的社会资源损失的 300万分之一,请问是否应当将该病例按照人感染H7N9型禽流感疑似病例对待?

答:
当我们将该患者诊断为禽流感患者时,条件风险为:

  • 判决为H7N9 :R=P(普通|症状)*1=(1-0.000000412) *1 =0.999999588
  • 判决为普通:R=P(H7N9|症状)*3000000=(0.000000412)*3000000=1.236

2.3 朴素贝叶斯分类器⭐

2.3.0 总体介绍

假设特征向量的分量之间相互独立,这种假设简化了问题求解的难度

所谓「朴素」,是假定所有输入事件之间是相互独立。进行这个假设是因为独立事件间的概率计算更简单。

该样本属于某一类的概率为 p ( y = c i ∣ x ) = p ( y = c i ) p ( x ∣ y = c i ) p ( x ) p(y=c_i|\mathbf{x})=\frac{p(y=c_i)p(\mathbf{x}|y=c_i)}{p(\mathbf{x})} p(y=cix)=p(x)p(y=ci)p(xy=ci)

🍊朴素贝叶斯模型的基本思想: 对于给定的待分类项 X { a 1 , a 2 , a 3 , ⋯   , a n } X\left\{a_{1},a_{2},a_{3},\cdots,a_{n}\right\} X{a1,a2,a3,,an},求解在此项出现的条件下各个类别 y i y_i yi出现的概率,哪个 P ( y i ∣ X ) P(y_i|X) P(yiX) 最大,就把此待分类项归属于哪个类别(其决策也是基于最大后验概率)。

然而,严格来讲,不能简单地说朴素贝叶斯的本质就是最小错误率贝叶斯。最小错误率贝叶斯决策是一个更通用的理论框架,而朴素贝叶斯是基于 特定假设(特征条件独立性假设) 实现的一种具体的分类方法。

💐朴素贝叶斯模型的定义: X { a 1 , a 2 , a 3 , ⋯   , a n } X\left\{a_{1},a_{2},a_{3},\cdots,a_{n}\right\} X{a1,a2,a3,,an} 为一个待分类项,每个 为 的一个特征属性,且特征属性之间相互独立。设 C { y 1 , y 2 , y 3 , ⋯   , y n } C\left\{y_1,y_2,y_3,\cdots,y_n\right\} C{y1,y2,y3,,yn} 为一个类别集合,计算 P ( y 1 ∣ X ) , P ( y 2 ∣ X ) , P ( y 3 ∣ X ) , … , P ( y n ∣ X ) P\left(y_{1}\mid X\right),P\left(y_{2}\mid X\right),P\left(y_{3}\mid X\right),\ldots,P\left(y_{n}\mid X\right) P(y1X),P(y2X),P(y3X),,P(ynX)

P ( y k ∣ X ) = max ⁡ { P ( y 1 ∣ X ) , P ( y 2 ∣ X ) , P ( y 3 ∣ X ) , … , P ( y n ∣ X ) } , 则 X ∈ y k P\left(y_k\mid X\right)=\max\left\{P\left(y_1\mid X\right),P\left(y_2\mid X\right),P\left(y_3\mid X\right),\ldots,P\left(y_n\mid X\right)\right\},\text{则}X\in y_k P(ykX)=max{P(y1X),P(y2X),P(y3X),,P(ynX)},Xyk

但是在这里求后验概率 P ( y k ∣ X ) P\left(y_{k}\mid X\right) P(ykX) 没有那么简单,它需要利用特征分量之间的独立性:

  1. 找到一个已知分类的待分类项集合,这个集合叫做训练样本集
  2. 统计得到在各类别下各个特征分量的条件概率估计。即
    P ( a 1 ∣ y 1 ) , P ( a 2 ∣ y 1 ) , ⋯   , P ( a n ∣ y 1 ) P ( a 1 ∣ y 2 ) , P ( a 2 ∣ y 2 ) , ⋯   , P ( a n ∣ y 2 ) ⋯ P ( a 1 ∣ y n ) , P ( a 2 ∣ y n ) , ⋯   , P ( a n ∣ y n ) P\left(a_{1}\mid y_{1}\right),P\left(a_{2}\mid y_{1}\right),\cdots,P\left(a_{n}\mid y_{1}\right)\\P\left(a_{1}\mid y_{2}\right),P\left(a_{2}\mid y_{2}\right),\cdots,P\left(a_{n}\mid y_{2}\right)\\\cdots\\P\left(a_{1}\mid y_{n}\right),P\left(a_{2}\mid y_{n}\right),\cdots,P\left(a_{n}\mid y_{n}\right) P(a1y1),P(a2y1),,P(any1)P(a1y2),P(a2y2),,P(any2)P(a1yn),P(a2yn),,P(anyn)

在朴素贝叶斯算法中,待分类项的每个特征属性都是条件独立的,由贝叶斯公式 P ( y i ∣ X ) = P ( X ∣ y i ) P ( y i ) P ( X ) P\left(y_i\mid X\right)=\frac{P\left(X\mid y_i\right)P\left(y_i\right)}{P\left(X\right)} P(yiX)=P(X)P(Xyi)P(yi)

因为分母相当于在数据库中 X X X 存在的概率,所以对于任何一个待分类项 P ( X ) P(X) P(X)来说 都是常数固定的。再求后验概率 P ( y i ∣ X ) P(y_i | X) P(yiX) 的时候只用考虑分子即可。

因为各特征值是独立的所以有:
P ( X ∣ y i ) P ( y i ) = P ( a 1 ∣ y i ) P ( a 2 ∣ y i ) ⋯ P ( a n ∣ y i ) P ( y i ) = P ( y i ) ∏ j = 1 n P ( a j ∣ y i ) P\left(X\mid y_{i}\right)P\left(y_{i}\right)=P\left(a_{1}\mid y_{i}\right)P\left(a_{2}\mid y_{i}\right)\cdots P\left(a_{n}\mid y_{i}\right)P\left(y_{i}\right)\\=P\left(y_{i}\right)\prod_{j=1}^{n}P\left(a_{j}\mid y_{i}\right) P(Xyi)P(yi)=P(a1yi)P(a2yi)P(anyi)P(yi)=P(yi)j=1nP(ajyi)

可以推出:
P ( X ∣ y i ) = ∏ k = 1 n P ( a k ∣ y i ) P\left(X\mid y_i\right)=\prod_{k=1}^nP\left(a_k\mid y_i\right) P(Xyi)=k=1nP(akyi)
对于 P ( y i ) P(y_i) P(yi) 是指在训练样本中 y i y_i yi出现的概率,可以近似的求解为:

P ( y i ) = ∣ y i ∣ D P\left(y_i\right)=\frac{\left|y_i\right|}{D} P(yi)=Dyi

对于先验概率 P ( a j ∣ y i ) P(a_j | y_i) P(ajyi),是指在类别 y i y_i yi 中,特征元素 a j a_j aj 出现的概率,可以求解为:
P ( a j ∣ y i ) = ∣ 在训练样本为 y i 时, a j 出现的次数 ∣ ∣ y i 训练样本数 ∣ P\left(a_j\mid y_i\right)=\frac{\left|\text{在训练样本为}y_i\text{时,}a_j\text{出现的次数}\right|}{\left|y_i\text{训练样本数}\right|} P(ajyi)=yi训练样本数在训练样本为yi,aj出现的次数

总结一下,朴素贝叶斯模型的分类过程如下流程图所示:

在这里插入图片描述

2.3.1 特征为离散的情况

如果特征向量的分量离散型随机变量,可以直接根据训练样本计算出其服从的概率分布统计每一类训练样本中每个特征分量取每个值的频率,作为类条件概率的估计值

p ( x i = v ∣ y = c ) = N x i = v , y = c N y = c p(x_i=v|y=c)=\frac{N_{x_i=v,y=c}}{N_{y=c}} p(xi=vy=c)=Ny=cNxi=v,y=c

类概率是各个类的样本占总样本数的比例: p ( y = c ) = N y = c N p(y=c)=\frac{N_{y=c}}N p(y=c)=NNy=c 其中,𝑝(𝑦 = 𝑐)为第c类样本在整个训练样本集中出现的概率。

分类器的预测函数为: arg ⁡ max ⁡ y p ( y = c ) ∏ i = 1 n p ( x i = v ∣ y = c ) \arg\max_yp(y=c)\prod_{i=1}^np(x_i=v|y=c) argymaxp(y=c)i=1np(xi=vy=c)

2.3.2:特征值连续

如果特征向量的分量是连续型随机变量,可以假设它们服从一维正态分布:

p ( x i = x ∣ y = c ) = 1 2 π σ i exp ⁡ ( − ( x − μ i ) 2 2 σ i 2 ) p(x_i=x|y=c)=\frac1{\sqrt{2\pi}\sigma_i}\exp\left(-\frac{(x-\mu_i)^2}{2\sigma_i^2}\right) p(xi=xy=c)=2π σi1exp(2σi2(xμi)2)
分类器的预测函数为: argmax ⁡ a p ( y = c ) ∏ i = 1 n 1 2 π σ i exp ⁡ ( − ( x i − μ i ) 2 2 σ i 2 ) \operatorname{argmax}_ap\left(y=c\right)\prod_{i=1}^n\frac1{\sqrt{2\pi}\sigma_i}\exp\left(-\frac{(x_i-\mu_i)^2}{2\sigma_i^2}\right) argmaxap(y=c)i=1n2π σi1exp(2σi2(xiμi)2)

均值和方差通过最大似然估计得到对于特征 𝑥,假设某一类所有训练样本该特征的取值
x i , i = 1 , … , l , x_i,i=1,\ldots,l, xi,i=1,,l,

此类样本该特征所服从的正态分布的均值和方差分别为:

μ = 1 l ∑ i = 1 l x i \mu=\frac1l\sum_{i=1}^lx_i μ=l1i=1lxi

σ 2 = 1 l ∑ i = 1 l ( x i − μ ) 2 \sigma^2=\frac1l\sum_{i=1}^l(x_i-\mu)^2 σ2=l1i=1l(xiμ)2

2.3.3:平滑处理

1)为什么需要平滑处理?
使用朴素贝叶斯,有时候会面临零概率问题。零概率问题,指的是在计算实例的概率时,如果某个量 x x x ,在观察样本库(训练集)中没有出现过,会导致整个实例的概率结果是 0。

在文本分类的问题中,当「一个词语没有在训练样本中出现」时,这个词基于公式统计计算得到的条件概率为 0 ,使用连乘计算文本出现概率时也为 0 。这是不合理的 , 不能因为一个事件没有观察到就武断的认为该事件的概率是 0 0 0

2)拉普拉斯平滑及依据

为了解决零概率的问题,法国数学家拉普拉斯最早提出用加1的方法估计没有出现过的现象的概率,所以加法平滑也叫做拉普拉斯平滑

假定训练样本很大时,每个分量 的计数加 造成的估计概率变化可以忽略不计,但可以方便有效的避免零概率问题。

对应到文本分类的场景中,如果使用多项式朴素贝叶斯,假定特征 x i x_i xi 表示某个词在样本中出现的次数(当然用TF-IDF表示也可以)。拉普拉斯平滑处理后的条件概率计算公式为: P ( x i ∣ y ) = N y i + α N y + n α P\left(x_i\mid y\right)=\frac{N_{yi}+\alpha}{N_y+n\alpha} P(xiy)=Ny+nαNyi+α

  • N y i  表示类  y  的所有样本中特征  x i  的特征值之和。 N_{yi}\text{ 表示类 }y\text{ 的所有样本中特征 }x_i\text{ 的特征值之和。} Nyi 表示类 y 的所有样本中特征 xi 的特征值之和。

  • N y  表示类  y  的所有样本中全部特征的特征值之和。 N_y\text{ 表示类 }y\text{ 的所有样本中全部特征的特征值之和。} Ny 表示类 y 的所有样本中全部特征的特征值之和。

  • α  表示平滑值( α ∈ [ 0 , 1 ] ,主要为了防止训练样本中某个特征没出现而导致  N p i = 0 ,从而导致条件概率 P ( x i ∣ y ) = 0  的情况,如果不加入平滑值,则计算联合概率时由于某一项为 0 导致后验概率为 0 的异常情况出 现。 \begin{aligned}&\alpha\text{ 表示平滑值(}\alpha\in[0,1]\text{,主要为了防止训练样本中某个特征没出现而导致 }N_{pi}=0\text{,从而导致条件概率}\\&P\left(x_{i}\mid y\right)=0\text{ 的情况,如果不加入平滑值,则计算联合概率时由于某一项为}0\text{导致后验概率为}0\text{的异常情况出}\\&\text{现。}\end{aligned} α 表示平滑值(α[0,1],主要为了防止训练样本中某个特征没出现而导致 Npi=0,从而导致条件概率P(xiy)=0 的情况,如果不加入平滑值,则计算联合概率时由于某一项为0导致后验概率为0的异常情况出现。

  • n 表示特征总数。 n表示特征总数。 n表示特征总数。

一般我们取去a1即可:

p ( x i = v ∣ y = c ) = N x i = v , y = c + 1 N y = c + k p(x_i=v|y=c)=\frac{N_{x_i=v,y=c}+1}{N_{y=c}+k} p(xi=vy=c)=Ny=c+kNxi=v,y=c+1

2.3.4:案例练习

举个例子:眼前有17个西瓜,好瓜和坏瓜个数差不多,现在要用这些西瓜来训练一个「坏瓜识别器」,我们要怎么办呢?

一般挑西瓜时通常要「敲一敲」,听听声音,是清脆声、浊响声、还是沉闷声。所以,我们先简单点考虑这个问题,只用敲击的声音来辨别西瓜的好坏。根据经验,敲击声「清脆」说明西瓜还不够熟,敲击声「沉闷」说明西瓜成熟度好,更甜更好吃。

朴素贝叶斯把类似「敲击声」这样的特征概率化,构成一个「西瓜的品质向量」以及对应的「好瓜/坏瓜标签」,训练出一个标准的「基于统计概率的好坏瓜模型」,这些模型都是各个特征概率构成的。
在这里插入图片描述

这样,在面对未知品质的西瓜时,我们迅速获取了特征,分别输入「好瓜模型」和「坏瓜模型」,得到两个概率值。如果「坏瓜模型」输出的概率值大一些,那这个瓜很有可能就是个坏瓜。

下面我们有17个瓜的数据:

编号色泽根蒂敲声纹理脐部触感密度含糖率好瓜
1青绿蜷缩浊响清晰凹陷硬滑0.6970.46
2乌黑蜷缩沉闷清晰凹陷硬滑0.7740.376
3乌黑蜷缩浊响清晰凹陷硬滑0.6340.264
4青绿蜷缩沉闷清晰凹陷硬滑0.6080.318
5浅白蜷缩浊响清晰凹陷硬滑0.5560.215
6青绿稍蜷浊响清晰稍凹软粘0.4030.237
7乌黑稍蜷浊响稍糊稍凹软粘0.4810.149
8乌黑稍蜷浊响清晰稍凹硬滑0.4370.211
9乌黑稍蜷沉闷稍糊稍凹硬滑0.6660.091
10青绿硬挺清脆清晰平坦软粘0.2430.267
11浅白硬挺清脆模糊平坦硬滑0.2450.057
12浅白蜷缩浊响模糊平坦软粘0.3430.099
13青绿稍蜷浊响稍糊凹陷硬滑0.6390.161
14浅白稍蜷沉闷稍糊凹陷硬滑0.6570.198
15乌黑稍蜷浊响清晰稍凹软粘0.360.37
16浅白蜷缩浊响模糊平坦硬滑0.5930.042
17青绿蜷缩沉闷稍糊稍凹硬滑0.7190.103

将其特征数字化如下:
色泽 1-3代表 浅白 青绿 乌黑
根蒂 1-3代表 稍蜷 蜷缩 硬挺
敲声 1-3代表 清脆 浊响 沉闷
纹理 1-3代表 清晰 稍糊 模糊
脐部 1-3代表 平坦 稍凹 凹陷
硬滑用1表示,软粘用2
好瓜 1代表 是 0 代表 不是|

编号色泽根蒂敲声纹理脐部触感密度含糖率好瓜
12221310.6970.461
23231310.7440.3761
33221310.6340.2641
42231310.6080.3181
51221310.5560.2151
62121220.4030.2371
73122220.4810.1491
83121210.4370.2111
93132210.6660.0910
102311120.2430.2670
111313110.2450.0570
121223120.3430.0990
132122310.6390.1610
141132310.6570.1980
153121220.360.370
161223110.5930.0420
172232210.7190.1030

现在我们有一个带判断瓜如下:

色泽根蒂敲声纹理脐部触感密度含糖量好瓜
青绿蜷缩浊响清晰凹陷硬滑0.6970.46

判断其为好瓜or坏瓜:

答:先验概率: 𝑃 (𝐶1) 、𝑃 (𝐶2)
P ( 好瓜 = 是 ) = 8 17 = 0.471 P ( 好瓜 = 否 ) = 9 17 = 0.529 P(\text{好瓜}=\text{是})=\frac8{17}=0.471\\P(\text{好瓜}=\text{否})=\frac9{17}=0.529 P(好瓜=)=178=0.471P(好瓜=)=179=0.529

求:每个属性估计条件概率 P ( x i ∣ C ) : P(x_i| C): P(xiC:

#西瓜数据集
def DataSet():
    data = [['青绿', '蜷缩', '浊响', '清晰', '凹陷', '硬滑', 0.697, 0.460],
            ['乌黑', '蜷缩', '沉闷', '清晰', '凹陷', '硬滑', 0.774, 0.376],
            ['乌黑', '蜷缩', '浊响', '清晰', '凹陷', '硬滑', 0.634, 0.264],
            ['青绿', '蜷缩', '沉闷', '模糊', '凹陷', '硬滑', 0.608, 0.318],
            ['浅白', '蜷缩', '浊响', '模糊', '凹陷', '硬滑', 0.556, 0.215],
            ['青绿', '稍蜷', '浊响', '清晰', '稍凹', '软粘', 0.403, 0.237],
            ['乌黑', '稍蜷', '浊响', '清晰', '稍凹', '硬滑', 0.481, 0.149],
            ['乌黑', '稍蜷', '浊响', '清晰', '稍凹', '软粘', 0.437, 0.211],
            ['乌黑', '稍蜷', '沉闷', '稍糊', '稍凹', '硬滑', 0.666, 0.091],
            ['青绿', '蜷缩', '浊响', '清晰', '凹陷', '硬滑', 0.243, 0.267],
            ['浅白', '蜷缩', '沉闷', '稍糊', '稍凹', '硬滑', 0.247, 0.057],
            ['青绿', '稍蜷', '浊响', '清晰', '稍凹', '软粘', 0.345, 0.099],
            ['浅白', '稍蜷', '沉闷', '稍糊', '稍凹', '硬滑', 0.635, 0.161],
            ['乌黑', '稍蜷', '浊响', '清晰', '稍凹', '软粘', 0.650, 0.198],
            ['乌黑', '稍蜷', '沉闷', '稍糊', '稍凹', '硬滑', 0.361, 0.370],
            ['浅白', '蜷缩', '浊响', '清晰', '凹陷', '硬滑', 0.593, 0.041],
            ['青绿', '蜷缩', '沉闷', '稍糊', '稍凹', '硬滑', 0.719, 0.100]]
    features = ['色泽', '根蒂', '敲声', '纹理', '脐部', '触感','密度', '含糖率']
    labels = ['好瓜', '好瓜', '好瓜', '好瓜', '好瓜', '好瓜', '好瓜', '好瓜', '好瓜', '坏瓜', '坏瓜', '坏瓜', '坏瓜', '坏瓜', '坏瓜', '坏瓜', '坏瓜', '坏瓜', '坏瓜']
    return features, data, labels

_, _, labels = DataSet()
# 统计类别标签的频次
# 统计类别标签的频次
label_freq = {}
for label in labels:
    # 如果标签已经存在于label_freq中,增加其频次
    if label in label_freq:
        label_freq[label] += 1
    # 否则,创建一个新的键值对
    else:
        label_freq[label] = 1
# 计算先验概率
prior_prob = {}
total_samples = len(labels)
for label, freq in label_freq.items():
    # 计算每个类别的先验概率
    prior_prob[label] = freq / total_samples
# 输出先验概率
for label, prob in prior_prob.items():
    print("先验概率: 类别 {} - 概率 {:.4f}".format(label, prob))

# 获取数据集
feature, data, labels = DataSet()

# 根据类别分割数据集
data_by_label = {}
# 遍历data中的每个数据项
for i in range(len(data)):
    # 获取当前数据项的标签
    label = labels[i]
    # 如果当前标签已经存在于data_by_label中
    if label in data_by_label:
        # 将当前数据项添加到对应标签的列表中
        data_by_label[label].append(data[i])
    else:
        # 如果当前标签不存在于data_by_label中
        # 则创建一个以当前标签为键,数据项为值的新列表
        data_by_label[label] = [data[i]]

# 计算条件概率
conditional_prob = {}
for label in data_by_label:
    conditional_prob[label] = {}  # 初始化条件概率字典
    samples = data_by_label[label]  # 获取该类别的样本
    total_samples = len(samples)  # 该类别的样本数量

    # 计算每个特征的条件概率
    # 遍历每个特征
    for feature_index in range(len(samples[0])):
        # 获取每个样本该特征的值
        feature_values = [sample[feature_index] for sample in samples]
        # 统计每个特征值的出现频率
        feature_freq = {}
        for value in feature_values:
            # 如果特征值已经在字典中,频率加1
            if value in feature_freq:
                feature_freq[value] += 1
            else:
                # 否则,添加特征值到字典中,频率为1
                feature_freq[value] = 1
        # 计算条件概率
        for value, freq in feature_freq.items():
            conditional_prob[label][(feature_index, value)] = round(freq / total_samples, 3)  # 保留3位小数

# 输出条件概率
for label, prob_dict in conditional_prob.items():
    print("类别:", label)
    for feature_value, prob in prob_dict.items():
        print("特征: {} : {}  概率: {:.3f}".format(feature[feature_value[0]], feature_value[1], prob))


# 贝叶斯分类器
def classify(sample, prior_prob, conditional_prob, alpha=1):
    max_prob = -1
    best_label = None
    post_prob = {}
    total_post_prob = 0  # 用于存储所有类别的联合概率之和

    # 计算每个类别的联合概率
    for label, prior in prior_prob.items():
        prob = prior
        for feature_index, feature_value in enumerate(sample):
            if (feature_index, feature_value) in conditional_prob[label]:
                prob *= conditional_prob[label][(feature_index, feature_value)]
            else:
                prob *= alpha / (sum(conditional_prob[label].values()) + alpha)

        post_prob[label] = prob
        total_post_prob += prob

    # 计算后验概率并找到最大值
    for label, prob in post_prob.items():
        post_prob[label] /= total_post_prob  # 规范化后验概率
        print("类别: {}, 后验概率: {:.6f}".format(label, post_prob[label]))
        if post_prob[label] > max_prob:
            max_prob = post_prob[label]
            best_label = label

    return best_label


# 测试样本
test_sample = ['青绿', '蜷缩', '浊响', '清晰', '凹陷', '硬滑', 0.697, 0.460]

# 进行分类
predicted_label = classify(test_sample, prior_prob, conditional_prob)
print("测试样本为:",test_sample)
print("预测的类别为:", predicted_label)




在这里插入图片描述

2.3.5 思维导图总结

在这里插入图片描述

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

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

相关文章

动态规划最大子段和讲解和【题解】——最大子段和

动态规划最大子段和讲解和【题解】——最大子段和 1.详细讲解最大子段和题目描述输入格式输出格式输入输出样例输入 #1输出 #1 提示样例 1 解释数据规模与约定 1.1.思路解析1.2.AC代码 2.优化3.别言 1.详细讲解 最大子段和 题目描述 给出一个长度为 n n n 的序列 a a a&am…

cursor: mutex X 等待事件分析

背景&#xff1a; v$session中同一个sql语句bhaku1zp2w5v7大量等待cursor: mutex X &#xff0c;且等待事件较长。 分析&#xff1a; 什么是cursor: mutex X&#xff1f; 任何操作或访问游标的操作都可能需要等待访问共享池中支持游标的结构。在极端争用的情况下&#xff0c…

MySQL 【数字】函数大全(一)

ABSCEILCEILINGCONVDIVFLOORCREATESTLEAST 1、ABS ABS(number) &#xff1a;返回指定数字的绝对值 如果参数 number 为字符串&#xff0c;ABS() 将按照如下规则尝试转为数字&#xff1a; 如果以数字开头&#xff0c;则将开头的数字部分转为数字。如果不能转为数字&#xff0c;…

使用Go语言的gorm框架查询数据库并分页导出到Excel实例

文章目录 基本配置配置文件管理命令行工具: Cobra快速入门基本用法 生成mock数据SQL准备gorm自动生成结构体代码生成mock数据 查询数据导出Excel使用 excelize实现思路完整代码参考 入口文件效果演示分页导出多个Excel文件合并为一个完整的Excel文件 完整代码 基本配置 配置文…

Vue环境安装以及配置

这里写目录标题 前言一、前置要求1.安装Node.js2. 安装VScode 二、创建全局安装目录和缓存日志目录三、配置环境变量四、权限五、配置镜像六、vscode插件1. Vue-Offical2. Vue 3 Snippets3. Path Intellisense4. Auto Import5. Auto Close Tag6. Auto Rename Tag7.GitLens总结 …

001 Hadoop安装、Spring整合测试

Hadoop安装、整合测试 文章目录 Hadoop安装、整合测试1.简介1.优点2.组成 2.安装1.安装jdk&#xff08;如已安装可跳过&#xff09;2.安装hadoop1.安装2. 修改配置文件core-site.xml3. 修改配置文件hdfs-site.xml4.启动hadoop5.启动yarn6.执行jps查看7.相关端口及配置位置8.访问…

2024年【制冷与空调设备安装修理】考试及制冷与空调设备安装修理新版试题

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 制冷与空调设备安装修理考试是安全生产模拟考试一点通总题库中生成的一套制冷与空调设备安装修理新版试题&#xff0c;安全生产模拟考试一点通上制冷与空调设备安装修理作业手机同步练习。2024年【制冷与空调设备安装…

STM32CubeIDE使用ADC采用DMA重大BUG

问题描述 STM32CubeIDE 1.8.0问题 大牛攻城狮最近调试STM32L151CBT6。由于项目上使用该款芯片做控制电源使用&#xff0c;其中涉及到多路ADC的数据采样。使用STM32CubeIDE 1.8.0版本详细如下图所示 注意这里的使用的软件版本号很关键。采用该款软件搭建工程&#xff0c;第一次…

架构设计笔记-12-信息系统架构设计理论与实践

目录 知识要点 案例分析 1.Java企业级应用系统 2.c/s架构&#xff0c;b/s架构 知识要点 软件架构风格是描述某一特定应用领域中系统组织方式的惯用模式。架构风格定义了一类架构所共有的特征&#xff0c;主要包括架构定义、架构词汇表和架构约束。 数据挖掘是从数据库的大…

HarmonyOS NEXT 应用开发实战(四、仿知乎日报的首页轮播图实现)

在本篇博文中&#xff0c;我们将探讨如何在HarmonyOS NEXT应用中实现一个仿知乎日报的首页轮播图效果。我们将使用Swiper组件来展示轮播图&#xff0c;并且在轮播图下方添加半透明背景的标题。以下是具体的实现步骤和代码示例。 1. 项目结构与数据源 首先&#xff0c;我们需要…

Django兴农购物网站系统—计算机毕业设计源码38256

摘 要 助农工作是当前我国全面建成小康社会的重点工作&#xff0c;由于我国农村地域广大&#xff0c;贫困人口多&#xff0c;区域差异大&#xff0c;因此&#xff0c;不同区域的扶贫方法也是不一样的。近年来&#xff0c;随着网络的普及。许多农村地区物产丰富&#xff0c;但由…

计组_中断响应的步骤

2024.10.13&#xff1a;计算机组成原理学习笔记 中断响应步骤 中断响应 &#xff08;中断响应的过程也称中断隐指令&#xff09;第一步&#xff1a;关中断第二步&#xff1a;保存断点第三步&#xff1a;引出中断服务程序中断源识别判优方法1&#xff1a;软件查询方法中断源识别…

Redis两种持久化方式

目录 一、Redis持久化 RDB 四种执行场景 底层执行原理 优缺点 AOP 三种fsync策略 AOF重写机制 工作基本流程 优缺点 RDB和AOF的对比 混合持久化 Redis 持久化的主要目的是为了确保数据的持久性和可靠性&#xff0c;避免因意外崩溃或重启导致的数据丢失。以下是一些进…

基于STM32的图形识别智能跟踪小车设计

引言 本项目设计了一个基于STM32的图形识别智能跟踪小车&#xff0c;能够通过摄像头识别特定图形或标志&#xff0c;并自动跟随这些图形进行移动。系统结合了摄像头模块和图像处理算法&#xff0c;实现了对前方物体的识别与跟踪。同时&#xff0c;小车具备避障功能&#xff0c…

顺序表|消失的数字|轮转数组|移除元素|合并有序数组|删除有序数组中重复项(C)

面试题 17.04. 消失的数字 思路一 排序遍历 如果下一个不等于上一个数1&#xff0c;这个下一个数就是消失的数字 时间复杂度 O ( N ⋅ log ⁡ 2 N ) O(N\cdot \log_{2}N) O(N⋅log2​N) 思路二 0N等差数列公式计算结果 - 数组中的值&#xff0c;结果就是消失的数字 int mis…

基于海市蜃楼算法(Fata Morgana Algorithm ,FATA)的多无人机协同三维路径规划(提供MATLAB代码)

一、海市蜃楼算法 海市蜃楼算法&#xff08;Fata Morgana Algorithm &#xff0c;FATA&#xff09;是2024年提出一种新型的群体智能优化算法&#xff0c;它的设计灵感来源于自然现象中的海市蜃楼形成过程。FATA算法通过模仿光线在不均匀介质中的传播方式&#xff0c;提出了两种…

日语学习者福音:4大翻译软件集锦,总有一款适合你!

现在全球化了&#xff0c;学个外语&#xff0c;尤其是日语这种很有魅力的语言&#xff0c;成了很多人的愿望。不管是为了方便旅行&#xff0c;还是喜欢日本文化&#xff0c;或者想在工作中更有竞争力&#xff0c;学日语都挺重要的。学语言不容易&#xff0c;特别是遇到难懂的句…

C#实现Punycode编码/解码

测试代码 string word "我爱你"; string idn "我爱你.中国"; string wordCode PunyCode.Encode(word); string punycode PunyCode.IDN2Punycode(idn);Console.WriteLine(word); Console.WriteLine(wordCode); Console.WriteLine(PunyCode.Decode(word…

【工欲善其事】巧用 PowerShell 自动清除复制 PDF 文本时夹杂的换行符号

文章目录 巧用 PowerShell 自动清除复制 PDF 文本时夹杂的换行符号1 问题描述2 解决方案3 具体步骤4 效果测试5 小结与复盘 巧用 PowerShell 自动清除复制 PDF 文本时夹杂的换行符号 1 问题描述 不知各位是否也为复制过来的文本中夹杂的回车换行符抓狂过&#xff1f;就是在复…

Spring Boot知识管理:提升信息检索效率

4系统概要设计 4.1概述 本系统采用B/S结构(Browser/Server,浏览器/服务器结构)和基于Web服务两种模式&#xff0c;是一个适用于Internet环境下的模型结构。只要用户能连上Internet,便可以在任何时间、任何地点使用。系统工作原理图如图4-1所示&#xff1a; 图4-1系统工作原理…