朴素贝叶斯法的参数估计理论

本文深入探讨了贝叶斯估计与最大似然估计的原理及应用,对比了两者在参数估计上的区别,特别是在处理概率为0的情况时,贝叶斯估计的优势。文章详细解释了如何使用两种方法进行参数估计,包括正态分布下的具体实例。
Python3.8

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

贝叶斯的参数估计

朴素贝叶斯方法需要知道先验概率,此时
P(Yi)P(Y_i)P(Yi)是先验概率,P(X∣Yi)P(X|Y_i)P(XYi)是类的条件概率密度。
P(Yi)P(Y_i)P(Yi)容易得到,对类的条件密度的估计存在两个问题:1,实际的样本对于类条件概率的估计来说,太少了;2,有时特征空间的维度太高,计算复杂度太高。
为了降低估计难度,我们可以将类条件密度参数化,比如用正态分布来估计P(X∣Yi)P(X|Y_i)P(XYi)(极大似然)。

再来一遍:

根据贝叶斯公式,利用先验概率和类条件概率求后验概率:
  P(wi∣x)=p(x∣wi)P(wi)∑j=12p(x∣wj)P(wj)P(w_i|x)=\dfrac{p(x|w_i)P(w_i)}{\sum_{j=1}^{2}p(x|w_j)P(w_j)}P(wix)=j=12p(xwj)P(wj)p(xwi)P(wi)
其中,p(x∣wi)p(x|w_i)p(xwi)就是类条件概率密度,其中x是个特征向量x=[x1,x2,...,xd]Tx=[x_1,x_2,...,x_d]^Tx=[x1,x2,...,xd]T

1,这个类条件概率密度我们总是假设它已知,然而真实情况是,它并非已知,而且貌似没那么好估计,因为特征向量包含多的特征,这就导致类条件概率密度函数中的参数个数为指数级别,很难进行估计。
2,实际中,假设特征向量x的第j个特征Xj可取值有Sj个,那么参数个数为 c∏j=1dSjc\prod_{j=1}^d S_jcj=1dSj

在参数估计里面,主要有最大似然估计和贝叶斯估计。

极大似然估计法(Maximum Likehood Estimation)

极大似然估计法认为参数是固有的,但是可能由于一些外界噪声的干扰,使数据看起来不是完全由参数决定的。没关系,数学家们觉得,虽然有误差存在,但只要让在这个数据给定的情况下,找到一个概率最大的参数就可以了。那问题其实就变成了一个条件概率最大的求解,即求使得p(θ∣D)p(\theta|D)p(θD)最大的参数θ\thetaθ
arg⁡max⁡θ p(θ∣D)\mathop{\arg\max}_{\theta}\,p(\theta|D)argmaxθp(θD)

根据条件概率公式:p(θ∣D)=p(D∣θ)p(θ)p(D)p(\theta|D)=\dfrac{p(D|\theta)p(\theta)}{p(D)}p(θD)=p(D)p(Dθ)p(θ)

因为我们在极大似然估计中假设 θ 是确定的,所以p(θ)就是一个常数。p(D) 同样是根据已有的数据得到的,也是确定的,或者我们可以把其看作是对整个概率的一个归一化因子。这时候,求解上面的公式arg⁡max⁡θ p(θ∣D)\mathop{\arg\max}_{\theta}\,p(\theta|D)argmaxθp(θD)就变成了求解:
    arg⁡max⁡θ p(D∣θ)\mathop{\arg\max}_{\theta}\, p(D|\theta)argmaxθp(Dθ)
其中,p(D∣θ)p(D|\theta)p(Dθ)就是似然函数,我们要做的就是求一个是似然最大的参数。
求解这个问题,需要假设我们的数据是相互独立的,那么对数据的抽样集合D={x1,x2,x3,...,xn}D=\{x_1,x_2,x_3,...,x_n\}D={x1,x2,x3,...,xn},有:
     p(D∣θ)=∏i=1np(xi∣θ)p(D|\theta)=\prod_{i=1}^{n}p(x_i|\theta)p(Dθ)=i=1np(xiθ)
