Probability
先验概率、后验概率、似然概率
在学习朴素贝叶斯(Naive Bayes)的时候,总是会混淆先验概率、后验概率和似然概率。通过这篇博客,我将对这三个概率的定义进行详细阐释,以更好地区分它们。
1、先验概率(prior probability)
百度百科:先验概率(prior probability)是指根据以往经验和分析得到的概率,如全概率公式,它往往作为“由因求果”问题中的“因”出现的概率。
维基百科:在贝叶斯统计中,某一不确定量p的先验概率(prior probability)分布是在考虑“观测数据”前,能表达p不确定性的概率分布。它旨在描述这个不确定量的不确定程度,而不是这个不确定量的随机性。这个不确定量可以是一个参数,或者是一个隐含变量(英语:latent variable)。
我们可以发现这两个定义有一个共同点,即先验概率是不依靠观测数据的概率分布,也就是与其他因素独立的分布。在朴素贝叶斯中,类别
2、后验概率(posterior probability)
百度百科:后验概率是指在得到“结果”的信息后重新修正的概率,是“执果寻因”问题中的”果”。
维基百科:在贝叶斯统计中,一个随机事件或者一个不确定事件的后验概率(posterior probability)是在考虑和给出相关证据或数据后所得到的条件概率。同样,后验概率分布是一个未知量(视为随机变量)基于试验和调查后得到的概率分布。“后验”在本文中代表考虑了被测试事件的相关证据。
在朴素贝叶斯中,后验概率指给定数据
先验概率与后验概率有不可分割的联系,后验概率的计算要以先验概率为基础。事情还没有发生,要求这件事情发生的可能性的大小,是先验概率。事情已经发生,要求这件事情发生的原因是由某个因素引起的可能性的大小,是后验概率。
3、似然概率(likelihood)
百度百科:统计学中,似然函数是一种关于统计模型参数的函数。给定输出
维基百科:在数理统计学中,似然函数(英语:likelihood function)是一种关于统计模型中的参数的函数,表示模型参数中的似然性(英语:likelihood)。
似然概率其实很好理解,就是说我们现在有一堆数据,现在需要构建一组参数对这些数据建模,以使得模型能够尽可能地拟合这些数据。所以我们要做的就是从很多组参数中选出一组使得模型对数据的拟合程度最高,所以也常常说最大似然概率。
注意“似然”与“概率”意思相近,都是指某种事件发生的可能性,但是在统计学中,“似然”和“概率”又有明确的区分:
-
“概率”描述了给定模型参数后,描述结果的合理性,而不涉及任何观察到的数据
-
“似然”描述了给定了特定观测值后,描述模型参数是否合理
举个栗子,抛一枚均匀的硬币,拋20次,问15次拋得正面的可能性有多大?这里的可能性就是“概率”;而拋一枚硬币,拋20次,结果15次正面向上,问其为均匀的可能性?这里的可能性就是“似然”。
4、先验、后验概率与似然之间的关系
-
先验概率:
-
后验概率:
-
似然:
存在的关系
一般而言数据X的分布是已知的,因此
此外,当参数
5、EM算法
import numpy as np
### EM算法过程函数定义
def em(data, thetas, max_iter=30, eps=1e-3):
'''
输入:
data:观测数据
thetas:初始化的估计参数值
max_iter:最大迭代次数
eps:收敛阈值
输出:
thetas:估计参数
'''
# 初始化似然函数值
ll_old = -np.infty
for i in range(max_iter):
### E步:求隐变量分布
# 对数似然 [coin_num, exp_num], [2, 5]
log_like = np.array([np.sum(data * np.log(theta), axis=1) for theta in thetas])
# 似然 [coin_num, exp_num], [2, 5]
like = np.exp(log_like)
# 求隐变量分布 [coin_num, exp_num], [2, 5] Q_i
ws = like/like.sum(0)
# 概率加权 [2, 5, 2]
vs = np.array([w[:, None] * data for w in ws])
### M步:更新参数值 [2, 2] [[A_+,A_-],[B_+,B_-]]
thetas = np.array([v.sum(0)/v.sum() for v in vs])
# 更新似然函数
ll_new = np.sum([w*l for w, l in zip(ws, log_like)]) # 计算似然函数 \hat(theta):=\arg,\max_{\theta}\sum_{i=1}^m\sum_{z^{(i)}Q_i(z^{(i)})\log{P(x_i,z^{(i)}|\theta)}}
print("Iteration: %d" % (i+1))
print("theta_B = %.2f, theta_C = %.2f, ll = %.2f"
% (thetas[0,0], thetas[1, 0], ll_new))
# 满足迭代条件即退出迭代
if np.abs(ll_new - ll_old) < eps:
break
ll_old = ll_new
return thetas
if __name__ == "__main__":
# 观测数据,5次独立试验,每次试验10次抛掷的正反次数
# 比如第一次试验为5次正面5次反面
observed_data = np.array([(5,5), (9,1), (8,2), (4,6), (7,3)])
# 初始化参数值,即硬币B的正面概率为0.6,硬币C的正面概率为0.5
thetas = np.array([[0.6, 0.4], [0.5, 0.5]])
# thetas = em(observed_data, thetas, max_iter=30, eps=1e-3)
thetas = em(observed_data, thetas, max_iter=30, eps=1e-4)
print(thetas)
EM算法详解+通俗例子理解_呆呆象呆呆的博客-CSDN博客_em算法实例
https://zhuanlan.zhihu.com/p/36331115
6、ELBO
1、问题定义
给定一个observation variable
2、High-level Introduction of VI Solution
-
后验概率直接求解不可行
-
马尔科夫蒙特卡洛求解精确但是计算慢
-
以优化的方式用
近似 :首先在参数z上具体化一个较好的分布集合 ,之后从 中找到一个好的 近似 。 -
Variational Bayes(VB),L是KL散度:
如果我们能找到这样的分布
3、ELBO
当我们取L为KL divergence(经常用于度量两个概率分布之间的距离)的时候,此问题变成Variational Bayes (VB) 问题。(划重点,我们的目标变成了最小化以下KL散度。)
展开KL项,
(题外话,KL散度数值上是always大于等于0的,那么在没有其他约束的条件下,
但是再这个优化目标中计算
这里关于
第二项可以用条件概率公式继续展开:
此时,变成了三项,观察各项,发现第三项里面
此时,我们把前两项称之为-ELBO
(Evidence Lower Bound)。(注意这里是负的ELBO)
那么关于
实际计算中,ELBO可以表示成以下形式进行计算:
我们再观察
因为等式左边是常数,我们的目标又是最小化KL项,那么我们要做的其实就是最大化
到此,我们可以总结说:想要找到
至于为什么叫Evidence Lower Bound,,因为KL散度always大于等于0,所以有以下不等式
ELBO其实就是数据Evidence
7、多变量条件概率公式(多变量贝叶斯公式)
文章出处登录后可见!