贝叶斯学习


一、贝叶斯理论概述

这里写图片描述
这里写图片描述
这里写图片描述

二、Brute-Force贝叶斯分类器

这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
最大似然估计(MLE)计算流程:
这里写图片描述
例:
这里写图片描述
MAP与MLE的不同之处在于有先验概率,即每种假设的先验概率不同,结果受假设的先验概率影响较大。
贝叶斯推理的结果很大程度上依赖于先验概率,另外不是完全接受或拒绝假设,只是在观察到较多的数据后增大或减小了假设的可能性。

三、两种概率学习算法

1. 贝叶斯最优分类器

前面讨论的问题是:给定训练数据,最可能的假设是什么,更有意义的问题是:给定训练数据,对新实例的最可能的分类是什么。第二个问题的解决可以将第一个问题的结果(MAP)应用到新实例上得到,但结果并不一定最优。
这里写图片描述
例:
这里写图片描述

2. 朴素贝叶斯分类器

以上公式中xi表示第i个样本,实际中每个实例x可由特征联合描述,而目标函数f(x)从某有限集Y中取值,忽略假设。
这里写图片描述
这里写图片描述
这里写图片描述

四、EM算法与混合模型

这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
GMMS的参数估计-EM算法
这里写图片描述
这里写图片描述
这里写图片描述
一维实例:
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述


EM算法训练二维高斯混合模型demo

%产生2个二维正态数据
MU1    = [1 2];
SIGMA1 = [1 0; 0 0.5];
MU2    = [-1 -1];
SIGMA2 = [1 0; 0 1];
X      = [mvnrnd(MU1, SIGMA1, 1000);mvnrnd(MU2, SIGMA2, 1000)];
%显示
scatter(X(:,1),X(:,2),10,'filled');
%GMMs 学习,请自己设计代码, 替代以下Matlab自带的学习函数
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
cnt=2000;%点的个数和维数
d=2;
%初始化权值和均值方差
mu=[2*rand(1,2)',2*rand(1,2)'];
a=[0.5,0.5];
s=[cov(X),cov(X)];
old=[a(:);mu(:);s(:)];
%迭代步数和精度
eps=1e-3;
step=100;
%EM算法
while true
    %计算后验概率,E步
    r=zeros(cnt,d);
    for j=1:d
        r(:,j)=a(j)*mvnpdf(X,mu(:,j),s(:,(2*j-1):(2*j+d-2)));
    end
    r=r./repmat(sum(r,2),1,2);%r有2000行2列,每行为每个点分别属于两个高斯分布的概率,repmat复制生成2000行2列
    %更新均值、方差、权值。M步
    sr=sum(r,1);%列和,1行2列分别为所有点的两个高斯分布的后验概率,更新公式的分母
    for j=1:d
        mu(:,j)=(X'*r(:,j))/sr(1,j);

        s(:,(2*j-1):(2*j+d-2))=(X-repmat(mu(:,j)',cnt,1))'*diag(r(:,j))*(X-repmat(mu(:,j)',cnt,1));
        s(:,(2*j-1):(2*j+d-2))= s(:,(2*j-1):(2*j+d-2))./sr(1,j);

        a(:,j)=sr(1,j)/cnt;
    end
    new=[a(:);mu(:);s(:)];

    dis=sum(abs(new-old));
    if (dis<eps) || (T<=0)
        break;
    end
    old=new;
    T=T-1;
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%显示学习到模型
[X,Y] = meshgrid(linspace(-10,10,100)', linspace(-10,10,100)'); 
for i=1:100 
    for j=1:100 
        XY=[X(i,j),Y(i,j)]; 
        Z(i,j)=a(1)*mvnpdf(XY,mu(:,1),s(:,1:2))+a(2)*mvnpdf(XY,mu(:,2),s(:,3:4));
    end 
end 
surf(X,Y,Z);

%显示学习参数
a
mu
s
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章