来啦~朴素的贝叶斯拍了拍你

498 阅读8分钟

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。

谢谢你这么好看还关注我,虽然还没关注,但不会真的不关注吧🥰

👀写在前面

如果你学过概率论,你只需要看看黑体例题 大概就能看懂朴素贝叶斯它到底想干啥😬

条件概率

现在有一盒巧克力,里面装了16块,其中黑色、白色、棕色巧克力各4块,红色、黄色巧克力各2块。如果把这些巧克力分别放在A、B两个盒子里,从A盒中取出黑色巧克力的概率是多少?

two_box_chocolet

🤔我们看着盒子数一数就知道,在A中黑色巧克力有3个,盒内一共有7个巧克力,那么从A盒中取出黑色巧克力的概率是 37\frac{3}{7}

我们也可以使用条件概率的形式表达出来:

这说明已知一块黑色巧克力是来自A盒的,它的概率等于巧克力是黑色的并且来自A盒的概率除以巧克力来自于A盒的概率

通过数一数,我们看到巧克力总数是16,巧克力是黑色的并且来自于A盒的个数是3,巧克力来自于A盒的个数是7,

P(黑色巧克力A)=316P(黑色巧克力∩A盒)=\frac{3}{16}
P(A)=716P(A盒)=\frac{7}{16}
P(黑色巧克力A)=316716=37∴P(黑色巧克力|A盒)=\frac{\frac{3}{16}}{\frac{7}{16}}=\frac{3}{7}

💥条件概率公式:

P(X=xY=y)=P(X=x,Y=y)P(Y=y)P(X=x|Y=y)=\frac{P(X=x,Y=y)}{P(Y=y)}

贝叶斯定理

1.贝叶斯定理

还是基于上面的问题背景:

已知取出一块黑色的巧克力,它来自A盒的概率是多少?

image-20211012001136310

这里,可以把分子的公式用上题的结果来表达:

最终将②③代入①式计算出:

P(A黑色巧克力)=316416=34P(A盒|黑色巧克力)=\frac{\frac{3}{16}}{\frac{4}{16}}=\frac{3}{4}

已知:存在K类 c1, c2,..., cK,给定一个新的实例 x=(x(1),x(2),...,x(n))。问:该实例归属第ci类的可能性有多大?

分子是同时满足两种情况的概率,分母是发生这一条件的全概率公式

贝叶斯定理为:

2.贝叶斯分类

已知:有A和B两盒巧克力,现在拿到一块黑色的巧克力。问:该巧克力最有可能是哪个盒子的?

34>14\frac{3}{4}>\frac{1}{4} ,所以来自A盒的概率最大,那么巧克力最有可能来自于A盒,这就是贝叶斯分类

存在K类c1,c2,...,cK,给定一个新的实例x=(x(1),x(2),...,x(n))问:该实例归属于哪一类?

我们可以分别计算 P(Y=ciX=x)P(Y=c2X=x)...P(Y=ckX=x)P(Y=c_i|X=x)、P(Y=c_2|X=x)、...P(Y=c_k|X=x) 的值,然后找到最大的那个。这里面的分母都是相同的,因此只需要计算不同类下的分子👇,找到最大值就可以确定归属的类了

argmaxciP(X=xY=ci)P(Y=ci)argmax_{c_{i}}P(X=x|Y=c_i)·P(Y=c_i)

朴素贝叶斯

朴素贝叶斯和贝叶斯相比,有一个前提条件:假设实例点中的每个特征是相互独立的。这就是朴素的含义😁

根据朴素贝叶斯所有的x(1),x(2),....,x(n)都是相互独立的,那么分子其中一部分的P(X=xY=ci)P(X=x|Y=c_i)就可以写成:

最终只需要求出👇:

从而找出归属的类别,即可完成朴素贝叶斯算法的分类。

后验概率最大化准则

请问:巧克力是黑色的并且来自于A盒的概率P是多少?

由上文②式得,

P(A盒)叫做先验概率分布,也可以表示成:

P(Y=ci),i=1,2,...,KP(Y=c_i), i=1,2,...,K

P(黑色巧克力|A盒)叫做条件概率分布,也可以表示成:

当条件变成对调时,由P(X|Y)变成P(Y|X),得到贝叶斯定理得:

这个就称为后验概率分布(就是贝叶斯定理那个公式)

1. 朴素贝叶斯分类方法

假如存在K类c1,c2,...,cK,现在给定一个新的实例 x=(x(1),x(2),...,x(n))。问该实例归属于哪一类?

上面的后验概率公式 P(Y=ciX=x)=P(X=xY=ci)P(Y=ci)Σi=1KP(X=xY=ci)P(Y=ci)=P(Y=ci)j=1nP(X(j)=x(j)Y=ci)Σi=1KP(Y=ci)j=1nP(X(j)=x(j)Y=ci)P(Y=c_i|X=x)=\frac{P(X=x|Y=c_i)·P(Y=c_i)}{Σ_{i=1}^KP(X=x|Y=c_i)·P(Y=c_i)}=\frac{P(Y=c_i)\prod_{j=1}^nP(X^{(j)}=x^{(j)}|Y=c_i)}{Σ_{i=1}^KP(Y=c_i)\prod_{j=1}^nP(X^{(j)}=x^{(j)}|Y=c_i)},由于分母都相同,因此,只需要计算出分子的最大值就可以找出这个实例所对应的类。

PS:不用被这里一堆公式吓到,你在前面朴素贝叶斯那里已经见过了,是一样的😋

2. 0-1损失函数

