• 大小: 9KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-06-17
  • 语言: Matlab
  • 标签: matlab  

资源简介

混合高斯em算法matlab源码可算三个参数-混合高斯em算法matlab源码可算三个参数.rar
混合高斯em算法matlab源码可算三个参数

资源截图

代码片段和文件信息

function [WMVL] = EM_GM(XkltolmaxiterpflagInit)
% [WMVL] = EM_GM(XkltolmaxiterpflagInit) 

% EM algorithm for k multidimensional Gaussian mixture estimation
%
% Inputs:
%   X(nd) - input data n=number of observations d=dimension of variable
%   k - maximum number of Gaussian components allowed
%   ltol - percentage of the log likelihood difference between 2 iterations ([] for none)
%   maxiter - maximum number of iteration allowed ([] for none)
%   pflag - 1 for plotting GM for 1D or 2D cases only 0 otherwise ([] for none)
%   Init - structure of initial W M V: Init.W Init.M Init.V ([] for none)
%
% Ouputs:
%   W(1k) - estimated weights of GM
%   M(dk) - estimated mean vectors of GM
%   V(ddk) - estimated covariance matrices of GM
%   L - log likelihood of estimates
%
% Written by
%   Patrick P. C. Tsui
%   PAMI research group
%   Department of Electrical and Computer Engineering
%   University of Waterloo 
%   March 2006
%

%%%% Validate inputs %%%%
if nargin <= 1
    disp(‘EM_GM must have at least 2 inputs: Xk!/n‘)
    return
elseif nargin == 2
    ltol = 0.1; maxiter = 1000; pflag = 0; Init = [];
    err_X = Verify_X(X);
    err_k = Verify_k(k);
    if err_X | err_k return; end
elseif nargin == 3
    maxiter = 1000; pflag = 0; Init = [];
    err_X = Verify_X(X);
    err_k = Verify_k(k);
    [ltolerr_ltol] = Verify_ltol(ltol);    
    if err_X | err_k | err_ltol return; end
elseif nargin == 4
    pflag = 0;  Init = [];
    err_X = Verify_X(X);
    err_k = Verify_k(k);
    [ltolerr_ltol] = Verify_ltol(ltol);    
    [maxitererr_maxiter] = Verify_maxiter(maxiter);
    if err_X | err_k | err_ltol | err_maxiter return; end
elseif nargin == 5
     Init = [];
    err_X = Verify_X(X);
    err_k = Verify_k(k);
    [ltolerr_ltol] = Verify_ltol(ltol);    
    [maxitererr_maxiter] = Verify_maxiter(maxiter);
    [pflagerr_pflag] = Verify_pflag(pflag);
    if err_X | err_k | err_ltol | err_maxiter | err_pflag return; end
elseif nargin == 6
    err_X = Verify_X(X);
    err_k = Verify_k(k);
    [ltolerr_ltol] = Verify_ltol(ltol);    
    [maxitererr_maxiter] = Verify_maxiter(maxiter);
    [pflagerr_pflag] = Verify_pflag(pflag);
    [Initerr_Init]=Verify_Init(Init);
    if err_X | err_k | err_ltol | err_maxiter | err_pflag | err_Init return; end
else
    disp(‘EM_GM must have 2 to 6 inputs!‘);
    return
end

%%%% Initialize W M VL %%%%
t = cputime;
if isempty(Init)  
    [WMV] = Init_EM(Xk); L = 0;    
else
    W = Init.W;
    M = Init.M;
    V = Init.V;
end
Ln = Likelihood(XkWMV); % Initialize log likelihood
Lo = 2*Ln;

%%%% EM algorithm %%%%
niter = 0;
while (abs(100*(Ln-Lo)/Lo)>ltol) & (niter<=maxiter)
    E = Expectation(XkWMV); % E-step    
    [WMV] = Maximization(XkE);  % M-step
    Lo = Ln;
    Ln = Likelihood(XkWMV);
    niter = niter + 1;
end 
L = Ln;

%%%% Plot 1D or 2D %%%%
if 

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     目录          0  2009-06-15 08:34  混合高斯em算法matlab源码可算三个参数

     文件      10013  2007-07-05 10:54  混合高斯em算法matlab源码可算三个参数\EM_GM.m

     文件      10742  2007-07-05 10:55  混合高斯em算法matlab源码可算三个参数\EM_GM_fast.m

     文件       5696  2007-07-05 10:55  混合高斯em算法matlab源码可算三个参数\Plot_GM.m

----------- ---------  ---------- -----  ----

                26451                    4


评论

共有 条评论