naive bayes
Representation
贝叶斯定理:已知某条件概率,如何得到两个事件交换后的概率,也就是在已知P(B|A)的情况下如何求得P(A|B)。
因为事件A和B同时发生的概率为(在A发生的情况下发生B)或者(在B发生的情况下发生A):P(A∩B)=P(A)∗P(B∣A)=P(B)∗P(A∣B)
那么可以得到:P(A∣B)=P(B)P(B∣A)∗P(A)
由此得到启示,可以利用贝叶斯定理进行分类,对于给出的待分类项,求解在此项出现的条件下各个目标类别出现的概率,哪个最大,就认为此待分类项属于哪个类别。
贝叶斯定理实际上就是计算"条件概率"的公式。
所谓"条件概率"(Conditional probability),就是指在事件B发生的情况下,事件A发生的概率,用P(A|B)来表示。

根据文氏图,可以很清楚地看到在事件B发生的情况下,事件A发生的概率就是P(A∩B)除以P(B)。 用文氏图比较好理解

因此,

同理可得,

所以,

即

这就是条件概率的计算公式。
先验概率与后验概率
先验概率P(Y):就是在事情尚未发生之前,我们对该事件发生概率的估计,是根据以往经验分析得到的概率。J往往这个具体事情还未发生前,普遍的事情调查,比如平日的堵车概率,下雨的概率等。
后验概率P(Y|X):给定X时,Y发生的概率。是表示在某事件已经发生的条件下,求该事件由某个元素引起的可能性大小。J后验概率本身是一个条件概率,但是特指相对于先验概率而言,有一个元素影响下,讨论后验概率。
在这里补充一个如何设置先验概率和后验概率的例子:

第一个例子。两个一模一样的碗,一号碗有30颗水果糖和10颗巧克力糖,二号碗有水果糖和巧克力糖各20颗。现在随机选择一个碗,从中摸出一颗糖,发现是水果糖。请问这颗水果糖来自一号碗的概率有多大?
我们假定,H1表示一号碗,H2表示二号碗。由于这两个碗是一样的,所以P(H1)=P(H2),也就是说,在取出水果糖之前,这两个碗被选中的概率相同。因此,P(H1)=0.5,我们把这个概率就叫做"先验概率",即没有做实验之前,来自一号碗的概率是0.5。
先验概率就是设置问的是哪个,没做实验前;而后验概率就是发生的事情,然后结合先验概率中的事件来表示。结合公司理解:

对条件概率公式进行变形,可以得到如下形式:

