朴素贝叶斯模型

朴素贝叶斯法

朴素贝叶斯是一种用先验概率估计后验概率的模型,通过估计先验概率得到样本和类别的近似联合概率,随后通过联合概率分布获得需要的后验概率分布进而实现分类。本次介绍的朴素贝叶斯法主要包括三块:总体思想(将后验概率转换为先验概率)、极大似然估计(使用极大似然法估计先验概率)、贝叶斯估计(使用贝叶斯估计得到先验概率)。

符号说明

设输入空间XRnn维向量的集合,输出空间的集合Y={c1,c2,,cK},则在样本(示例,特征向量)(x,y)xXyY。继续定义X,Y分别是在输入空间X和输出空间Y上的随机变量,P(X,Y)表示XY的联合概率分布,且训练数据集

T={(x1,y1),(x2,y2),,(xN,yN)}

P(X,Y)独立同分布产生。

贝叶斯总体模型

对于一个分类任务,我们可以使用判别方法直接计算样本x为所有类别的概率,并通过最大的类别概率来获得其类别即:
(1)yhat=argmaxckP(Y=ck|X=x),k=1,2,,K
我们也可以通过生成方法估计样本的总体分布并间接获得样本为每个类别的概率即:

P(Y=ck|X=x)=P(X=x,Y=ck)P(X=x)=P(Y=ck)P(X=x|Y=ck)P(X=x)(2)=P(Y=ck)P(X=x|Y=ck)i=1kP(Y=ck)P(X=x|Y=ck)

这样就基本构成了贝叶斯模型,但仅仅这样是不够的,因为P(X=x|Y=ck)是很难求得的,xn维的向量,其组合太大,若假设在x中,其每维维可取值Sjj代表每一维,j=1,2,,n,那么对于一个样本x其预测为ck一个类别所含有的参数就为j=1nSj,若要得到这个样本的全部类别,那么需要的参数量就是Kj=1nSj,显然这样做太复杂了,我们需要统计的组合太多,怎么办?

一种简化计算的方式是,假定每个维度的特征之前是互不相关的,虽然这样会损失掉很多原有相关的信息,但是可以大大的减少参数量,如下所示:

P(X=x|Y=ck)=P(X(1)=x(1),X(2)=x(2),,X(n)=x(n)|Y=ck)=P(X(1)=x(1)|Y=ck)P(X(2)=x(2)|Y=ck)P(X(n)=x(n)|Y=ck)(3)=j=1nP(X(j)=x(j)|Y=ck)

这样参数量可以由Kj=1nSj降低为Kj=1nSj,毫无疑问,这无疑是一个巨大的突破,尽管失去了特征之间的相关性信息。
(3)带入(2)中可得:

P(Y=ck|X=x)=P(Y=ck)P(X=x|Y=ck)i=1kP(Y=ck)P(X=x|Y=ck)(4)=P(Y=ck)j=1nP(X(j)=x(j)|Y=ck)i=1k{P(Y=ck)j=1nP(X(j)=x(j)|Y=ck)}

对于同一个样本x,其共需要预测K个类别c1,c2,,cK,但从上式可知,无论预测哪个类别,在分母中,会计算所有类别的相关信息,而这对于所有类别都是相同的,所以分母部分可以省略。故最终的模型为:

(5)P(Y=ck|X=x)=P(Y=ck)j=1nP(X(j)=x(j)|Y=ck)

另外几个需要区分的点是:
先验概率:即通过样本可以统计出来的概率。
后验概率:需要通过转换求取的概率,不能直接统计得到。

极大似然估计

通过贝叶斯模型,我们将一个后验概率通过条件概率公式转换成了求解P(X,Y)的分布并通过简化版的先验概率(特征独立)来估计分布P(X,Y)。但是这里面有一个问题没有解决,那就是先验概率P(X(j)=x(j)|Y=ck)P(Y=ck)如何求解?
当然一种非常直观的计算方式就是直接统计满足上面条件的样本占总体样本的比例,所以很自然的我们可以得到下面的两个计算式子:

(6)P(Y=ck)=i=1NI(yi=ck)N

(7)P(X(j)=ajl|Y=ck)=i=1NI(xi(j)=ajl,yi=ck)i=1NI(yi=ck)

其中ajl表示第j个特征的第i个可能取的值,xi(j)表示第i个样本的第j个特征的值。
但是为什么可能这样表示呢?我们通过极大似然估计来证明上述两个等式成立。
P(Y=ck)的概率,按照极大似然函数的思想就是求解当P(Y=ck)为多少时,可以使得能够最有可能产生这么一群样本。
因此,我们可以假设θ=P(Y=ck)为参数,那么1θ=P(Yck)。并且我们已经假设过所有样本是独立同分布产生的,故可以构造如下的似然函数:

L({x1,y1},{x2,y2},{xN,yN};θ)=θi=1NI(yi=ck)(1θ)Ni=1NI(yi=ck)

两边取自然对数得:

lnL=i=1NI(yi=ck)lnθ+(Ni=1NI(yi=ck))ln(1θ)

两边求导

LL=i=1NI(yi=ck)θ+i=1NI(yi=ck)N1θ

令其为0θ=i=1NI(yi=ck)N

对于P(X(j)=ajl|Y=ck),我们先对其进行转换:

P(X(j)=ajl|Y=ck)=P(X(j)=ajl,Y=ck)P(Y=ck)

由于分母已经求出,因此只需再求出分子即可,我们使用相同的思想,将样本分为两部分,第一部分样本满足P(X(j)=ajl,Y=ck),第二部分取其补集。同样的,我们让概率参数θ=P(X(j)=ajl,Y=ck),那么1θ=不同时满足上述条件的概率。
根据样本都是独立同分布产生的,我们构造相似的似然函数

L(θ)=θi=1NI(xi(j)=ajl,yi=ck)(1θ)Ni=1NI(xi(j)=ajl,yi=ck)

显然可以求出极大值θ=i=1NI(xi(j)=ajl,yi=ck)N,所以易得

P(X(j)=ajl|Y=ck)=i=1NI(xi(j)=ajl,yi=ck)i=1NI(yi=ck)

贝叶斯估计

极大似然估计虽然可以计算出先验概率,但是可能会出现估计参数的概率值为0的情况,即满足xi(j)=ajlyi=ck的样本数量为0。(这通常是不合理的,因为我们得到的样本本就是一个采样,无法保证完全近似全体样本的分布,哪怕概率很小通常也不会设为0),那么如何避免这种情况?
一种处理方式就是添加系数,如下式:

(8)P(X(j)=ajl|Y=ck)=i=1NI(xi(j)=ajl,yi=ck)+λi=1NI(yi=ck)+Sjλ

λ=0时为极大似然估计,当λ=1时成为拉普拉斯平滑,满足下式:

(9){Pλ(X(j)=ajl|Y=ck)>0i=1SjP(X(j)=ajl|Y=ck)=1

对于第二个式子,相当于把j维的每一个值分成了一份,公有Sj份,所有概率最后相加为1。
同样的对P(Y=ck)也可以进行改写。

(10)P(Y=ck)=i=1NI(yi=ck)+λN+Kλ

posted @     阅读(108)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Deepseek官网太卡,教你白嫖阿里云的Deepseek-R1满血版
· 2分钟学会 DeepSeek API,竟然比官方更好用!
· .NET 使用 DeepSeek R1 开发智能 AI 客户端
· DeepSeek本地性能调优
· 一文掌握DeepSeek本地部署+Page Assist浏览器插件+C#接口调用+局域网访问!全攻略
点击右上角即可分享
微信分享提示