gaussianmle.m
来自「一个关于数据聚类和模式识别的程序,在生物化学,化学中因该都可以用到.希望对大家有」· M 代码 · 共 60 行
M
60 行
function gaussianParam = gaussianMle(feature, plotOpt)
% mleGaussian: Maximum likelihood estimator for Gaussian distribution
% gaussianParam = mleGaussian(feature)
% gaussianParam.mu: MLE of the mean
% gaussianParam.sigma: MLE of the variance
% feature: Feature matrix where each column corresponds to a vector
%
% For example:
% dataNum=1000;
% x = randn(dataNum, 1);
% plotOpt=1;
% gaussianParam=gaussianMle(x, plotOpt);
% Roger Jang, 20000428, 20080726
if nargin<1, selfdemo; return; end
if nargin<2, plotOpt=0; end
if size(feature, 2)==1, feature=feature'; end
[dim, dataNum] = size(feature);
if dataNum<=dim
fprintf('Warning: dataNum<=dim, the resulting parameters are not trustworthy!\n');
end
gaussianParam.mu = mean(feature, 2);
gaussianParam.sigma = (feature*feature'-dataNum*gaussianParam.mu*gaussianParam.mu')/(dataNum-1);
if plotOpt
if dim==1
binNum = 20;
[N, X] = hist(feature, binNum);
maxX=max(feature);
minX=min(feature);
rangeX=maxX-minX;
k = dataNum*rangeX/binNum;
bar(X, N/k, 1);
xi = linspace(minX-rangeX/2, maxX+rangeX/2);
yi = gaussian(xi, gaussianParam);
hold on
h = plot(xi, yi);
hold off
set(h, 'linewidth', 2, 'color', 'r');
title('Gaussian PDF');
end
end
% ====== Self demo
function selfdemo
dataNum = 1000;
% ====== Gaussian PDF
x = randn(dataNum, 1);
plotOpt=1;
subplot(2,1,1);
feval(mfilename, x, plotOpt);
% ====== Uniform PDF
x = rand(dataNum, 1);
subplot(2,1,2);
feval(mfilename, x, plotOpt);
title('Uniform PDF');
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?