我们把P(A)称为"先验概率"(Prior probability),即在B事件发生之前,我们对A事件概率的一个判断。P(A|B)称为"后验概率"(Posterior probability),即在B事件发生之后,我们对A事件概率的重新评估。P(B|A)/P(B)称为"可能性函数"(Likelyhood),这是一个调整因子,使得预估概率更接近真实概率。 所以,条件概率可以理解成下面的式子:
后验概率 = 先验概率 x 调整因子再假定,E表示水果糖,所以问题就变成了在已知E的情况下,来自一号碗的概率有多大,即求P(H1∣E)。我们把这个概率叫做"后验概率",即在E事件发生之后,对P(H1)的修正。
根据条件概率公式,得到: P(H1∣E)=P(H1)∗P(E∣H1)/P(E)
已知,P(H1)等于0.5,P(E∣H1)为一号碗中取出水果糖的概率,等于0.75,那么求出P(E)就可以得到答案。根据全概率公式 : P(E)=P(E∣H1)∗P(H1)+P(E∣H2)∗P(H2)
所以: P(E) = 0.75*0.5 + 0.5*0.5 = 0.625 将数字代入原方程,得到: P(H1 | E) = 0.5 * 0.75 / 0.625 = 0.6 这表明,来自一号碗的概率是0.6。也就是说,取出水果糖之后,H1事件的可能性得到了增强。
朴素贝叶斯法是基于贝叶斯定理与特征条件独立假设的分类方法。对于给定的训练数据集,首先基于特征条件独立假设学习输入\/输出的联合概率分布;然后基于此模型,对于给定的输入x,利用贝叶斯定理求出后验概率最大的输出y。
输入: 线性可分训练集T=(x1,y1),(x2,y2),⋯,(xN,yN), 其中,X,Y分别是定义在上的随机向量和随机变量。假设x(j)可取值有Sj个。注意:随机变量的意义在于产生一系列样本,因为不能说样本属于某集合。xi=(xi(1),xi(2),⋯,xi(n))T,xi(j)=(aj1,aj2,⋯,ajSj)
先验概率分布:P(Y=ck),k=1,2,...,K
条件概率分布:P(X=x∣Y=ck)=P(X(1)=x(1),...,X(n)=x(n)∣Y=ck)=条件独立性∏j=1nP(X(j)=x(j)∣Y=ck)
后验概率分布:P(Y=ck∣X=x)=P(X)P(X=X∣Y=ck)P(Y=ck)=∑kP(X=x∣Y=ck)P(Y=ck)P(X=x∣Y=ck)P(Y=ck)=条件独立性∑kP(Y=ck)∏jP(X(j)=x(j)∣Y=ck)P(Y=ck)∏jP(X(j)=x(j)∣Y=ck)
后验概率最大化:y=argmaxck∑kP(Y=ck)∏jP(X(j)=x(j)∣Y=ck)P(Y=ck)∏jP(X(j)=x(j)∣Y=ck) =argmaxckP(Y=ck)∏jP(X(j)=x(j)∣Y=ck)
在上式中,因为分母对于所有的ck都是相同的,所以可以只求分子的极值。记住remember该模型。
Evalution
朴素贝叶斯法将实例分到后验概率最大的类中,这等价于期望经验风险最小化。 记住remember该策略。具体推导可见《统计学习方法》P48。
Optimization
判别模型与生成模型:建模及优化的对象不一样,一个是条件概率,一个是联合概率。
判别模型:
简单的说就是分类的最终结果是以某个函数或者是假设函数的取值范围来表示它属于那一类的,例如H(x)>0就是第一类,H(x)<0。判别模型主要对p(y|x)建模(优化条件概率分布),通过x来预测y。在建模的过程中不需要关注联合概率分布。只关心如何优化p(y|x)使得数据可分。通常,判别模型在分类任务中的表现要好于生成模型。但判别模型建模过程中通常为有监督的,而且难以被扩展成无监督的。比如决策树、逻辑回归、SVM等。
生成模型:
该模型对观察序列的联合概率分布p(x,y)建模(优化训练数据的联合分布概率),在获取联合概率分布之后,可以通过贝叶斯公式得到条件概率分布。生成式模型所带的信息要比判别模型更丰富。除此之外,生成模型较为容易的实现增量学习。比如朴素贝叶斯等。
朴素贝叶斯分类器的事件模型(event model):多项式模型、高斯模型、伯努利模型。
所有的模型参数都可以通过训练集的相关频率来估计。常用方法是概率的最大似然估计和贝叶斯估计。
类的先验概率P(Y)可以通过假设各类等概率来计算(先验概率 = 1 \/ (类的数量)),或者通过训练集的各类样本出现的次数来估计(A类先验概率=(A类样本的数量)\/(样本总数))。
对于类条件概率P(X|Y)来说,直接根据样本出现的频率来估计会很困难。在现实应用中样本空间的取值往往远远大于训练样本数,也就是说,很多样本取值在训练集中根本没有出现,直接使用频率来估计P(X|Y)不可行,因为"未被观察到"和"出现概率为零"是不同的。为了估计特征的分布参数,我们要先假设训练集数据满足某种分布或者非参数模型。
多项式模型:当特征是离散的时候,使用多项式模型。具体见下文的参数估计方法。或是见下面图片的例子:

