本文主要介绍正态分布、拉普拉斯分布等常用分布拟合的理论推导以及代码实现。
理论推导
假设数据独立同分布。对于任意数据点,对应概率密度为,最大似然函数:
表示成参数,并写成对数形式:
正态分布
对于正态分布:
求偏导得参数估计:
拉普拉斯分布
对于拉普拉斯分布:
对 最大化似然,等价于最小化绝对偏差之和,因此位置参数的最大似然估计为样本中位数:
最大似然函数求偏导,得出b的估计:
对数正态分布
对数正态分布的密度定义在 上:
事实上,令,则参数求解与正态分布完全一致。
瑞利分布
对不带位置偏移的瑞利分布,,概率密度为:
最大似然求导,得出参数估计:
代码实现
正态分布
x = x(:); % should be column vectors !
N = length(x);
u = sum(x)/N;
sig2 = (x-u)'*(x-u)/N;
拉普拉斯分布
x = x(:); % should be column vectors !
N = length(x);
u = median(x);
b = sum(abs(x-u))/N;
对数正态分布
t = log(x(:)); % should be column vectors !
N = length(x);
m = sum( t )/N;
sig2 = (t-m)'*(t-m)/N;
瑞利分布
x = real(x(:)); % should be column vectors !
N = length(x);
s = sum(x.^2)/(2*N);
其中 s 是瑞利分布的尺度参数平方 ;输入须为非负实数。对数正态分布的输入须严格大于零。
应用举例
以正态分布为例:
rng('default') % for reproducibility
x = 3*randn(100000,1)-2;
%fitting
x = x( : ); % should be column vectors !
N = length(x);
u = sum(x)/N;
sig2 = (x-u)'*(x-u)/N;
%Plot
figure;
%Bar
subplot 311
numter = [-15:.2:10];
[histFreq, histXout] = hist(x, numter);
binWidth = histXout(2)-histXout(1);
bar(histXout, histFreq/binWidth/sum(histFreq)); hold on;grid on;
%Fitting plot
subplot 312
y = 1/sqrt(2*pi*sig2)*exp(-(numter-u).^2/2/sig2);
plot(numter,y,'r','linewidth',2);grid on;
%Fitting result
subplot 313
bar(histXout, histFreq/binWidth/sum(histFreq)); hold on;grid on;
plot(numter,y,'r','linewidth',2);
结果图:


交流与讨论
评论加载中…