⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gmmeval.html

📁 一个关于数据聚类和模式识别的程序,在生物化学,化学中因该都可以用到.希望对大家有用,谢谢支持
💻 HTML
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"                "http://www.w3.org/TR/REC-html40/loose.dtd"><html><head>  <title>Description of gmmEval</title>  <meta name="keywords" content="gmmEval">  <meta name="description" content="gmmEval: Evaluation of a GMM (Gaussian mixture model)">  <meta http-equiv="Content-Type" content="text/html; charset=big5">  <meta name="generator" content="m2html &copy; 2003 Guillaume Flandin">  <meta name="robots" content="index, follow">  <link type="text/css" rel="stylesheet" href="../m2html.css"></head><body><a name="_top"></a><div><a href="../index.html">Home</a> &gt;  <a href="index.html">dcpr</a> &gt; gmmEval.m</div><!--<table width="100%"><tr><td align="left"><a href="../index.html"><img alt="<" border="0" src="../left.png">&nbsp;Master index</a></td><td align="right"><a href="index.html">Index for dcpr&nbsp;<img alt=">" border="0" src="../right.png"></a></td></tr></table>--><h1>gmmEval</h1><h2><a name="_name"></a>PURPOSE <a href="#_top"><img alt="^" border="0" src="../up.png"></a></h2><div class="box"><strong>gmmEval: Evaluation of a GMM (Gaussian mixture model)</strong></div><h2><a name="_synopsis"></a>SYNOPSIS <a href="#_top"><img alt="^" border="0" src="../up.png"></a></h2><div class="box"><strong>function [logProb, gaussianProb] = gmmEval(data, gmmParam); </strong></div><h2><a name="_description"></a>DESCRIPTION <a href="#_top"><img alt="^" border="0" src="../up.png"></a></h2><div class="fragment"><pre class="comment"> gmmEval: Evaluation of a GMM (Gaussian mixture model)
    Usage: [logProb, gaussianProb] = gmmEval(data, gmmParam);
        data: dim x dataNum matrix where each column is a data point
        gmmParam(i): Parameters for Gaussian component i
            gmmParam(i).mu: a mean vector of dim x 1
            gmmParam(i).sigma: a covariance matrix of 3 possible dimensions:
                1 x 1: identity covariance matrix times a constant for each Gaussian
                dim x 1: diagonal covariance matrix for each Gaussian
                dim x dim: full covariance matrix for each Gaussian
            gmmParam(i).w: a weighting factor
        logProb: 1 x dataNum vector of output probabilities
        gaussianProb(i,j) is the probability of data(:,j) to the i-th Gaussian (This is for gmmTrain.m only)

    For example, to plot 2D GMM:

        data=linspace(-10, 10, 101);
        gmmParam(1).mu = -5; gmmParam(1).sigma = 1; gmmParam(1).w = 0.1;
        gmmParam(2).mu =  0; gmmParam(2).sigma = 4; gmmParam(2).w = 0.5;
        gmmParam(3).mu =  5; gmmParam(3).sigma = 3; gmmParam(3).w = 0.4;
        logProb = gmmEval(data, gmmParam);
        prob=exp(logProb);
        figure; plot(data, prob, '.-');
        line(data, gmmParam(1).w*gaussian(data, gmmParam(1)), 'color', 'r');
        line(data, gmmParam(2).w*gaussian(data, gmmParam(2)), 'color', 'm');
        line(data, gmmParam(3).w*gaussian(data, gmmParam(3)), 'color', 'g');

    Another example to plot 3D GMM:

        gmmParam(1).mu = [-3, 3]'; gmmParam(1).sigma = [5, 2]'; gmmParam(1).w = 0.3;
        gmmParam(2).mu = [3, -3]'; gmmParam(2).sigma = [4, 1]'; gmmParam(2).w = 0.3;
        gmmParam(3).mu =  [3, 3]'; gmmParam(3).sigma = [1, 4]'; gmmParam(3).w = 0.4;
        bound = 8;
        pointNum = 51;
        x = linspace(-bound, bound, pointNum);
        y = linspace(-bound, bound, pointNum);
        [xx, yy] = meshgrid(x, y);
        data = [xx(:), yy(:)]';
        logProb = gmmEval(data, gmmParam);
        zz = reshape(exp(logProb), pointNum, pointNum);
        subplot(2,2,1);
        mesh(xx, yy, zz); axis tight; box on
        subplot(2,2,2);
        contour(xx, yy, zz, 30); axis image; box on</pre></div><!-- crossreference --><h2><a name="_cross"></a>CROSS-REFERENCE INFORMATION <a href="#_top"><img alt="^" border="0" src="../up.png"></a></h2>This function calls:<ul style="list-style-image:url(../matlabicon.gif)"><li><a href="gmmEval.html" class="code" title="function [logProb, gaussianProb] = gmmEval(data, gmmParam);">gmmEval</a>	gmmEval: Evaluation of a GMM (Gaussian mixture model)</li></ul>This function is called by:<ul style="list-style-image:url(../matlabicon.gif)"><li><a href="gmmEval.html" class="code" title="function [logProb, gaussianProb] = gmmEval(data, gmmParam);">gmmEval</a>	gmmEval: Evaluation of a GMM (Gaussian mixture model)</li><li><a href="gmmGaussianNumEstimate.html" class="code" title="function [bestMixNum, trainLogProb, testLogProb]=gmmGaussianNumEstimate(trainingData, testData, maxGaussianNum, covType, plotOpt)">gmmGaussianNumEstimate</a>	gmmMixNumEstimate: Estimate the number of mixture number of a GMM</li><li><a href="gmmGrowDemo.html" class="code" title="">gmmGrowDemo</a>	Example of using gmmGrow.m for growing a GMM (gaussian mixture models).</li><li><a href="gmmMleWrtGaussianNum.html" class="code" title="function [trainLp, testLp]=gmmMleWrtGaussianNum(trainData, testData, vecOfGaussianNum, covType, gmmTrainParam, plotOpt)">gmmMleWrtGaussianNum</a>	</li><li><a href="gmmTrain.html" class="code" title="function [gmmParam, logProb] = gmmTrain(data, gaussianNumCovType, gmmTrainParam)">gmmTrain</a>	gmmTrain: Parameter training for gaussian mixture model (GMM)</li><li><a href="gmmTrainDemo1d.html" class="code" title="">gmmTrainDemo1d</a>	Example of using GMM (gaussian mixture model) for 1-D data</li><li><a href="gmmTrainDemo2dCovType01.html" class="code" title="">gmmTrainDemo2dCovType01</a>	Animation of GMM training with covType=1 (isotropic) for 2D data</li><li><a href="gmmTrainDemo2dCovType02.html" class="code" title="">gmmTrainDemo2dCovType02</a>	Animation of GMM training with covType=2 (diagonal cov. matrix) for 2D data</li><li><a href="gmmTrainDemo2dCovType03.html" class="code" title="">gmmTrainDemo2dCovType03</a>	Animation of GMM training with covType=3 (full cov. matrix) for 2D data</li><li><a href="gmmTrainEvalWrtGaussianNum.html" class="code" title="function [gmmData, recogRate1, recogRate2, validMixNumIndex]=gmmTrainEvalWrtGaussianNum(DS, TS, vecOfMixNum, covType, gmmTrainParam)">gmmTrainEvalWrtGaussianNum</a>	gmmTrainEvalWrtMixNum: GMM training and test, w.r.t. varying number of mixtures</li></ul><!-- crossreference --><h2><a name="_subfunctions"></a>SUBFUNCTIONS <a href="#_top"><img alt="^" border="0" src="../up.png"></a></h2><ul style="list-style-image:url(../matlabicon.gif)"><li><a href="#_sub1" class="code">function selfdemo</a></li></ul><h2><a name="_source"></a>SOURCE CODE <a href="#_top"><img alt="^" border="0" src="../up.png"></a></h2><div class="fragment"><pre>0001 <a name="_sub0" href="#_subfunctions" class="code">function [logProb, gaussianProb] = gmmEval(data, gmmParam);</a>0002 <span class="comment">% gmmEval: Evaluation of a GMM (Gaussian mixture model)</span>0003 <span class="comment">%    Usage: [logProb, gaussianProb] = gmmEval(data, gmmParam);</span>0004 <span class="comment">%        data: dim x dataNum matrix where each column is a data point</span>0005 <span class="comment">%        gmmParam(i): Parameters for Gaussian component i</span>0006 <span class="comment">%            gmmParam(i).mu: a mean vector of dim x 1</span>0007 <span class="comment">%            gmmParam(i).sigma: a covariance matrix of 3 possible dimensions:</span>0008 <span class="comment">%                1 x 1: identity covariance matrix times a constant for each Gaussian</span>0009 <span class="comment">%                dim x 1: diagonal covariance matrix for each Gaussian</span>0010 <span class="comment">%                dim x dim: full covariance matrix for each Gaussian</span>0011 <span class="comment">%            gmmParam(i).w: a weighting factor</span>0012 <span class="comment">%        logProb: 1 x dataNum vector of output probabilities</span>0013 <span class="comment">%        gaussianProb(i,j) is the probability of data(:,j) to the i-th Gaussian (This is for gmmTrain.m only)</span>0014 <span class="comment">%</span>0015 <span class="comment">%    For example, to plot 2D GMM:</span>0016 <span class="comment">%</span>0017 <span class="comment">%        data=linspace(-10, 10, 101);</span>0018 <span class="comment">%        gmmParam(1).mu = -5; gmmParam(1).sigma = 1; gmmParam(1).w = 0.1;</span>0019 <span class="comment">%        gmmParam(2).mu =  0; gmmParam(2).sigma = 4; gmmParam(2).w = 0.5;</span>0020 <span class="comment">%        gmmParam(3).mu =  5; gmmParam(3).sigma = 3; gmmParam(3).w = 0.4;</span>0021 <span class="comment">%        logProb = gmmEval(data, gmmParam);</span>0022 <span class="comment">%        prob=exp(logProb);</span>0023 <span class="comment">%        figure; plot(data, prob, '.-');</span>0024 <span class="comment">%        line(data, gmmParam(1).w*gaussian(data, gmmParam(1)), 'color', 'r');</span>0025 <span class="comment">%        line(data, gmmParam(2).w*gaussian(data, gmmParam(2)), 'color', 'm');</span>0026 <span class="comment">%        line(data, gmmParam(3).w*gaussian(data, gmmParam(3)), 'color', 'g');</span>0027 <span class="comment">%</span>0028 <span class="comment">%    Another example to plot 3D GMM:</span>0029 <span class="comment">%</span>0030 <span class="comment">%        gmmParam(1).mu = [-3, 3]'; gmmParam(1).sigma = [5, 2]'; gmmParam(1).w = 0.3;</span>0031 <span class="comment">%        gmmParam(2).mu = [3, -3]'; gmmParam(2).sigma = [4, 1]'; gmmParam(2).w = 0.3;</span>0032 <span class="comment">%        gmmParam(3).mu =  [3, 3]'; gmmParam(3).sigma = [1, 4]'; gmmParam(3).w = 0.4;</span>0033 <span class="comment">%        bound = 8;</span>0034 <span class="comment">%        pointNum = 51;</span>0035 <span class="comment">%        x = linspace(-bound, bound, pointNum);</span>0036 <span class="comment">%        y = linspace(-bound, bound, pointNum);</span>0037 <span class="comment">%        [xx, yy] = meshgrid(x, y);</span>0038 <span class="comment">%        data = [xx(:), yy(:)]';</span>0039 <span class="comment">%        logProb = gmmEval(data, gmmParam);</span>0040 <span class="comment">%        zz = reshape(exp(logProb), pointNum, pointNum);</span>0041 <span class="comment">%        subplot(2,2,1);</span>0042 <span class="comment">%        mesh(xx, yy, zz); axis tight; box on</span>0043 <span class="comment">%        subplot(2,2,2);</span>0044 <span class="comment">%        contour(xx, yy, zz, 30); axis image; box on</span>0045 0046 <span class="comment">%    Roger Jang, 20000602, 20080726</span>0047 0048 <span class="keyword">if</span> nargin&lt;1, <a href="#_sub1" class="code" title="subfunction selfdemo">selfdemo</a>; <span class="keyword">return</span>; <span class="keyword">end</span>0049 0050 [dim, dataNum]=size(data);0051 gaussianNum=length(gmmParam);0052 log2pi=log(2*pi);0053 logProb=zeros(1, dataNum);0054 logGaussianProb=zeros(gaussianNum, dataNum);0055 0056 <span class="keyword">if</span> prod(size(gmmParam(1).sigma))==1    <span class="comment">% identity covariance matrix times a constant for each Gaussian</span>0057     <span class="keyword">for</span> i=1:gaussianNum0058         dataMinusMu = data-repmat(gmmParam(i).mu, 1, dataNum);0059         logGaussianProb(i,:) = (-sum(dataMinusMu.*dataMinusMu, 1)/gmmParam(i).sigma-dim*(log2pi+log(gmmParam(i).sigma)))/2;0060     <span class="keyword">end</span>0061 <span class="keyword">elseif</span> prod(size(gmmParam(1).sigma))==dim    <span class="comment">% diagonal covariance matrix for each Gaussian</span>0062     <span class="keyword">for</span> i=1:gaussianNum0063         dataMinusMu = data-repmat(gmmParam(i).mu, 1, dataNum);0064         logGaussianProb(i,:) = (-sum(dataMinusMu.*dataMinusMu./repmat(gmmParam(i).sigma, 1, dataNum), 1)-dim*log2pi-log(prod(gmmParam(i).sigma)))/2;0065     <span class="keyword">end</span>0066 <span class="keyword">else</span>    <span class="comment">% full covariance matrix for each Gaussian</span>0067     <span class="keyword">for</span> i=1:gaussianNum0068         dataMinusMu = data-repmat(gmmParam(i).mu, 1, dataNum);0069         logGaussianProb(i,:) = (-sum((inv(gmmParam(i).sigma)'*dataMinusMu).*dataMinusMu, 1)-dim*log2pi-log(det(gmmParam(i).sigma)))/2;0070     <span class="keyword">end</span>0071 <span class="keyword">end</span>0072 0073 logw=log([gmmParam.w]');0074 <span class="keyword">for</span> i=1:dataNum0075     logProb(i)=mixLogSumMex(logw(:)+logGaussianProb(:,i));0076 <span class="keyword">end</span>0077 0078 <span class="keyword">if</span> nargout&gt;10079     gaussianProb=exp(logGaussianProb);    <span class="comment">% This output is necessary for gmmTrain.m!</span>0080 <span class="keyword">end</span>0081 0082 <span class="comment">% ====== Self demo</span>0083 <a name="_sub1" href="#_subfunctions" class="code">function selfdemo</a>0084 gmmParam(1).mu = [-3, 3]'; gmmParam(1).sigma = [5, 2]'; gmmParam(1).w = 0.3;0085 gmmParam(2).mu = [3, -3]'; gmmParam(2).sigma = [4, 1]'; gmmParam(2).w = 0.3;0086 gmmParam(3).mu =  [3, 3]'; gmmParam(3).sigma = [1, 4]'; gmmParam(3).w = 0.4;0087 bound = 8;0088 pointNum = 51;0089 x = linspace(-bound, bound, pointNum);0090 y = linspace(-bound, bound, pointNum);0091 [xx, yy] = meshgrid(x, y);0092 data = [xx(:), yy(:)]';0093 logProb = <a href="gmmEval.html" class="code" title="function [logProb, gaussianProb] = gmmEval(data, gmmParam);">gmmEval</a>(data, gmmParam);0094 zz = reshape(exp(logProb), pointNum, pointNum);0095 subplot(2,2,1);0096 mesh(xx, yy, zz); axis tight; box on0097 subplot(2,2,2);0098 contour(xx, yy, zz, 30); axis image; box on</pre></div><hr><address>Generated on Thu 30-Oct-2008 12:53:56 by <strong><a href="http://www.artefact.tk/software/matlab/m2html/">m2html</a></strong> &copy; 2003</address></body></html>

⌨️ 快捷键说明

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