高斯模型:当特征是连续变量的时候,运用多项式模型就会导致很多P(X(j)=x(j)∣Y=ck)=0(不做平滑的情况下),此时即使做平滑,所得到的条件概率也难以描述真实情况。所以处理连续的特征变量,应该采用高斯模型。
以下是一组人类身体特征的统计资料,已知某人身高6英尺、体重130磅,脚掌8英寸,请问该人是男是女?
根据朴素贝叶斯分类器,计算这个式子的值:
P(身高|性别) x P(体重|性别) x P(脚掌|性别) x P(性别)这里的困难在于,由于身高、体重、脚掌都是连续变量,不能采用离散变量的方法计算概率。而且由于样本太少,所以也无法分成区间计算。怎么办?
这时,可以假设男性和女性的身高、体重、脚掌都是正态分布,通过样本计算出均值和方差,也就是得到正态分布的密度函数。有了密度函数,就可以把值代入,算出某一点的密度函数的值。
比如,男性的身高是均值5.855、方差0.035的正态分布。所以,男性的身高为6英尺的概率的相对值等于1.5789(大于1并没有关系,因为这里是密度函数的值,只用来反映各个值的相对可能性)。
对于脚掌和体重同样可以计算其均值与方差。有了这些数据以后,就可以计算性别的分类了。
可以看到,女性的概率比男性要高出将近10000倍,所以判断该人为女性。
总结:高斯模型假设每一维特征都服从高斯分布(正态分布):
P(xi∣yk)=2πσyk,i21e−2σyk,i2(xi−μyk,i)2
μyk,i表示类别为yk的样本中,第i维特征的均值。
σyk,i2表示类别为yk的样本中,第i维特征的方差。
伯努利模型:与多项式模型一样,伯努利模型适用于离散特征的情况,所不同的是,伯努利模型中每个特征的取值只能是1和0(以文本分类为例,某个单词在文档中出现过,则其特征值为1,否则为0)。见下面图片例子:

伯努利模型中,条件概率P(xi∣yk)的计算方式是:
当特征值xi为1时,P(xi∣yk)=P(xi=1∣yk);
当特征值xi为0时,P(xi∣yk)=1−P(xi=1∣yk);
在朴素贝叶斯法中,学习意味着估计P(Y=ck)和P(X(j)=x(j)∣Y=ck)。由上述分析可知,可以运用极大似然估计和贝叶斯估计来估计相应的概率。这里给出多项式模型的情况,高斯模型并不要用极大似然估计!注意其中I函数在两者相等时取1,两者不等时取0。记住remember此优化就是利用极大似然或贝叶斯来估计参数。
极大似然估计:《统计学习方法》中直接给出了得到的答案。这里的第二个式子的分母不应该为N,输入错误,占个位子,以后来改,下面也是。
P(Y=ck)=N∑i=1NI(yi=ck)
P(X(j)=ajl∣Y=ck)=N∑i=1NI(x(j)=ajl∣yi=ck)
这里搜索了网上的证明方法,给出启示:记住remember该估计方法:XXX的极大似然估计,就是将XXX当作参数来进行估计,所以需要将各个样本出现概率的连乘积表示为该参数的函数!样本的联合分布(输入与输出对又称为样本)称为似然函数。应该是联合概率分布P(X,Y),而不是单P(X)或P(Y),除非是没有类标记,那就用P(X)
约定P(x;θ)表示θ为非随机变量,只是未知常数。而P(x,θ)中的θ表示为随机变量。
约定P(x∣θ)表示条件概率,当不表示条件概率的时候,与P(x;θ)等价;而P(x;θ)表示有待估参数,可以直接认为P(x)。
把p(y=ck)和p(x(j)=ajl∣y=ck)作为参数。
p(y)=∏k=1Kp(y=ck)I(y=ck)p(x∣y=ck)=∏j=1np(x(j)∣y=ck)=∏j=1n∏l=1Sjp(x(j)=ajl∣y=ck)I(x(j)=ajl,y=ck)
为叙述方便起见,下面以φ代表参数集合p(y=ck),p(x(j)=ajl∣y=ck)。
首先写出log似然函数:
ι(φ)=log∏i=1Np(xi,yi;φ)=log∏i=1Np(xi∣yi;φ)p(yi;φ)=log∏i=1N(∏j=1np(xi(j)∣yi;φ))p(yi;φ)=∑i=1N(logp(yi,φ)+∑j=1nlogp(xi(j)∣yi;φ))=∑i=1N[∑k=1Klogp(y=ck)I(yi=ck)+∑j=1n∑l=1Sjlogp(x(j)=ajl∣yi=ck)I(xi(j)=ajl,yi=ck)]=∑i=1N[∑k=1KI(yi=ck)logp(y=ck)+∑j=1n∑l=1SjI(xi(j)=ajl,yi=ck)logp(x(j)=ajl∣yi=ck)]
在上式中是把p(y=ck),p(x(j)=ajl∣y=ck),j=1,2,...,n;l=1,2,...,Sj;k=1,2,...,K作为参数,有这么多参数,当然因为有∑k=1Kp(y=ck)=1等约束,实际参数会少一点。
J所以分成了两部分,可以分开讨论!!!!但是始终是从P(X,Y)开始讨论开的。
那么随机变量Y的概率可以用参数来表示为一个紧凑的形式(也就是将本来需要列出各个情况的概率用一个式子来表达),P(Y)=∏k=1KθkI(Y=ck),I是指示函数Y=ck成立时,I=1;否则I=0。
极大似然函数L(y1,y2..yN;θk)=∏i=1NP(yi)=∏k=1KθkNk,其中N为样本总数,Nk为样本中Y=ck的样本数目。
取对数得到l(θk)=ln(L(θ))=∑k=1KNklnθk,要求该函数的最大值,注意到约束条件∑k=1Kθk=1可以用拉格朗日乘子法,即l(θk,λ)=∑k=1KNklnθk+λ(∑k=1Kθk−1),求导就可以得到:θkNk+λ=0。联立所有的k以及约束条件得到θk=NNk,证明完毕。
估计条件概率P(X(j)=ajl∣y=ck),令参数P(X(j)=ajl∣y=ck)=θkjl
贝叶斯估计:用极大似然估计可能会出现所要估计的概率值为0的情况。这时会影响到后验概率的计算结果,使分类产生偏差。解决这一问题的方法是采用贝叶斯估计。等价于在随机变量各个取值的频数上赋予一个正数λ。常取λ成为拉普拉斯平滑。这里直接给出了得到的答案。
P(Y=ck)=N+Kλ∑i=1NI(yi=ck)+λ
P(X(j)=ajl∣Y=ck)=N+Sjλ∑i=1NI(x(j)=ajl∣yi=ck)+λ
贝叶斯估计:贝叶斯估计与朴素贝叶斯是不同的概念。
极大似然估计的基本想法是:我们所看到的,就是最可能发生的。所以通过最大化实验数据发生的概率P(x;θ)(其中参数θ是未知的),取极值时对应的θ^即为最大似然估计。
而贝叶斯理解的关键在于把事件发生的概率θ看作一个随机变量,即认为参数也是随机的。首先有公式如下:
P(θ∣x)=∑θP(x∣θ)P(θ)P(x∣θ)P(θ)
θ表示一个事件发生的概率,例如扔一个硬币的结果正面朝上的概率,这个概率θ是一个随机变量,P(θ)为θ的先验分布,“先”表示在实验之前,先验是指获得数据之前对于事件发生概率θ的预估,实际上就是预先假定的θ的一个概率分布,x表示实验数据。
不妨假设θ取值空间为θi,1≤i≤N,其中∑i=1Nθi=1,将上面的公式写得更加容易理解一点如下:
P(θ=θi∣x)=∑i=1NP(x∣θ=θi)P(θ=θi)P(x∣θ=θi)P(θ=θi),1≤i≤N
在实验之后,利用实验数据对θ的概率分布进行校正,即得到θ的后验分布,然后求期望,最终得到贝叶斯估计,记住remember这个思想以及所有事情都是随机的思想:
θ^=∑i=1NθiP(θ=θi∣x)
一般地,对于连续随机变量θ,θ的贝叶斯估计为:θ^=∫θP(θ∣x)dθ
极大似然估计与贝叶斯估计的例子:所有的贝叶斯估计,随着样本量的增加先验的影响逐渐减弱,贝叶斯估计趋近极大似然估计,J具体贝叶斯的应用可能不需要搞懂,只要知道效果即可
一枚硬币,抛掷出现正面的概率为p,出现反面的概率为1-p,但是参数p未知。为了估计参数 p 的取值,进行 10 次随机试验,出现了3次正面,7次反面。现在我们已经获取了实验数据,问题是如何才能通过实验数据估计出参数p呢?
极大似然估计:
参数θ在该问题中指的是正面出现的概率p,实验数据指的是在10次实验中出现3次正面,7次反面。如果实验中出现h次正面,t次反面,则该实验结果出现的频率为(假设正反面出现的次序确定):P(x∣θ)=ph(1−p)t
第二步,极大化上面的式子即可得到p的贝叶斯估计。由于极大化P(x∣θ)等价于极大化log[P(x∣θ)],所以可以通过求解log[P(x∣θ)]的最大值简化求解过程log[P(x∣θ)]=hlog[p]−tlog[1−p]
极值条件为
∂p∂log[P(x∣θ)]=0
∂p∂log[P(x∣θ)]=ph−1−pt=0
求解上式可以得到p^=h+th
这就是硬币正面出现概率的极大似然估计。将具体的实验结果代入以上公式计算这枚硬币出现的概率为p=3\/10。
贝叶斯估计:
还是回到硬币的问题,我们通过极大似然估计得到硬币出现正面的概率是3\/10,但是生活经验告诉我们硬币正反面出现的概率相等都是1\/2。到底我们应该相信那个结果呢?一种好的方法就是将生活经验和实验数据两个因素综合在一起考虑,贝叶斯估计很好的做到了这一点。
贝叶斯估计可以分为三个步骤来实现。第一步确定先验,第二步写出似然函数并计算后验,第三步根据后验计算贝叶斯估计。下面通过硬币的例子来说明贝叶斯估计的实现步骤。
第一步确定先验,我们使用的先验分布是p∼Beta(α,beta),Beta(α,β)具体是这个样子f(p;α,β)=Γ(α)Γ(β)Γ(α+β)pα−1(1−p)β−1
Beta(α,β)的含义是实验之前已经进行了α+β次扔硬币的实验,出现了α次正面和β次反面。
第二步写出似然函数,并计算后验。
P(θ∣x)∝P(x∣θ)P(θ)
P(x∣θ)P(θ)=ph(1−p)tΓ(α)Γ(β)Γ(α+β)pα−1(1−p)β−1
添加归一化系数(保证∫θP(x∣θ)P(θ)=1)之后可以得到P(θ∣x)=ph(1−p)tΓ(α+h)Γ(β+t)Γ(α+β+h+t)pα+h−1(1−p)β+t−1即P(θ∣x)∼Beta(α+h,β+t)
故可得p^=α+β+h+tα+h
代入具体的数据,α=200,β=200,h=3,t=7计算可得p^=α+β+h+tα+h=410203=0.495
我们的先验知识对结果产生了很大的影响,不添加先验时极大似然估计的结果是p=3\/10,添加先验之后,较少的实验数据只对先验做出微小的调整,贝叶斯估计的结果是𝑝 = 0.495。可以看出样本较少时先验对结果产生重要的影响,但随着样本量的增加先验的影响逐渐减弱,并且贝叶斯估计的结果趋近极大似然估计的结果。这个结论不仅仅对于硬币问题成立,对于所有的贝叶斯估计,随着样本量的增加先验的影响逐渐减弱,贝叶斯估计趋近极大似然估计。这个性质很像人的思维过程,人们总是根据生活现实修正原有想法,原有的想法如果和现实相一致,这些想法将得到加强,否则原有的想法会被削弱, 取而代之的是更加接近事实的想法,总之人们的想法会随着经验的积累更加贴近事实,这就是随着样本量的增加,先验的作用逐渐减弱的过程。
总结:
如果样本量小,先验知识又是可获得的,贝叶斯估计能够将先验知识和样本信息整合起来获得更好的效果。
如果样本量较大,先验产生的作用很小,可以忽略。贝叶斯估计趋近极大似然估计,只反应样本信息。
Code
sklearn中一共有三种模型:MultinomialNB,BernoulliNB和GaussianNB。
用法大致相同,参数alpha=1.0(当多项式和伯努利时候启用的拉普拉斯平滑算子);fit_prior=False(当多项式和伯努利时候启用:是否根据现有数据计算先验概率分布P(Y),如果false,表示启用统一分布;但如果给了class_prior,那么就不会根据现有数据计算先验概率,高斯中是priors参数)。
Reference
Last updated