取对数、求导取极值点,就得到了要估计的参数。

假设有一组独立同分布的随机变量X,给定一个概率分布D,假设其概率密度函数为f,以及一个分布的参数θ,从这组样本中抽出x1,x2,...,xnx_1,x_2,...,x_nx1,x2,...,xn,那么通过参数θ\thetaθ的模型 f 生成上面样本的概率为:
    f(x1,x2,⋯ ,xn∣θ)=f(x1∣θ)×f(x2∣θ)×⋯f(xn∣θ)f(x_1,x_2,\cdots,x_n|\theta) = f(x_1|\theta) \times f(x_2|\theta) \times \cdots f(x_n|\theta)f(x1,x2,,xnθ)=f(x1θ)×f(x2θ)×f(xnθ)

最大似然估计会寻找关于θ 的最可能的值,即在所有可能的 θ 取值中,寻找一个值使这个采样的“可能性”最大。
为是”模型已定,参数未知”,此时我们是根据样本采样求估计参数θ\thetaθ,所以定义似然函数:
     L(θ∣x1,x2,⋯ ,xn)=f(x1,x2,⋯ ,xn∣θ)=∏f(xi∣θ)L(\theta|x_1,x_2,\cdots,x_n)=f(x_1,x_2,\cdots,x_n|\theta) = \prod f(x_i | \theta)L(θx1,x2,,xn)=f(x1,x2,,xnθ)=f(xiθ)
由于概率密度f(xi∣θ)f(x_i|\theta)f(xiθ)一般比较小,而n往往比较大,连乘容易造成浮点数下溢,所以我们用对数似然函数:
    ln⁡L(θ∣x1,x2,⋯ ,xn)=∑i=1nf(xi∣θ)\ln L(\theta|x_1,x_2,\cdots,x_n) = \sum\limits_{i=1}^n f(x_i | \theta)lnL(θx1,x2,,xn)=i=1nf(xiθ)
并且令:
    l^=1nln⁡L\widehat l= \dfrac{1}{n} \ln Ll=n1lnL

那么参数θ\thetaθ的估计值为:
    θ^MLE=arg⁡max⁡θl^(θ∣x1,x2,⋯ ,xn)\widehat{\theta}_{MLE} =\mathop{\arg\max}_{\theta} \widehat l(\theta|x_1,x_2,\cdots,x_n)θMLE=argmaxθl(θx1,x2,,xn)

举个例子
http://noahsnail.com/2018/05/17/

假设样本服从正态分布N∼(μ,σ2)N\sim(\mu,\sigma^2)N(μ,σ2),则似然函数:
L(θ∣D)=∏i=0np(xi∣θ)≃L(μ,σ2)=∏i=0n12πσe−(xi−μ)22σ2L(\theta|D)=\prod_{i=0}^{n}p(x_i|\theta)\simeq L(\mu,\sigma^2)=\prod_{i=0}^n \dfrac {1} {\sqrt{2\pi} \sigma}e^{-\frac {(x_i-\mu)^2} {2\sigma^2}}L(θD)=i=0np(xiθ)L(μ,σ2)=i=0n2πσ1e2σ2(xiμ)2

对其取对数得:
lnL(μ,σ2)=−n2ln(2π)−n2ln(σ2)−12σ2∑i=0n(xi−μ)2lnL(\mu,\sigma^2)=-\frac {n} {2}ln(2\pi) - \frac {n} {2} ln(\sigma^2) - \frac {1} {2\sigma^2} \sum_{i=0}^n(x_i-\mu)^2lnL(μ,σ2)=2nln(2π)2nln(σ2)2σ21i=0n(xiμ)2

