gmmgaussiannumestimate.m

来自「一个关于数据聚类和模式识别的程序,在生物化学,化学中因该都可以用到.希望对大家有」· M 代码 · 共 38 行

M
38
字号
function [bestMixNum, trainLogProb, testLogProb]=gmmGaussianNumEstimate(trainingData, testData, maxGaussianNum, covType, plotOpt)
% gmmMixNumEstimate: Estimate the number of mixture number of a GMM
%	Usage: bestMixNum=gmmGaussianNumEstimate(trainingData, testData, maxGaussianNum, covType, plotOpt)

%	Roger Jang, 20071222

if nargin<1, selfdemo; return; end
if nargin<3, maxGaussianNum=50; end
if nargin<4, covType=1; end
if nargin<5, plotOpt=0; end

trainLogProb=nan*zeros(1, maxGaussianNum);
testLogProb=nan*zeros(1, maxGaussianNum);
for i=1:maxGaussianNum
	[gmmParam, logProbHist] = gmmTrain(trainingData, [i, covType]);
	trainLogProb(i)=logProbHist(end);
	logProb2 = gmmEval(testData, gmmParam);
	testLogProb(i)=sum(logProb2);
	if plotOpt
		fprintf('%d/%d: training LP = %f, test LP = %f\n', i, maxGaussianNum, trainLogProb(i), testLogProb(i));
	end
end
plot(1:maxGaussianNum, trainLogProb, 'o-', 1:maxGaussianNum, testLogProb, 'square-');
[junk, bestMixNum]=max(testLogProb);
line(bestMixNum, testLogProb(bestMixNum), 'color', 'r', 'marker', '*');
legend('Training log prob', 'Test log prob');
grid on

% ====== Selfdemo
function selfdemo
data=dcdata(2);
data=data.input;
trainingData=data(:, 1:2:end);
testData =data(:, 2:2:end);
maxGaussianNum=50;
covType=1;
plotOpt=1;
bestMixNum=gmmGaussianNumEstimate(trainingData, testData, maxGaussianNum, covType, plotOpt);

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?