贝叶斯推断
贝叶斯定理:通过观察到的数据 D D ,把先验概率转化为后验概率 p(θ∣D) p ( θ ∣ D )
显然,分母是一个归一化常数。故有 p(θ∣D)∝p(D∣θ)p(θ) p ( θ ∣ D ) ∝ p ( D ∣ θ ) p ( θ ) 即 后验∝似然×先验 后 验 ∝ 似 然 × 先 验 。
贝叶斯线性回归
问题是这样的,不能够一次性接收到整个数据集,而是不断接收到小的数据集 Di,i=1,2,...,n D i , i = 1 , 2 , . . . , n ,同时由于存储的限制不能存储已经接收到的所有数据集,每次可以处理的数据仅为 Di D i 。这就导致不能对所有数据做线性回归,但是可以通过贝叶斯线性回归达到同样的效果。
第 i i 个数据集 Di D i 中有 m m 个训练样本,构成
为了确定模型参数向量
θ
θ
的后验分布
假设其先验分布
其中
μ0
μ
0
,
Λ0
Λ
0
分别是先验分布的均值向量和协方差矩阵。通过贝叶斯回归得到的目标为
θ
θ
的期望。
模型参数的后验分布:
p(θ∣X(i),y(i))∝exp(−12(θ−μi)TΛ−1i(θ−μi)) p ( θ ∣ X ( i ) , y ( i ) ) ∝ e x p ( − 1 2 ( θ − μ i ) T Λ i − 1 ( θ − μ i ) )
缺点:
1 参数先验分布的不同假设形式,可能会带来计算上的不便。
2 参数先验分布的假设有偏,对于小数据会有较大的影响。
解决方法:
1 参数的先验分布假设为数据分布假设的共轭先验
共轭先验:对于一个给定的概率分布
p(x∣∣w)
p
(
x
∣∣
w
)
,能够寻找一个先验
p(w)
p
(
w
)
能够与似然函数共轭,从而后验分布的函数形式与先验分布相同。
2 合理初始化,迭代求解
对于接收到的第1个数据集有:
这里根据极大似然估计得到的解 θ=(X(1)TX(1))−1X(1)Ty(1) θ = ( X ( 1 ) T X ( 1 ) ) − 1 X ( 1 ) T y ( 1 ) ,所以假设 Λ−10=O Λ 0 − 1 = O , 此时极大似然的解和贝叶斯回归的参数期望一致。
对于接收到的第 i i 个数据集,将第 i−1 i − 1 个数据集计算得到的参数后验作为先验,不断迭代。
具体算法
输入:
D1,D2,D3,...,Dn
D
1
,
D
2
,
D
3
,
.
.
.
,
D
n
其中
Di=(X(i),y(i))
D
i
=
(
X
(
i
)
,
y
(
i
)
)
输出:
μn
μ
n
初始化
while
i<=n
i
<=
n
代码:
def BayesLR(path):
la=10
mu=np.mat(np.zeros(3)).T
gama=np.mat(np.eye(3)*la)
for i in range(n):
fileName = path + "%d.csv" % i
x0,y0 = loadDataFromFile(fileName)#从文件中加载数据
X, y = data2Mat(x0,y0)#将数据转换成np.mat的格式
mu0 = mu
gama0 = gama
if i==1:
gama = (X.T*X).I
mu = gama*(X.T*y)
else:
gama = (X.T*X+gama0.I).I
mu = gama*(X.T*y+gama0.I*mu0)
return np.array(mu)
最大后验估计(MAP)
MLE求的是找出一组能够使似然函数最大的参数,即。 现在问题稍微复杂一点点,假如这个参数
μ
μ
有一个先验概率呢?比如说,在上面抛硬币的例子,假如我们的经验告诉我们,硬币一般都是匀称的,也就是的可能性最大,
μ=0.2
μ
=
0.2
的可能性比较小,那么参数该怎么估计呢?这就是MAP要考虑的问题。 MAP优化的是一个后验概率,即给定了观测值后使概率最大:
把上式根据贝叶斯公式展开: