给定数据集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; %抽样点数
gaussian = @(x,mean,var)(exp(-(x-mean).*(x-mean)/(2*var))/sqrt(2*pi*var));
% 真实分布
x = -50:0.1:100;
f = gaussian(x,mean,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(num,1);
subplot(1,2,1),plot(rx,ry,'r.','MarkerSize',13);
xlabel('x');
ylabel('p(x)');
% MLE (假设均值未知,方差已知)
x1 = mean-10:0.1:mean+10;
likelihood_val = prod(gaussian(rx,x1,var));
maxparam = find(max(likelihood_val)==likelihood_val);
x2 = x1(maxparam)*ones(1,3);
y2 = linspace(0,max(likelihood_val)*1.2, 3);
figure(1),subplot(1,2,2),plot(x1,likelihood_val);hold on;
plot(x2,y2,'k-');title(sprintf('Maximum Likelihood Estimation, mean = %2.1f', x1(maxparam)));
xlabel('mean');
ylabel('p(D|mean)');
运行结果图: