问题描述
先验概率(p(w_k))与条件概率(p(x|w_k))在贝叶斯决策理论中扮演着关键角色, 但是在现实情况中这两个概率不是直接摆在你面前, 而是需要通过估计计算得到. 通过什么来估计呢, 一堆样本.
问题描述如下:
已知:
- 一个样本集(D)中含有(m)个样本
- 每个样本是一个二元组:((x_i, y_i)),其中:
- (x_i)是样本值, 是一个(d)维列向量
- (y_i)是它真实所属的类别, (y_i in {1, 2, dots, c})
目标: 根据(D)估计(p(w_k), p(x|w_k))的值.
问题分解分析
- (p(w_k))用频率计算就可以了:(p(w_k) = frac {|D_k|}{|D|}), 其中, (D_k)代表类别属于(w_k)的样本集合, 是(D)的一个子集. (|D_k|)代表样本个数.
- so, 还需要计算的就是(p(x|w_k)). 现在换一种方式来表示(p(x|w_k)).
- (p(x|w_k))描述的是(w_k)的样本空间中(x)的概率分布情况. 因为参数估计是贝叶斯学派搞出来的一套方法, 所以会利用先验知识对(x)的分布作出一个假设, 即(x)的概率密度函数: (p(x; heta_k|w_k)). 只要( heta_k)的值已知, (w_k)对应的(x)的概率密度函数也就确定了, (p(x|w_k))也就出来了. 所以最终需要做的是估计每个类别的( heta_k). (注意, ( heta_k)代表所有未知参数, 例如在正态分布里它就包括(mu)和(sigma^2)).
- 那么, 如何估计类别(w_k)对应的未知参数( heta_k)呢? 在文章开头就说了, 通过样本集(D). 再进一步思考, 其实估计(w_k)对应的( heta_k)时只需要(D_k)就行了, 与(D-D_k)无关. 也就是说, 各个类别的未知参数估计是相互独立的. 这也是这类参数估计问题中常用的一个不失普遍性的前提假设. 举一个直观的例子: 假如给你一堆男性女性的身高数据, 让你分别统计男性和女性的身高分布情况, 很显明, 统计男性身高时你不用考虑女性身高的数据, and vice versa.
- 最后, 分析的结论是: 根据(D_k)估计( heta_k); 有了( heta_k)的值后, (p(x|w_k))的值也就有了. 所以呢, 接下的问题就是如何利用(D_k)估计( heta_k).
常用的参数估计方法有两种: 最大似然估计与贝叶斯估计. 这两种方法对参数的作出的假设不一样.
最大似然估计
最大似然估计做出的基本假设是:( heta_k)的值是固定的, 只不过我们不知道而已. 由这些未知但固定的参数确定的概率密度能使当前样本集出现的概率最大化, 也就是说, 未知参数的最优估计值是使已有样本集出现概率最大的值.
先写出似然函数:
[L( heta_k|D_k) = prod_{x in D_k} p(x| heta_k)
]
其中(p(x| heta_k))是概率密度函数.两边同时取对数
[ln L( heta_k|D_k) = sum_{x in D_k} p(x| heta_k)
]
最大化这个log似然函数可以用解析方法, 如求偏导, 也可以用数值方法, 如梯度下降法.
贝叶斯估计
- 与最大似然估计不同, 贝叶斯估计不认为未知参数是固定的, 它们也是随机的, 有自己的先验概率分布规律:(p( heta_k)). 这个概率密度函数是确定且已知的, 包含了我们对( heta_k)的所有先验知识, 没有未知参数在里面.
- 未知参数的取值虽然是一个随机事件, 但当我们进行取样操作时, 这个随机事件已经发生了, 即未知参数的真实值已经确定了, 只是对我们来说仍是未知的.
- 所以我们能做的就是根据(D_k)得到( heta_k)的后验分布, 然后在这个后验分布中取一个最合理的值作为估计值(hat heta_k). 现在就回到我们熟悉的问题上来了: 已知一个随机变量的分布, 现在要预测它未来的取值, 我们能做出的最中肯的选择大概就是以它的期望值作为预测值了吧.
根据贝叶斯公式, ( heta_k)的后验分布为:
[p( heta_k|D_k) = frac {p( heta_k, D_k)}{p(D_k)} = frac {p(D_k| heta_k)p( heta_k)}{int p(D_k| heta_k)p( heta_k) d heta_k}
]
其中, (p( heta_k, D_k) = p( heta_k, x_1, x_2, dots, x_{m_k})与 p(D_k)= p(x_1, x_2, dots, x_{m_k}))都是联合概率密度. 这就是概率密度形式的贝叶斯公式.
得到的(p( heta_k|D_k))是一个关于( heta_k)的函数, 最终的估计值为:
[hat heta_k = E( heta_k|D_k) = int p( heta_k|D_k) heta_k d heta_k
]