在k近邻法中,为了制定规则来决定这个分类函数的好与坏,我们需要比较分类问题的损失情况,在朴素贝叶斯方法中继续用到0-1损失函数:

0-1~损失函数

L(Y,f(X))={1,Yf(X)0,Y=f(X)L(Y,f(X))= \begin{cases}1, \quad Y≠f(X) \\ 0,\quad Y = f(X) \end{cases}

f(X)是分类决策函数

Y是对应的分类,输出空间为{c1,c2,...,cK}

当两者相等时,证明分类正确,没有损失,反之记为1,有损失

这个损失函数对应的期望是:

R(f)=E[L(Y,f(X))]R(f)=E[L(Y,f(X))]

详见:简博士-后验概率最大化

一顿操作下来,反正就是 把期望风险最小化转换为后验概率最大化🤨

极大似然估计

先验概率 P(Y=ck)P(Y=c_k) 的极大似然估计

简单来说,这个公式的意思就是掰着手指头🖐数一数训练样本集中ck的样本有多少个,然后除以样本总数N

条件概率P(X(j)=ajlY=ck)P(X^{(j)}=a_{jl}|Y=c_k) 的极大似然估计

这个公式的含义是:计算出某一特征在某一类条件下的概率,分子是在这个类中对应特征的样本个数,分母是这个类中的样本总数

朴素贝叶斯算法步骤

目标🏆:如果有一个实例点x,想通过朴素贝叶斯的分类法找到它对应的类别y

解决途径🛶:通过后验概率最大化实现

计算过程🔑:

round 1: 求出先验概率(极大似然估计)

round 2: 求出一系列的条件概率(极大似然估计) round 3: 把各类的先验概率和条件概率连乘,得出计算结果最大值,就是对应的类

例题解说

输入:训练集

输出:实例点 x=(2,S)T 的类标记 y

接下来,我们就用上面的3步走来计算。

round 1:求出先验概率

数一数🔍就知道,在这个数据集中,有2个类别,分别是Y=1和Y=-1两类,总共有实例15个,

P(Y=1)=915,P(Y=1)=615P(Y=1)=\frac{9}{15},P(Y=-1)=\frac{6}{15}

round 2:求出一系列的条件概率

数据集的X有两个特征,分别是 X(1) 和 X(2),其中 X(1) 的取值空间为{1,2,3},X(2) 的取值空间为{S,M,L},这里需要对每一类中的每一个特征分别进行计算:

对于类别 Y=1 而言:

从9个 Y=1 里面数一下, X(1)=1 的实例有2个,那么

P(X(1)=1Y=1)=29P(X^{(1)}=1|Y=1)=\frac{2}{9}

以此类推,可以求出 Y=1 类下的其他特征条件概率。

对于类别 Y=-1 而言:

从6个 Y=-1 里面数一下,X(1)=1 的实例有3个,那么

P(X(1)=1Y=1)=36P(X^{(1)}=1|Y=-1)=\frac{3}{6}

以此类推,也可以求出 Y=-1 类下的其他特征条件概率。

round 3:把各类的先验概率和条件概率连乘,得出计算结果最大值,就是对应的类

假如两个特征相互独立,对于实例 x=(2,S) 而言,分别计算两个类别下的后验概率

通过比较两个后验概率值,发现 Y=-1 时后验概率最大,所以 y=-1

贝叶斯估计

若 在 Y=1时,不存在 X(2)=S 的实例点,则

image-20211011120919452

那么会导致

这显然是错误的

为了避免用极大似然估计法计算出概率值为0的情况,贝叶斯估计在先验概率条件概率的分子分母上均引入了一个 λ\lambda ,当 λ\lambda =0时就是极大似然估计。

先验概率的贝叶斯估计

贝叶斯估计常取 λ\lambda=1,也称为拉普拉斯平滑拉普拉斯估计

条件概率的贝叶斯估计

例题解说

还是基于上面那道题,用贝叶斯估计再做一遍

输入:训练集

输出:实例点 x=(2,S)T 的类标记 y

还是老规矩,三步走🤠~

round 1:求出贝叶斯估计的先验概率

在这个数据集中👀,一共有两个Y类,所以 K=2,同样的还是共有15个实例

round 2:求出贝叶斯估计的条件概率

Sj 怎么找呢?🥺

其实就是,数据集中分别有两个特征 X(1) 和 X(2) ,那么就对应 j=1 和 j=2,其中 X(1) 取值有{1,2,3},共有3种,所以这里 S1 =3, X(2) 取值有{S,M,L},也是3种,所以 S2 =3

对于类别 Y=1 中的特征 X(1) 而言: 简单来说,就是把上文中的式子都引入了一个λ\lambda,以此类推可求得 P(X(2)=SY=1)P(X^{(2)}=S|Y=1)P(X(1)=SY=1)P(X^{(1)}=S|Y=-1)P(X(2)=SY=1)P(X^{(2)}=S|Y=-1)等等,我们把所有结果写在下表里:

round 3:把各类的先验概率和条件概率连乘,得出计算结果最大值,就是对应的类

对于实例 x=(2,S)x=(2,S) 而言,分别计算两个类别下的后验概率:

通过比较发现, Y=1Y=-1 的计算结果较大,所以 y=-1

📓写在后面

当我在朴素贝叶斯里绕来绕去后才发现,这几乎差不多就是把概率论的内容复习了一遍😅

如有问题,欢迎交流呐~

可以私信到公众号后台 :昕之一方

代码仓库含朴素贝叶斯的完整实现过程代码及scikit-learn实例,请戳👉gitee.com/xin-yue-qin… 👈

参考资料:简博士-朴素贝叶斯定理