贝叶斯线性回归——推导及实现
2017-07-18 10:46
169 查看
推导
算法
代码
p(θ∣∣D)=p(D∣∣θ)p(θ)∫p(D∣∣θ)p(θ)dθ=p(D∣∣θ)p(θ)p(D)
显然,分母是一个归一化常数,用来确保右侧的后验概率分布是一个合理的概率密度。故有p(θ∣∣D)∝p(D∣∣θ)p(θ) 即后验 ∝ 似然 ×先验 。
第 i 个数据集 Di 中有 m 个训练样本,构成 (X(i),y(i))
p(y(i)∣∣X(i),θ)=N(y(i);X(i)θ,I)∝exp(−12(y(i)−X(i)θ)T(y(i)−X(i)θ))
为了确定模型参数向量 θ 的后验分布
假设其先验分布 p(θ)=N(θ;μ0,Λ0)∝exp(−12(θ−μ0)TΛ−10(θ−μ0))
其中 μ0,Λ0 分别是先验分布的均值向量和协方差矩阵。通过贝叶斯回归得到的目标为θ 的期望。
模型参数的后验分布:
p(θ∣∣X(i),y(i))∝p(y(i)∣∣X(i),θ)p(θ)∝exp(−12(y(i)−X(i)θ)T(y(i)−X(i)θ))exp(−12(θ−μ0)TΛ−10(θ−μ0))∝exp(−12(−2y(i)TX(i)θ+θTX(i)TX(i)θ+θTΛ−10θ−2μT0Λ−10θ))
Λi=(X(i)TX(i)+Λ−10)−1,μi=Λi(X(i)Ty(i)+Λ−10μ0)
p(θ∣∣X(i),y(i))∝exp(−12(θ−μi)TΛ−1i(θ−μi))
2 参数先验分布的假设有偏,对于小数据会有较大的影响。
共轭先验:对于一个给定的概率分布p(x∣∣w),能够寻找一个先验 p(w) 能够与似然函数共轭,从而后验分布的函数形式与先验分布相同。
Bern(x∣∣μ)=μx(1−μ)1−xBeta(μ∣∣a,b)=Γ(a+b)Γ(a)Γ(b)μa−1(1−μ)b−1
N(x∣∣m,Λ)N(m∣∣μ,Λ′)W(Λ∣∣W,v)=12π|Λ|exp(−12(x−m)TΛ−1(x−m))=12π|Λ′|exp(−12(m−μ)TΛ′−1(m−μ))=B|Λ|v−D−12exp(−12Tr(W−1Λ))
2 合理初始化,迭代求解
对于接收到的第1个数据集有:
Λ1=(X(1)TX(1)+Λ−10)−1,μ1=Λ1(X(1)Ty(1)+Λ−10μ0)
p(θ∣∣X(1),y(1))∝exp(−12(θ−μ1)TΛ−11(θ−μ1))
这里根据极大似然估计得到的解θ=(X(1)TX(1))−1X(1)Ty(1),所以假设Λ−10=O, 此时极大似然的解和贝叶斯回归的参数期望一致。
对于接收到的第i 个数据集Di (i>1),将第i−1 个数据集计算得到的参数后验作为先验,不断迭代。
Λi=(X(i)TX(i)+Λ−1i−1)−1,μi=Λi(X(i)Ty(i)+Λ−1i−1μi−1)
p(θ∣∣X(i),y(i))∝exp(−12(θ−μi)TΛ−1i(θ−μi))
输出: μn
初始化
Λ1=(X(1)TX(1))−1μ1=Λ1(X(1)Ty(1))i+=1
while i<=n
Λi=(X(i)TX(i)+Λ−1i−1)−1μi=Λi(X(i)Ty(i)+Λ−1i−1μi−1)i+=1
算法
代码
理论推导
贝叶斯推断
贝叶斯定理:通过观察到的数据D,把先验概率p(θ)转化为后验概率p(θ∣∣D)p(θ∣∣D)=p(D∣∣θ)p(θ)∫p(D∣∣θ)p(θ)dθ=p(D∣∣θ)p(θ)p(D)
显然,分母是一个归一化常数,用来确保右侧的后验概率分布是一个合理的概率密度。故有p(θ∣∣D)∝p(D∣∣θ)p(θ) 即后验 ∝ 似然 ×先验 。
贝叶斯线性回归
问题是这样的,不能够一次性接收到整个数据集,而是不断接收到小的数据集Di,i=1,2,...,n,同时由于存储的限制不能存储已经接收到的所有数据集,每次可以处理的数据仅为Di。这就导致不能对所有数据做线性回归,但是可以通过贝叶斯线性回归达到同样的效果。第 i 个数据集 Di 中有 m 个训练样本,构成 (X(i),y(i))
p(y(i)∣∣X(i),θ)=N(y(i);X(i)θ,I)∝exp(−12(y(i)−X(i)θ)T(y(i)−X(i)θ))
为了确定模型参数向量 θ 的后验分布
假设其先验分布 p(θ)=N(θ;μ0,Λ0)∝exp(−12(θ−μ0)TΛ−10(θ−μ0))
其中 μ0,Λ0 分别是先验分布的均值向量和协方差矩阵。通过贝叶斯回归得到的目标为θ 的期望。
模型参数的后验分布:
p(θ∣∣X(i),y(i))∝p(y(i)∣∣X(i),θ)p(θ)∝exp(−12(y(i)−X(i)θ)T(y(i)−X(i)θ))exp(−12(θ−μ0)TΛ−10(θ−μ0))∝exp(−12(−2y(i)TX(i)θ+θTX(i)TX(i)θ+θTΛ−10θ−2μT0Λ−10θ))
Λi=(X(i)TX(i)+Λ−10)−1,μi=Λi(X(i)Ty(i)+Λ−10μ0)
p(θ∣∣X(i),y(i))∝exp(−12(θ−μi)TΛ−1i(θ−μi))
缺点:
1 参数先验分布的不同假设形式,可能会带来计算上的不便。2 参数先验分布的假设有偏,对于小数据会有较大的影响。
解决方法:
1 参数的先验分布假设为数据分布假设的共轭先验共轭先验:对于一个给定的概率分布p(x∣∣w),能够寻找一个先验 p(w) 能够与似然函数共轭,从而后验分布的函数形式与先验分布相同。
Bern(x∣∣μ)=μx(1−μ)1−xBeta(μ∣∣a,b)=Γ(a+b)Γ(a)Γ(b)μa−1(1−μ)b−1
N(x∣∣m,Λ)N(m∣∣μ,Λ′)W(Λ∣∣W,v)=12π|Λ|exp(−12(x−m)TΛ−1(x−m))=12π|Λ′|exp(−12(m−μ)TΛ′−1(m−μ))=B|Λ|v−D−12exp(−12Tr(W−1Λ))
2 合理初始化,迭代求解
对于接收到的第1个数据集有:
Λ1=(X(1)TX(1)+Λ−10)−1,μ1=Λ1(X(1)Ty(1)+Λ−10μ0)
p(θ∣∣X(1),y(1))∝exp(−12(θ−μ1)TΛ−11(θ−μ1))
这里根据极大似然估计得到的解θ=(X(1)TX(1))−1X(1)Ty(1),所以假设Λ−10=O, 此时极大似然的解和贝叶斯回归的参数期望一致。
对于接收到的第i 个数据集Di (i>1),将第i−1 个数据集计算得到的参数后验作为先验,不断迭代。
Λi=(X(i)TX(i)+Λ−1i−1)−1,μi=Λi(X(i)Ty(i)+Λ−1i−1μi−1)
p(θ∣∣X(i),y(i))∝exp(−12(θ−μi)TΛ−1i(θ−μi))
具体算法
输入:D1,D2,D3,...,Dn 其中 Di=(X(i),y(i))输出: μn
初始化
Λ1=(X(1)TX(1))−1μ1=Λ1(X(1)Ty(1))i+=1
while i<=n
Λi=(X(i)TX(i)+Λ−1i−1)−1μi=Λi(X(i)Ty(i)+Λ−1i−1μi−1)i+=1
代码
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)
相关文章推荐
- tensorflow 实现 正规方程求解线性回归
- 【六】机器学习之路——线性回归python实现(2)
- php实现贝叶斯算法(Naive Bayes)
- 支持向量机 SVM 算法推导优缺点 代码实现 in Python
- PRML读书会第三章 Linear Models for Regression(线性基函数模型、正则化方法、贝叶斯线性回归等)
- Matlab实现线性回归和逻辑回归: Linear Regression & Logistic Regression
- Coursera deeplearning.ai 深度学习笔记1-3-Shallow Neural Networks-浅层神经网络原理推导与代码实现
- 朴素贝叶斯的mapreduce的java实现
- 贝叶斯文本分类 java实现
- 8种用Python实现线性回归的方法,究竟哪个方法最高效?
- Linear Regression线性回归(python实现篇)
- 机器学习入门学习笔记:(一)BP神经网络原理推导及程序实现
- 一元线性回归的详解及其Spss和Java的实现 之 spss实现
- Billboard(广告牌)实现的逐步推导
- RNN和LSTM推导与实现
- Matlab梯度下降及正规方程实现多变量的线性回归
- 单词拼写检查器-贝叶斯算法C#版实现
- 贝叶斯实现分类
- 深度学习|反向传播算法(BP)原理推导及代码实现
- 贝叶斯实现文本分类C++实现