貝葉斯學習


一、貝葉斯理論概述

這裏寫圖片描述
這裏寫圖片描述
這裏寫圖片描述

二、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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章