亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? em_gm_fast.m

?? em算法的介紹和一個 游泳的事例是大家學習交流的很好的程序請大家多頂
?? M
字號:
function [W,M,V,L] = EM_GM_fast(X,k,ltol,maxiter,pflag,Init)
% [W,M,V,L] = EM_GM_fast(X,k,ltol,maxiter,pflag,Init) 
% 
% EM algorithm for k multidimensional Gaussian mixture estimation
% (EM_GM_fast is the modified version of EM_GM for speed enchancement.
%  The functionalities of EM_GM_fast and EM_GM are identical.)
%
% Note: EM_GM_fast requires more memory than EM_GM to execute.
%       If EM_GM_fast does not provide any speed gain or is slower than EM_GM,
%       more memory is needed or EM_GM should be used instead.
%
% Inputs:
%   X(n,d) - 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(1,k) - estimated weights of GM
%   M(d,k) - estimated mean vectors of GM
%   V(d,d,k) - 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
%
%   Michael Boedigheimer
%   Amgen
%   Dept of Computational Biology
%   Thousand Oaks CA, 91320
%   Dec, 2005
% 

%%%% Validate inputs %%%%
if nargin <= 1,
    disp('EM_GM must have at least 2 inputs: X,k!/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);
    [ltol,err_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);
    [ltol,err_ltol] = Verify_ltol(ltol);    
    [maxiter,err_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);
    [ltol,err_ltol] = Verify_ltol(ltol);    
    [maxiter,err_maxiter] = Verify_maxiter(maxiter);
    [pflag,err_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);
    [ltol,err_ltol] = Verify_ltol(ltol);    
    [maxiter,err_maxiter] = Verify_maxiter(maxiter);
    [pflag,err_pflag] = Verify_pflag(pflag);
    [Init,err_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, V,L %%%%
t = cputime;
if isempty(Init),  
    [W,M,V] = Init_EM(X,k); L = 0;    
else
    W = Init.W;
    M = Init.M;
    V = Init.V;
end
Ln = Likelihood(X,k,W,M,V); % Initialize log likelihood
Lo = 2*Ln;

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

%%%% Plot 1D or 2D %%%%
if pflag==1,
    [n,d] = size(X);
    if d>2,
        disp('Can only plot 1 or 2 dimensional applications!/n');
    else
        Plot_GM(X,k,W,M,V);
    end
    elapsed_time = sprintf('CPU time used for EM_GM: %5.2fs',cputime-t);
    disp(elapsed_time); 
    disp(sprintf('Number of iterations: %d',niter-1));
end
%%%%%%%%%%%%%%%%%%%%%%
%%%% End of EM_GM %%%%
%%%%%%%%%%%%%%%%%%%%%%

function E = Expectation(X,k,W,M,V)
% This function is the modification of 'Expectation' in EM_GM made by 
% Mr. Michael Boedigheimer to enchance computational speed.
% Note: this modification requires more memory to execute.
%       If EM_GM_fast does not provide any speed gain or is slower than EM_GM,
%       more memory is needed or EM_GM should be used instead.
[n,d] = size(X);
E = zeros(n,k);
for j = 1:k,
    if V(:,:,j)==zeros(d,d), V(:,:,j)=ones(d,d)*eps; end
    E(:,j) = W(j).*mvnpdf( X, M(:,j)', V(:,:,j) );
end
total = repmat(sum(E,2),1,j);
E = E./total;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%% End of Expectation %%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%

function [W,M,V] = Maximization(X,k,E)
% This function is the modification of 'Maximization' in EM_GM made by 
% Mr. Michael Boedigheimer to enchance computational speed.
% Note: this modification requires more memory to execute.
%       If EM_GM_fast does not provide any speed gain or is slower than EM_GM,
%       more memory is needed or EM_GM should be used instead.
[n,d] = size(X);
W = sum(E);
M = X'*E./repmat(W,d,1);
for i=1:k,
    dXM = X - repmat(M(:,i)',n,1);
    Wsp = spdiags(E(:,i),0,n,n);
    V(:,:,i) = dXM'*Wsp*dXM/W(i);
end
W = W/n;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%% End of Maximization %%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

function L = Likelihood(X,k,W,M,V)
% Compute L based on K. V. Mardia, "Multivariate Analysis", Academic Press, 1979, PP. 96-97
% to enchance computational speed
[n,d] = size(X);
U = mean(X)';
S = cov(X);
L = 0;
for i=1:k,
    iV = inv(V(:,:,i));
    L = L + W(i)*(-0.5*n*log(det(2*pi*V(:,:,i))) ...
        -0.5*(n-1)*(trace(iV*S)+(U-M(:,i))'*iV*(U-M(:,i))));
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%% End of Likelihood %%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%

function err_X = Verify_X(X)
err_X = 1;
[n,d] = size(X);
if n<d,
    disp('Input data must be n x d!/n');
    return
end
err_X = 0;
%%%%%%%%%%%%%%%%%%%%%%%%%
%%%% End of Verify_X %%%%
%%%%%%%%%%%%%%%%%%%%%%%%%

function err_k = Verify_k(k)
err_k = 1;
if ~isnumeric(k) | ~isreal(k) | k<1,
    disp('k must be a real integer >= 1!/n');
    return
end
err_k = 0;
%%%%%%%%%%%%%%%%%%%%%%%%%
%%%% End of Verify_k %%%%
%%%%%%%%%%%%%%%%%%%%%%%%%

function [ltol,err_ltol] = Verify_ltol(ltol)
err_ltol = 1;
if isempty(ltol),
    ltol = 0.1;
elseif ~isreal(ltol) | ltol<=0,
    disp('ltol must be a positive real number!');
    return
end
err_ltol = 0;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%% End of Verify_ltol %%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%

function [maxiter,err_maxiter] = Verify_maxiter(maxiter)
err_maxiter = 1;
if isempty(maxiter),
    maxiter = 1000;
elseif ~isreal(maxiter) | maxiter<=0,
    disp('ltol must be a positive real number!');
    return
end
err_maxiter = 0;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%% End of Verify_maxiter %%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

function [pflag,err_pflag] = Verify_pflag(pflag)
err_pflag = 1;
if isempty(pflag),
    pflag = 0;
elseif pflag~=0 & pflag~=1,
    disp('Plot flag must be either 0 or 1!/n');
    return
end
err_pflag = 0;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%% End of Verify_pflag %%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

function [Init,err_Init] = Verify_Init(Init)
err_Init = 1;
if isempty(Init),
    % Do nothing;
elseif isstruct(Init),
    [Wd,Wk] = size(Init.W);
    [Md,Mk] = size(Init.M);
    [Vd1,Vd2,Vk] = size(Init.V);
    if Wk~=Mk | Wk~=Vk | Mk~=Vk,
        disp('k in Init.W(1,k), Init.M(d,k) and Init.V(d,d,k) must equal!/n')
        return
    end
    if Md~=Vd1 | Md~=Vd2 | Vd1~=Vd2,
        disp('d in Init.W(1,k), Init.M(d,k) and Init.V(d,d,k) must equal!/n')
        return
    end
else
    disp('Init must be a structure: W(1,k), M(d,k), V(d,d,k) or []!');
    return
end
err_Init = 0;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%% End of Verify_Init %%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%

function [W,M,V] = Init_EM(X,k)
[n,d] = size(X);
[Ci,C] = kmeans(X,k,'Start','cluster', ...
    'Maxiter',100, ...
    'EmptyAction','drop', ...
    'Display','off'); % Ci(nx1) - cluster indeices; C(k,d) - cluster centroid (i.e. mean)
while sum(isnan(C))>0,
    [Ci,C] = kmeans(X,k,'Start','cluster', ...
        'Maxiter',100, ...
        'EmptyAction','drop', ...
        'Display','off');
end
M = C';
Vp = repmat(struct('count',0,'X',zeros(n,d)),1,k);
for i=1:n, % Separate cluster points
    Vp(Ci(i)).count = Vp(Ci(i)).count + 1;
    Vp(Ci(i)).X(Vp(Ci(i)).count,:) = X(i,:);
end
V = zeros(d,d,k);
for i=1:k,
    W(i) = Vp(i).count/n;
    V(:,:,i) = cov(Vp(i).X(1:Vp(i).count,:));
end
%%%%%%%%%%%%%%%%%%%%%%%%
%%%% End of Init_EM %%%%
%%%%%%%%%%%%%%%%%%%%%%%%

function Plot_GM(X,k,W,M,V)
[n,d] = size(X);
if d>2,
    disp('Can only plot 1 or 2 dimensional applications!/n');
    return
end
S = zeros(d,k);
R1 = zeros(d,k);
R2 = zeros(d,k);
for i=1:k,  % Determine plot range as 4 x standard deviations
    S(:,i) = sqrt(diag(V(:,:,i)));
    R1(:,i) = M(:,i)-4*S(:,i);
    R2(:,i) = M(:,i)+4*S(:,i);
end
Rmin = min(min(R1));
Rmax = max(max(R2));
R = [Rmin:0.001*(Rmax-Rmin):Rmax];
clf, hold on
if d==1,
    Q = zeros(size(R));
    for i=1:k,
        P = W(i)*normpdf(R,M(:,i),sqrt(V(:,:,i)));
        Q = Q + P;
        plot(R,P,'r-'); grid on,
    end
    plot(R,Q,'k-');
    xlabel('X');
    ylabel('Probability density');
else % d==2
    plot(X(:,1),X(:,2),'r.');
    for i=1:k,
        Plot_Std_Ellipse(M(:,i),V(:,:,i));
    end
    xlabel('1^{st} dimension');
    ylabel('2^{nd} dimension');
    axis([Rmin Rmax Rmin Rmax])
end
title('Gaussian Mixture estimated by EM');
%%%%%%%%%%%%%%%%%%%%%%%%
%%%% End of Plot_GM %%%%
%%%%%%%%%%%%%%%%%%%%%%%%

function Plot_Std_Ellipse(M,V)
[Ev,D] = eig(V);
d = length(M);
if V(:,:)==zeros(d,d),
    V(:,:) = ones(d,d)*eps;
end
iV = inv(V);
% Find the larger projection
P = [1,0;0,0];  % X-axis projection operator
P1 = P * 2*sqrt(D(1,1)) * Ev(:,1);
P2 = P * 2*sqrt(D(2,2)) * Ev(:,2);
if abs(P1(1)) >= abs(P2(1)),
    Plen = P1(1);
else
    Plen = P2(1);
end
count = 1;
step = 0.001*Plen;
Contour1 = zeros(2001,2);
Contour2 = zeros(2001,2);
for x = -Plen:step:Plen,
    a = iV(2,2);
    b = x * (iV(1,2)+iV(2,1));
    c = (x^2) * iV(1,1) - 1;
    Root1 = (-b + sqrt(b^2 - 4*a*c))/(2*a);
    Root2 = (-b - sqrt(b^2 - 4*a*c))/(2*a);
    if isreal(Root1),
        Contour1(count,:) = [x,Root1] + M';
        Contour2(count,:) = [x,Root2] + M';
        count = count + 1;
    end
end
Contour1 = Contour1(1:count-1,:);
Contour2 = [Contour1(1,:);Contour2(1:count-1,:);Contour1(count-1,:)];
plot(M(1),M(2),'k+');
plot(Contour1(:,1),Contour1(:,2),'k-');
plot(Contour2(:,1),Contour2(:,2),'k-');
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%% End of Plot_Std_Ellipse %%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%


?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲第一狼人社区| 中文字幕av在线一区二区三区| 99久久精品免费看| 国产成人午夜高潮毛片| 激情六月婷婷综合| 国产一区在线观看麻豆| 国产中文字幕精品| 国产91丝袜在线播放| 国产99久久久精品| 成人一区二区三区视频在线观看| 色哟哟国产精品| 91视频在线看| 欧美午夜片在线看| 91精品麻豆日日躁夜夜躁| 欧美挠脚心视频网站| 在线成人小视频| 精品久久久久久久久久久久久久久久久 | 亚洲宅男天堂在线观看无病毒| 日韩美女视频19| 亚洲午夜电影在线观看| 人人狠狠综合久久亚洲| 国产一区欧美二区| 91香蕉国产在线观看软件| 欧美亚洲一区二区在线观看| 欧美高清视频不卡网| 欧美成人性福生活免费看| 欧美激情一二三区| 亚洲午夜在线观看视频在线| 天堂av在线一区| 激情欧美一区二区三区在线观看| 99免费精品视频| 这里只有精品电影| 国产精品女主播在线观看| 亚洲国产sm捆绑调教视频| 久草中文综合在线| 在线免费观看日本一区| 欧美tk—视频vk| 亚洲综合一区二区三区| 国产精品小仙女| 欧美亚洲一区三区| 国产精品青草久久| 久久国产免费看| 欧美日韩一级二级| 91国产视频在线观看| 久久久久九九视频| 午夜精品一区二区三区三上悠亚| 国产成人亚洲精品青草天美| 在线免费观看日本欧美| 国产午夜亚洲精品午夜鲁丝片| 亚洲成人精品影院| 成人免费的视频| 精品盗摄一区二区三区| 亚洲一二三专区| 波多野洁衣一区| 久久亚洲捆绑美女| 美女视频黄久久| 69堂成人精品免费视频| 亚洲美女视频在线| 成人综合婷婷国产精品久久蜜臀| 日韩视频一区在线观看| 亚洲曰韩产成在线| 一本色道久久加勒比精品 | 亚洲精品在线三区| 午夜精品久久久久影视| 在线视频一区二区三| 国产精品国产三级国产| 国产一区二区三区免费观看| 欧美精品99久久久**| 亚洲自拍都市欧美小说| 不卡的看片网站| 国产精品女人毛片| 成人小视频免费在线观看| 国产亚洲成年网址在线观看| 麻豆成人久久精品二区三区红 | 国产精品视频一区二区三区不卡| 视频一区中文字幕| 欧美精选一区二区| 日韩不卡一二三区| 欧美成人性战久久| 精品一二三四区| 精品国产伦一区二区三区免费| 日韩精品久久理论片| 欧美一区二区免费视频| 日本不卡的三区四区五区| 91精品国产麻豆国产自产在线 | 国产激情一区二区三区四区| 久久一区二区三区国产精品| 国产一区二区三区在线观看免费视频| 精品粉嫩aⅴ一区二区三区四区| 极品美女销魂一区二区三区免费| 精品免费99久久| 高清不卡一区二区| 亚洲丝袜制服诱惑| 欧美剧在线免费观看网站| 青青草成人在线观看| 久久五月婷婷丁香社区| jlzzjlzz国产精品久久| 亚洲综合自拍偷拍| 日韩精品中文字幕一区二区三区| 精品亚洲国产成人av制服丝袜 | 国产精品久久久久永久免费观看| 91色视频在线| 免费一区二区视频| 欧美激情一二三区| 欧美日本一区二区在线观看| 老司机精品视频导航| 国产精品久久久久婷婷| 欧美另类z0zxhd电影| 国产精品一区专区| 一区二区在线观看不卡| 日韩精品在线看片z| thepron国产精品| 美女视频免费一区| 亚洲欧美电影一区二区| 日韩亚洲欧美高清| 99re视频精品| 久久国产精品无码网站| 综合网在线视频| 欧美videos中文字幕| 在线看日韩精品电影| 久久精品二区亚洲w码| 亚洲精选免费视频| 国产日韩欧美亚洲| 91精品视频网| 色综合天天视频在线观看| 国产一区在线观看视频| 亚洲成av人片在线观看无码| 国产欧美日韩在线观看| 欧美一区二区人人喊爽| 色综合久久久久综合99| 日本黄色一区二区| 国产不卡免费视频| 麻豆免费精品视频| 五月天欧美精品| 一区二区三区四区乱视频| 欧美极品少妇xxxxⅹ高跟鞋| 日韩亚洲欧美在线| 91精品国产91久久久久久一区二区| 99久久精品久久久久久清纯| 国产精品资源网站| 韩国女主播一区| 蜜桃av一区二区三区电影| 午夜精品久久久久久久99水蜜桃 | 精品婷婷伊人一区三区三| 国产xxx精品视频大全| 韩国v欧美v日本v亚洲v| 日本不卡一区二区| 日韩高清不卡在线| 亚洲国产精品嫩草影院| 亚洲精品国产无天堂网2021| 国产精品久久久久久妇女6080| 久久精品亚洲麻豆av一区二区| 日韩午夜电影在线观看| 日韩欧美国产综合一区| 日韩一级黄色大片| 精品99一区二区| 久久久久久久一区| 国产色产综合产在线视频| 国产日产欧产精品推荐色| 欧美国产精品久久| 国产精品福利av| 一区二区日韩电影| 亚洲国产精品久久不卡毛片| 亚洲国产aⅴ天堂久久| 日韩国产欧美在线观看| 麻豆精品在线播放| 国产做a爰片久久毛片| 国产91清纯白嫩初高中在线观看 | 亚洲福中文字幕伊人影院| 亚洲国产日韩a在线播放| 亚洲福利一区二区三区| 青青草97国产精品免费观看无弹窗版| 日本亚洲视频在线| 韩国av一区二区三区在线观看| 国产精选一区二区三区| av中文字幕亚洲| 欧美人与禽zozo性伦| 精品99999| 国产精品久久久久影视| 亚洲国产欧美另类丝袜| 日本不卡免费在线视频| 成人免费毛片片v| 欧美日韩日本视频| 国产色产综合色产在线视频 | 欧美日韩成人综合在线一区二区| 日韩欧美一区二区免费| 久久久精品国产99久久精品芒果| 亚洲欧美怡红院| 免费精品视频最新在线| 成人动漫一区二区在线| 欧美日韩的一区二区| 国产精品乱子久久久久| 无码av中文一区二区三区桃花岛| 国产精品综合一区二区三区| 欧美亚洲国产一区二区三区va| 日韩一级完整毛片| 亚洲免费在线观看视频| 国产一区日韩二区欧美三区| 日本久久电影网| 日本一区二区电影|