分别对μ ,θ2\mu\, ,\quad \theta^2μ,θ2求偏导,并令偏导数为0,得:
{∂lnL(μ,σ2)∂μ=1σ2∑i=0n(xi−μ)=0∂lnL(μ,σ2)∂σ2=−n2σ2+12σ4∑i=0n(xi−μ)2=0\begin{cases} \dfrac {\partial lnL(\mu,\sigma^2)} {\partial \mu}= \dfrac {1} {\sigma^2} \sum_{i=0}^n(x_i-\mu) =0 \\ \dfrac {\partial lnL(\mu,\sigma^2)} {\partial \sigma^2}= -\dfrac {n} {2\sigma^2} + \dfrac {1} {2\sigma^4}\sum_{i=0}^n(x_i-\mu)^2 =0 \end{cases}μlnL(μ,σ2)=σ21i=0n(xiμ)=0σ2lnL(μ,σ2)=2σ2n+2σ41i=0n(xiμ)2=0

解得:
{μ^=1n∑i=0nxi=xˉσ^2=1n∑i=0n(xi−xˉ)2\begin{cases} \hat{\mu}= \frac {1} {n} \sum_{i=0}^nx_i=\bar{x}\\ \hat{\sigma}^2 = \frac {1} {n} \sum_{i=0}^n(x_i-\bar{x})^2 \end{cases}{μ^=n1i=0nxi=xˉσ^2=n1i=0n(xixˉ)2

μ^,σ^2\hat{\mu},\hat{\sigma}^2μ^σ^2就是正态分布中μ, θ2\mu ,\,\theta^2μ,θ2的最大似然估计值。

贝叶斯估计法

用极大似然估计可能会出现所要估计的概率值为0的情况。 这时会影响到后验概率的计算结果, 使分类产生偏差。 解决这一问题的方法是采用贝叶斯估计。

最大似然估计和贝叶斯估计的区别

  • 最大似然估计要估计的参数θ被当作是固定形式的一个未知变量,然后我们结合真实数据通过最大化似然函数来求解这个固定形式的未知变量。

  • 贝叶斯估计则是将参数视为是有某种已知先验分布的随机变量,意思是这个参数不是一个固定的未知数,而是符合一定先验分布如:随机变量θ符合正态分布等。那么在贝叶斯估计中除了类条件概率密度p(x∣ω)p(x|\omega)p(xω)符合一定的先验分布,参数θ也符合一定的先验分布。我们通过贝叶斯规则将参数的先验分布转化成后验分布进行求解

在最大似然估计中θ\thetaθ被假定为固定值,而贝叶斯估计中认为θ\thetaθ是随机变量。

设样本集合为D,目标是计算P(ωi∣x,D)P(\omega_i|x,D)P(ωix,D),根据贝叶斯公式:

    P(ωi∣x,D)=P(x∣ωi,D)P(ωi∣D)∑j=1cP(x∣ωj,D)P(ωj∣D)P(\omega_i|x,D) = \dfrac{P(x|\omega_i,D)P(\omega_i|D)}{\sum_{j=1}^{c}P(x|\omega_j,D)P(\omega_j|D)}P(ωix,D)=j=1cP(xωj,D)P(ωjD)P(xωi,D)P(ωiD)

1,由于先验概率通常可以事先获得,所以:P(ωi)=P(ωi∣D)P(\omega_i)=P(\omega_i|D)P(ωi)=P(ωiD)
2,每个样本只依赖于所属的类(类之间也是相互独立的),所以:P(x∣ωi,D)=P(x∣ωi,Di)P(x|\omega_i,D)=P(x|\omega_i,D_i)P(xωi,D)=P(xωi,Di),于是:
上式变为:
     P(ωi∣x,D)=P(x∣ωi,Di)⋅P(ωi)∑j=1cP(x∣ωj,Dj)⋅P(ωj)P(\omega_i|x,D) = \dfrac{P(x|\omega_i,D_i)\cdot P(\omega_i)}{\sum_{j=1}^{c}P(x|\omega_j,D_j)\cdot P(\omega_j)}P(ωix,D)=j=1cP(xωj,Dj)P(ωj)P(xωi,Di)P(ωi)

只要在每类中,独立计算P(x∣ωi,Di)P(x|\omega_i,D_i)P(xωi,Di),就可以确定X的类别。
由于类之间相互独立,所以我们不用区分类了,P(x∣ωi,Di)=P(x∣D)P(x|\omega_i,D_i)=P(x|D)P(xωi,Di)=P(xD)

因此,核心工作就是要估计P(x∣D)P(x|D)P(xD)

怎样估计P(x∣D)P(x|D)P(xD)呢?

根据条件概率公式p(x,θ∣D)=p(x∣θ,D)p(θ∣D)p(x,\theta|D)=p(x|\theta,D)p(\theta|D)p(x,θD)=p(xθ,D)p(θD)

     p(x∣D)=∫θp(x,θ∣D)dθ=∫θp(x∣θ,D)p(θ∣D)dθp(x|D)=\int_{\theta}p(x,\theta|D)d\theta=\int_{\theta}p(x|\theta,D)p(\theta|D)d\thetap(xD)=θp(x,θD)dθ=θp(xθ,D)p(θD)dθ

又因为对数据D中的x而言,θ\thetaθθ,D\theta,Dθ,D是同一条件,有p(x∣θ,D)=p(x∣θ)p(x|\theta,D)=p(x|\theta)p(xθ,D)=p(xθ)
所以
     p(x∣D)=∫θp(x,θ∣D)dθ=∫θp(x∣θ,D)p(θ∣D)dθ=∫θp(x∣θ)p(θ∣D)dθp(x|D)=\int_{\theta}p(x,\theta|D)d\theta=\int_{\theta}p(x|\theta,D)p(\theta|D)d\theta=\int_{\theta}p(x|\theta)p(\theta|D)d\thetap(xD)=θp(x,θD)dθ=θp(xθ,D)p(θD)dθ=θp(xθ)p(θD)dθ

注意到: ∫θp(x∣θ)p(θ∣D)dθ\int_{\theta}p(x|\theta)p(\theta|D)d\thetaθp(xθ)p(θD)dθ 如果P(θ∣D)P(\theta|D)P(θD)在某个θ^\hat{\theta}θ^附近有非常显著的尖峰,则
         p(x∣D)≃p(x∣θ^)p(x|D)\simeq p(x|\hat{\theta})p(xD)p(xθ^)
即:
如果条件概率有一个已知的形式,则利用已有的训练样本,就能通过p(θ∣D)p(\theta|D)p(θD)p(x∣D)p(x|D)p(xD)进行估计。

贝叶斯估计过程,就是:
(1)p(x∣D)=∫θp(x∣θ)p(θ∣D)dθp(x|D)=\int_{\theta}p(x|\theta)p(\theta|D)d\thetap(xD)=θp(xθ)p(θD)dθ

(2)p(θ∣D)=p(D∣θ)p(θ)p(D)=p(D∣θ)p(θ)∫θp(D∣θ)p(θ)dθp(\theta|D)=\dfrac{p(D|\theta)p(\theta)}{p(D)}=\dfrac{p(D|\theta)p(\theta)}{\int_{\theta}p(D|\theta)p(\theta)d\theta}p(θD)=p(D)p(Dθ)p(θ)=θp(Dθ)p(θ)dθp(Dθ)p(θ)

其中,p(D∣θ)=∏i=1np(xi∣θ)p(D|\theta)=\prod_{i=1}^{n}p(x_i|\theta)p(Dθ)=i=1np(xiθ)


Ref:
https://blog.csdn.net/liu1194397014/article/details/52766760

您可能感兴趣的与本文相关的镜像

Python3.8

Python3.8

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值