贝叶斯公式到拉普拉斯光滑的理解

贝叶斯公式

1.学习感悟:

还没有正式接触概论课,初始机器学习遇到了第一个难题,NB算法中的贝叶斯公式。说一句实话,学问这东西一定要平心静气,自己认为看懂了不管了那才是危险所在。不要自大,不要浮躁气馁,这是我的教训。所以我写这篇文章来认真学习里面的每一个点,包括了公式的由来,我以高中的知识和老师给我的讲解来理解,初学者有错指出来我乐意改正。

2.基础介绍

回到正题,机器学习中我们传入数据。如下面这个:

@relation weather.symbolic

@attribute outlook {sunny, overcast, rainy}
@attribute temperature {hot, mild, cool}
@attribute humidity {high, normal}
@attribute windy {TRUE, FALSE}
@attribute play {yes, no}

@data
sunny,hot,high,FALSE,no
sunny,hot,high,TRUE,no
overcast,hot,high,FALSE,yes
rainy,mild,high,FALSE,yes
rainy,cool,normal,FALSE,yes
rainy,cool,normal,TRUE,no
overcast,cool,normal,TRUE,yes
sunny,mild,high,FALSE,no
sunny,cool,normal,FALSE,yes
rainy,mild,normal,FALSE,yes
sunny,mild,normal,TRUE,yes
overcast,mild,high,TRUE,yes
overcast,hot,normal,FALSE,yes
rainy,mild,high,TRUE,no

我们输入的数据记变量 X\epsilon R^{n} 为一个 n 维向量,输出变量  Y ∈ {C1,C2,...,Ck}表示不同的类别。用例子解释一下,X 表示条件像 outlook,temperature,humidity,windy这四个决策条件。n维意思这样outlook里面包括 sunny, overcast, rainy 这四个具体的天气情况。Y就是 play,我们是否出去玩,表示决策类型yes,no。

我们的预测过程是知道了 X outlook,temperature,humidity,windy 这四种条件情况下去求 Y 每一个决策类别(出去玩yes,还是宅在家里no)的概率,我们自然选择概率最大的哪个嘛。举个例子举个例子,outlook = rainy,temperature = mild,humidity = high,windy = ture.也就是说外面 下雨,温度闷热,还有大风你出去玩吗?结果 Y = no 的概率很大,不出去就在家里。

我们希望给定一个 X 条件的时候求出 Y 的概率,那么这里便有贝叶斯公式。

P(Y = C_{k}|X=x) = \frac{P(Y=C_{k})P(X=x|Y=C_{k})}{P(X=x)} = \frac{P(X=x|Y=C_{k})P(Y=C_{k})}{\sum _{k}P(X=x|Y=C_{k})P(Y=C_{k})}

3.公式推导

在条件概率中有:

P(AB) = P(A)P(B|A)   ①     P(AB) = P(B)P(A|B) 

变形:

P(B|A) = P(AB) / P(A) ②

那么先由②得

意思是在X条件下Y发生的概率。如:outlook = sunny 下的 paly = yes 概率是多少?

P(outlook = sunny) = 5 / 14;

P(paly = yes) = 9 / 14;

那么P(outlook = sunny   play = yes) 表示晴天并且出去玩的概率是多少?数一数,sunny 5天,里面可以出去玩 play = yes 有 2 天,其概率为 2/5.

只差分母了,我们这里需要理解一下,P(X = x)  假设这里的 P( outlook = sunny) 我们要求他的概率怎么求?情况是不是有两种 Y = {yes,no}.

我们数了就知道 :P(outlook = sunny)5/14,

在yes的情况下:P(outlook = sunny | play = yes) = 2/9,

在no的情况下:P(outlook = sunny | paly = no) = 3/5.

P(paly = yes) = 9/14,

P(play = no) = 5/14,

那我们来验证一下:\sum _{k}P(X=x|Y=C_{k})P(Y=C_{k})

2/9 * 9/14 + 3/5 * 5/14 = 5 / 14.验证成功。

所以我们要记得这个公式了:

P(Y = C_{K}|X=x) = \frac{P(X = x|Y=C_{k})P(Y=C_{k})}{\sum _{k}P(X=x|Y=C_{k})P(Y=C_{k})}

拉普拉斯

而对于固定了 X= x,分母值是一样的,因此我们只需要考虑分子。那么我们的预测函数就可以写成:

f(x) = argmax_{k}P(X=x|Y=C_{k})P(Y=C_{k})

这里用到了单调性处理,是机器学习的常用方法,变复杂的数学公式为简单的类似处理,我们最后做出的是抉择,因此只要满足单调一致即可,对数值变化是可忽略的。

1.独立性假设

实际上这样的公式远远不够,我们的训练集中的 X 是一个高维向量,一般存在维数灾难的问题,预知这个分布需要的参数数目也是指数级别的增长。朴素贝叶斯假设,X 的每一维的分布是独立的,就会有下面公式:

P(X=x|Y=C_{k})=\prod _{j=1}^{n}P(X^{(j)} = x^{j}|Y=C_{k})

我们在这里理一下:

我们求:P(Y=C_{k}|X=x)

转到:P(X=x|Y=C_{k})P(Y=C_{k})

高维向量独立性假设又有:

P(Y=C_{k})P(X=x|Y=C_{k})=P(Y=C_{k})\prod _{j=1}^{n}P(X^{(j)} = x^{j}|Y=C_{k})

我们从P( play = yes | outlook = yes ^ temperature = hot ^humidity = high ^ windy = ture)

也就是求 晴天温度高湿度高有风,出去玩的概率,我们因为分母求不出来转而求:

f(x) =argmax_{k}P(X=x|Y=C_{k})P(Y=C_{k})

=argmax_{k}P(Y=C_{k})\prod _{j=1}^{n}P(X_{j}=x_{j}|Y=C_{k})

那么问题就转变求 P(Y=C_{k})P(X_{j} = x_{j}|Y=C_{k})

2.极大似然估计

这是一种从观测数据中估计概率模型参数的方法。它的基本思路:寻找一个参数使得给定的观测数据最大。

\hat{\theta}_{ML}=argmax_{\theta}P(X,Y|\theta)

X和Y就是我们的训练集,数据取值是离散情况,一般都是多项分布,而多项分布只是二项分布的推广(抽取一个作为一类,剩下的作为另一类就是二项分布),那么我们用二项分布来讨论。

我们想知道二项分布的似然函数,不妨设数据分布服从X~B(N,P)。似然函数

L(p;k) = C_{n}^{k}p^{k}(1-p)^{n-k}

  • 实际中 x = k.
  • N 也是 n 代表重复次数样本数据的大小。
  • p 就是事件发生的概率。

对似然函数求极值,我们可以求解其导数等于零。为了方便我们计算它自然对数的导数。

lnL(p;k) = lnC_{n}^{k}p^{k}(1-p)^{n-k}

\frac{\partial }{\partial p} = \frac{k}{p}-\frac{N-k}{1-p}=0

解得:p = \frac{k}{N}

这就是二项分布的极大似然估计结果,概率近似等同于频率这一观点。在这样的背景下我们就可以用极大似然估计来估算朴素贝叶斯方法中我们需要的概率:

P(X^{j}=x^{j}|Y=C_{k})=\frac{\sum_{i=1}^{N}I(x_{i}^{j},y_{i}=c_{k})}{\sum_{i=1}^{N}I(y_{i}=c_{k})}

P(Y=c_{k}) = \frac{\sum_{i=i}^{n}I(y_{i}=c_{k})}{N}

其中 I 表示指标函数,表示满足的内部条件取值为1,不满足取值为0.上面的式子对概率的估计值实际上就是统计其在训练数据中的频数。

但是有问题你们发现没有?如果第一个式子分子或者分母变成 0 ,也就是说该特征的数据在训练集中没有过,对它的概率估计自然会变成零。而这个总式:

argmax_{k}P(Y=C_{k})\prod _{j=1}^{n}P(X_{j}=x_{j}|Y=C_{k})

一项为零,导致整个结果都为零。意思是,如果输入一个训练集没有的特征,对它的任何类别的概率都会变成零,这是一个问题啊!

为了解决这个问题,我们设想一下。一枚不均的硬币,但是你看不出来,现在你要估计它正面朝上的概率。好,那就做实验,你抛出 N 次硬币,有 k 次朝上,那么对其的概率估计就是 P = k / N.而我们1次都没有抛出去,那么估计一下应该是 1 / 2,也就是说我们在没做实验前就会有一个估计的概率即先验概率。进行了若干次试验后我们得出了结果来修正这个概率估计值,这也是解决0概率问题的思想。

3.最大后验概率

在贝叶斯统计的观点下,概率分布的参数也服从另一个分布。在得到任何数据之前,我们设定一个先验概率分布。在有观测数据后,从先验分布由贝叶斯公式计算出一个后验概率分布,而我们对于参数的估计自然是后验概率最大的哪个。

形式化来说,假设我们的模型参数为 θ,先验概率分布为 π(θ),在给定参数θ的前提下,观测数据的概率分布为 f(x|θ),也就是似然函数。那么由贝叶斯公式可得:

f(x|\theta)=\frac{f(x|\theta)\pi(\theta)}{\int f(x|\theta)\pi(\theta)d\theta}

于是我们的最大后验概率估计值是:(取分子)

\hat{\theta}_{MAP}=argmax_{\theta}f(x|\theta)\pi(\theta)

与上面的极大似然估计作比较我们可以发现,当π(θ)是均匀分布时,最大后验概率也就是极大似然估计值。

4.共轭先验

要使用共轭先验概率估计,我们自然首先选取一个先验分布。先验分布的选择通常需要一定的技巧性。有时候,我们希望后验分布和先验分布属于相同的分布族,这样是我们在很多时候能够解析处理。这种先验分布我们叫做共轭先验。

我们依然用二项分布举例。二项分布的共轭是beta分布。beta分布有 α 和 β 两个参数来刻画,一般记作 B(α,β),其密度函数为:

f(X:\alpha,\beta)=\frac{x^{\alpha-1}(1-x)^{\beta-1}}{\int_{0}^{1}x^{\alpha-1}(1-x)^{\beta-1}dx}=\frac{1}{B(\alpha,\beta)}x^{\alpha-1}(1-x)^{\beta-1}

B(α,β)是beta函数。继续给出一些Beta分布的性质,假设X~B(α,β),那么:

EX = \frac{\alpha}{\alpha+\beta}

argmax_{x}f(x:\alpha,\beta) = \frac{\alpha-1}{\alpha+\beta-2}

有了这个基础之后我们就可以回过头来对二项分布的参数进行最大后验的估计。我们知道二项分布的共轭先验是beta分布,仍有两个参数需要被确定。如果我们对 θ 的先验估计是 \theta_{0},那么我们应该选择使得\theta_{0}是其众数的哪个分布。即:

\frac{\alpha-1}{\alpha+\beta-2} = \theta_{0}

这是还是解不出两个未知数,α和β。我们需要引入另一个变量λ,在令:

α = λ\theta_{0} + 1,β = λ(1-\theta_{0} )+1

于是

\frac{\alpha-1}{\alpha+\beta-2}=\frac{\lambda\theta_{0}}{\lambda}=\theta_{0}

那么按照文章前面的描述,我们计算后验概率:

f(\theta|x)=\frac{C_{N}^{k}\theta^{k}(1-\theta)^{N-k}\theta^{\lambda\theta_0}(1-\theta)^{\lambda(1-\theta_0)}}{\int C_{N}^{k}\theta^{k}(1-\theta)^{N-k}\theta^{\lambda\theta_0}(1-\theta)^{\lambda(1-\theta_0)}d\theta}

 =\frac{1}{B(k+\lambda\theta_0+1,N-k+\lambda(1-\theta_0)+1)}\theta^{k+\lambda\theta_0}(1-\theta)^{N-k+\lambda(1-\theta_0)}

于是:

\hat{\theta}_{MAP}=argmax_{\theta}f(\theta|x)=\frac{k+\lambda\theta_0}{N+\lambda}

这就是和拉普拉斯平滑很像的表达式。再回到朴素贝叶斯,首先考虑P(Y=Ck).由于有k个类别,于是每一个类别的先验概率应该是 1/k。那么:

P(Y=C_{k})=\frac{\sum_{i=1}^NI(y_i=c_k)+\frac{\lambda}{K}}{N+\lambda}=\frac{\sum_{i=1}^NI(y_i=c_k)+\lambda}{N+\hat{\lambda}K}

其中\hat{\lambda}=λ / K 的变换算是为了凑出我们熟悉的拉普拉斯形式。

接下来考虑P(X^j=x^j|Y=C_k),如果对于X^jS_j种,那么

P(X^{(j)}=x^{(j)}|Y=C_k)=\frac{\sum_{i=1}^{N}I(x_i^{(j)},y_i=c_k)+\lambda}{\sum_{i=1}^NI(y_i=c_k)+S_j\lambda}

满足了没项大鱼0且和为1.

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值