变分贝叶斯法模拟多元线性回归参数估计matlab实现

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 一、原理
  • 二、使用步骤
    • 1.产生数据
    • 2.变分贝叶斯算法
    • 3.总代码
  • 总结


前言

提示:这里可以添加本文要记录的大概内容:
matlab数据分析实验,围绕多元线性回顾参数估计展开,本篇记录使用变分贝叶斯法模拟参数(主要记录代码,有问题再改)


提示:以下是本篇文章正文内容,下面案例可供参考

一、原理

多元线性回归(暂时不考虑随机误差项,论文时再加)
变分贝叶斯:(暂时没理解,直接按照老师给的图片做的,后续理解了再用自己语言解释)
变分贝叶斯法模拟多元线性回归参数估计matlab实现_第1张图片
文献参考如下:(讲述变分贝叶斯算法中涉及到的参数,记住(2)式(3)式(4)式和logp(y)即可)变分贝叶斯法模拟多元线性回归参数估计matlab实现_第2张图片
算法原理:
先假设Bq(sigma2)>0
迭代(2)式(3)式(4)式
当p(y)小于某个值时停止迭代(注意:这里的小于某个值是指相邻两次p(y)间的差)(因为是差,某些常数在下面代码中就没写了,要写的自己写,也可以问)
(下述求解中,p(y)暂时做不出来,直接对logp(y)进行比较)
||x||:矩阵的迹(主对角线上元素和)(代码:trace(x))

二、使用步骤

1.产生数据

代码如下(示例):
要运行记得在交互页面,脚本页面运行不了

%产生xy数据
function [y,x]=gendata(n,p,beta)%做一个函数,名字我令为gendata
x=normrnd(0,1,n,p);%x是n*p矩阵
muy=x*beta';%乘,a的列数=b的行数,pinv矩阵的逆
y=normrnd(muy,1,n,1);%y是n*1矩阵
end
%真实值设置为beta数据根据真实值产生,由数据模拟结果与真实值进行对比(此例子中,beta是4维的,p=4)
%beta=[1,-sqrt(3)/3,sqrt(2),0.8];sigma=1;n=100;p=4;
%[y,x]=gendata(50,4,[1,-sqrt(3)/3,sqrt(2),0.8],1)

代码都只是函数,完整的在后面
变分贝叶斯法模拟多元线性回归参数估计matlab实现_第3张图片

2.变分贝叶斯算法

代码如下(示例):(比较复杂,每一步都是慢慢摸索的解释也比较多,可以不要)

 %变分贝叶斯法
function [mbeta,msigma2]=VBmoni(err,Bq,l0,x,y,n,p)
err=log(0.0001);%精度
A=0.001;
B=0.001;
sigmab2=1000;
Bq=0.01;%迭代的初始值
l0=0;%logpymin0,迭代的初始值 %while(l0

变分贝叶斯法模拟多元线性回归参数估计matlab实现_第4张图片

3.总代码

做一次模拟,没有多次,暂时只做到这里

%变分贝叶斯__模拟多元线性回归参数
%定义的数据类
n=500;
p=4;
beta=[1,-sqrt(3)/3,sqrt(2),0.8];% beta=[1.0000,-0.5774,1.4142,0.8000]
sigma=1;
%result1=zeros(100,5);
%true=[beta,sigma];
%产生数据
[y,x]=gendata(n,p,beta);
%运行变分贝叶斯
err=log(0.0001);
Bq=0.01;%迭代的初始值
l0=0;%logpymin0,迭代的初始值
[mbeta,msigma2]=VBmoni(err,Bq,l0,x,y,n,p);
result1=[mbeta,msigma2]

变分贝叶斯法模拟多元线性回归参数估计matlab实现_第5张图片
产生数据比较多,截屏一点点就行
在这里插入图片描述
变分贝叶斯法模拟多元线性回归参数估计matlab实现_第6张图片x,y的数据我把两张图片又截了个屏,比较糊,别在意
变分贝叶斯法模拟多元线性回归参数估计matlab实现_第7张图片
水印太大了,挡住了,无能为力,啊吧啊吧


总结

本文仅仅只是学习记录,以及分享,有问题的话欢迎提出,我看看我会不会,为了论文奋斗吧。
温馨提示:对于matlab矩阵的这块不熟悉的话,多问问,区分矩阵的逆和转置,我当初是弄错了,改了好久代码的
为了背后一点点摸索的心酸,最后写出来一点点东西,尽管可能不厉害,但我自豪就行,加油干吧

你可能感兴趣的:(matlab,算法,线性回归)