1. 程式人生 > >正態分佈的最大似然估計

正態分佈的最大似然估計

給定資料集D={x1, x2, ... , xn},假設都服從均值為mean(假設未知),方差為var的高斯分佈(假設已知),則引數θ為均值mean.

p(D|θ) = ∏p(xi|θ) =p(x1|θ)p(x2|θ)...p(xn|θ)

最大似然估計(MLE)


MLE過程:

(1)假設真實高斯分佈的均值為20,方差為18*18

(2)根據該概率分佈抽取100個樣本點

(3)計算p(D|θ),並畫出曲線,顯示出最大值所對應的θ值,即mean值

% Maximum Likelihood Estimation
function MLE_show

clear;close all;

% 引數設定
mean = 20;     %均值 
std = 18;      %標準差
var = std^2;   %方差
num = 100;     %抽樣點數

% 真實分佈
x = -50:0.1:100;
f = exp(-(x-mean).*(x-mean)/(2*var))/sqrt(2*pi*var);
figure(1),subplot(1,2,1),plot(x,f);hold on;
title(sprintf('Normal Distribution, mean = %d, var = %d', mean, var));

% 從真實分佈抽樣出num個點
rx = mean + std .* randn(num,1);
ry = zeros(size(rx,1),1);
subplot(1,2,1),plot(rx,ry,'r.','MarkerSize',13);
xlabel('x');
ylabel('p(x)');

% MLE (假設均值未知,方差已知)
ii = 1;
for i = mean-10:0.1:mean+10
    joint_pdf(ii) = ML_value(rx, i, var, num);
    ii = ii + 1;
end
x1 = mean-10:0.1:mean+10;

maxparam = find(joint_pdf==max(joint_pdf))
x2 = x1(maxparam)*ones(1,3);
y2 = linspace(0,max(joint_pdf)*1.2, 3);
figure(1),subplot(1,2,2),plot(x1,joint_pdf);hold on;
plot(x2,y2,'k-');title(sprintf('Maximum Likelihood Estimation, mean = %2.1f', x1(maxparam)));
xlabel('mean');
ylabel('p(D|mean)');

% 計算聯合概率(假設方差已知)
function val = ML_value(rx, meanval, var, num)
t = 1;
for i = 1:num
   t = t*exp(-(rx(i)-meanval).*(rx(i)-meanval)/(2*var))/sqrt(2*pi*var);
end
val = t;
執行結果圖: