📄 unsudemo.m
字号:
sets=get(h.axes1,'UserData'); % Are data sets loaded ? if isempty(sets)==1,
% no warning is needy because of the huge topic on the screen:))). return; end [name,path]=uigetfile('*.mat','Load model'); if name ~= 0, fname=strcat(path,name);% if checkdat(fname,DATA_IDENT,2,0)==1, unsudemo('reset',hfigure); model=load(fname); if exist('model.Pk')==0, % suppose uniformly distributed Pk model.Pk=ones(1,sum(model.K))/sum(model.K); end h.ellipse.mi = model.MI; h.ellipse.sigma=model.SIGMA; h.ellipse.Pk = model.Pk; h.ellipse.solution=0; h.ellipse.t=0; set(h.edclasses,'String',num2str(sum(model.K))); h.ellipse.classes=sum(model.K); h.ellipse.features=get(h.pufeatures,'Value'); set(hfigure,'UserData',h); unsudemo('step',hfigure); % else% errordlg('This file does not contain required data.','Bad file','modal');% end end case 'play' % == Play ============================================ h=get(hfigure,'UserData'); % get data set sets=get(h.axes1,'UserData'); % Are data sets loaded ? if isempty(sets)==1 | h.ellipse.solution==1,
%% text=sprintf(...%% 'No action performed. No data to work on. Load or create it!');%% set(h.console,'String',text); return; end % disable button set([h.editer,h.btstep,h.btclose,h.btplay,... h.btreset,h.btinfo,h.btload,h.btcreat,h.txiter],... 'Enable','off'); % enable stop button set(h.btstop,'Enable','on'); % get # of iterations iter=str2num(get(h.editer,'String')); % # of classes if h.ellipse.t==0, h.ellipse.classes=str2num(get(h.edclasses,'String')); h.ellipse.features=get(h.pufeatures,'Value'); set([h.xbrandom,h.edclasses,h.txclasses,h.pufeatures,h.txfeatures],... 'Enable','off'); end % Shall the init be random, yes or no ? randinit=get(h.xbrandom,'Value'); % set stop button set(h.btstop,'UserData',0); % Play - adaptation process play=1; % flag 1 - not finished, 1 - finished; while play==1 & get(h.btstop,'UserData')==0, % perform one learning step if h.ellipse.features==2, % correlated features [h.ellipse.mi,h.ellipse.sigma,h.ellipse.Pk,eI,h.ellipse.solution,... h.ellipse.t]=unsund(sets.X,h.ellipse.classes,iter,randinit,... h.ellipse.t,h.ellipse.mi, h.ellipse.sigma,h.ellipse.Pk); else % independent [h.ellipse.mi,h.ellipse.sigma,h.ellipse.Pk,eI,h.ellipse.solution,... h.ellipse.t]=unsuni(sets.X,h.ellipse.classes,iter,randinit,... h.ellipse.t,h.ellipse.mi,h.ellipse.sigma,h.ellipse.Pk); end text=sprintf('step number t=%d ',h.ellipse.t); if h.ellipse.solution==1,%% text=strvcat(text,'Solution was found.'); text=[text ',solution was found']; play=0; set(h.txsteps,'String',text); else set(h.txsteps,'String',text); val= mln(sets.X,h.ellipse.mi,h.ellipse.sigma,h.ellipse.Pk); text=sprintf('Log-likelihood, logL(t) = %f',val); set(h.title2,'String',text); h.graph1.time=[h.graph1.time,h.ellipse.t]; h.graph1.loglik=[h.graph1.loglik,val]; ylimit=get(h.axes2,'YLim'); if ylimit(2) < val, set(h.axes2,'YLim',[ylimit(1) val+AXISY_ADD]); end % is axis to be changed ? if h.ellipse.t > h.graph1.axist, h.graph1.axist=h.ellipse.t+iter*AXIST_ADD; set(h.axes2,'XLim',[1 h.graph1.axist]); end set(h.graph1.handler,'XData',h.graph1.time,'YData',h.graph1.loglik,... 'Visible','on'); if h.ellipse.handler==-1, axes(h.axes1); end [h.ellipse.handler,h.center]=... pnmix(sets.X,h.ellipse.mi,h.ellipse.sigma,eI,h.ellipse.handler,h.center); end % comment%% set(h.console,'String',text); % store data set(hfigure,'UserData',h); % flush it on desktop drawnow; end % of while % dissable button set([h.editer,h.btstep,h.btclose,h.btplay,... h.btreset,h.btinfo,h.btload,h.btcreat,h.txiter],... 'Enable','on'); % enable stop button set(h.btstop,'Enable','off'); % copy the solution to global variables to be visible outside unsudemo UNSU_MI = h.ellipse.mi; UNSU_SIGMA = h.ellipse.sigma; UNSU_PK = h.ellipse.Pk; UNSU_solution = h.ellipse.solution; UNSU_t = h.ellipse.t;case 'step' % == One step of learning ===========================================
h=get(hfigure,'UserData');
% get data set
sets=get(h.axes1,'UserData');
% are data sets loaded ?
if isempty(sets)==1 | h.ellipse.solution==1,
%%text=sprintf('No action performed. No data to work on. Load or create it!');%% set(h.console,'String',text);
%% set(h.txsteps,'String',text);
return;
end
% get # of iter
iter=str2num(get(h.editer,'String'));
% # of classes if h.ellipse.t==0, h.ellipse.classes=str2num(get(h.edclasses,'String')); h.ellipse.features=get(h.pufeatures,'Value'); set([h.xbrandom,h.edclasses,h.txclasses,h.pufeatures,h.txfeatures],'Enable','off'); end % random init yes or no randinit=get(h.xbrandom,'Value'); % perform one learning step if h.ellipse.features==2, % correlated [h.ellipse.mi,h.ellipse.sigma,h.ellipse.Pk,eI,h.ellipse.solution,... h.ellipse.t]=unsund(sets.X,h.ellipse.classes,iter,randinit,... h.ellipse.t,h.ellipse.mi,h.ellipse.sigma,h.ellipse.Pk); else % independent [h.ellipse.mi,h.ellipse.sigma,h.ellipse.Pk,eI,h.ellipse.solution,... h.ellipse.t]=unsuni(sets.X,h.ellipse.classes,iter,randinit,... h.ellipse.t,h.ellipse.mi,h.ellipse.sigma,h.ellipse.Pk); end text=sprintf('step number t=%d ',h.ellipse.t); if h.ellipse.solution==1,%% text=strvcat(text,'Solution is found.'); text=[text ',solution was found']; set(h.txsteps,'String',text); else set(h.txsteps,'String',text); val= mln(sets.X,h.ellipse.mi,h.ellipse.sigma,h.ellipse.Pk); text=sprintf('Log-likelihood, logL(t) = %f',val); set(h.title2,'String',text); h.graph1.time=[h.graph1.time,h.ellipse.t]; h.graph1.loglik=[h.graph1.loglik,val]; ylimit=get(h.axes2,'YLim'); if ylimit(2) < val, set(h.axes2,'YLim',[ylimit(1) val+AXISY_ADD]); end % is axis to be changed ? if h.ellipse.t > h.graph1.axist, h.graph1.axist=h.ellipse.t+iter*AXIST_ADD; set(h.axes2,'XLim',[1 h.graph1.axist]); end set(h.graph1.handler,'XData',h.graph1.time,'YData',h.graph1.loglik,... 'Visible','on'); if h.ellipse.handler==-1, axes(h.axes1); end [h.ellipse.handler,h.center]=... pnmix(sets.X,h.ellipse.mi,h.ellipse.sigma,eI,h.ellipse.handler,h.center); end % comment%% set(h.console,'String',text); % flush it on desktop
drawnow; set(hfigure,'UserData',h); % copy the solution to global variables to be visible outside unsudemo
UNSU_MI = h.ellipse.mi;
UNSU_SIGMA = h.ellipse.sigma;
UNSU_PK = h.ellipse.Pk;
UNSU_solution = h.ellipse.solution;
UNSU_t = h.ellipse.t;
case 'getfile' % == Invoke standard open file dialog ==================================== % Opens file and checks if contains apropriate data, if yes than loads data. h=get(hfigure,'UserData'); % change path to directory
%% wres=what('unsuper');
%% cd(wres.path);
[name,path]=uigetfile('*.mat','Open file');
if name~=0,
file.pathname=strcat(path,name);
file.path=path;
file.name=name;
if checkdat(file.pathname,DATA_IDENT,2,0)==1,
set(h.btload,'UserData',file);
unsudemo('loadsets',hfigure);
else
errordlg('This file does not contain required data.','Bad file','modal');
end
end
case 'loadsets'
% == Load sets ==================================================================
% Get file name from the pop up menu according to menu pointer.
h=get(hfigure,'UserData'); % Get file name with sets file=get(h.btload,'UserData'); % Load sets sets=load(file.pathname); % store loaded sets set(h.axes1,'UserData',sets); % call reset unsudemo('reset',hfigure); drawnow;case 'reset' % == Reset adaptation process, set up t=0 ================ h=get(hfigure,'UserData'); % get handlers % get file file=get(h.btload,'UserData'); % get data set sets=get(h.axes1,'UserData'); % zeroes parameters of the separation line h.ellipse.mi=[]; h.ellipse.sigma=[]; h.ellipse.t=0; h.ellipse.Pk=[]; h.center=-1; h.ellipse.handler=-1; h.ellipse.solution=0; h.graph1.time=[]; h.graph1.axist=0; h.graph1.loglik=[]; % clear axes prob. clrchild(h.axes2); axes(h.axes2);%% setaxis(h.axes2,[0 1 0 1]);
axis auto; h.graph1.handler=plot([0],[0],'b','Parent',h.axes2,... 'EraseMode','background','Visible','off'); % store h
set(hfigure,'UserData',h); % enable Edit Line 'classes' set([h.xbrandom,h.edclasses,h.txclasses,h.pufeatures,h.txfeatures],'Enable','on'); % comment
text=sprintf('Log-likelihood, logL(t)'); set(h.title2,'String',text); text=sprintf('step number t=0. '); set(h.txsteps,'String',text); % clears axes
set(get(h.axes1,'Children'),'EraseMode','normal');
%%% cla;
clrchild(h.axes1);
drawnow;
% set axes and plot mixture
axes(h.axes1);
if isempty(sets)==0,
win=cmpwin(min(sets.X'),max(sets.X'),BORDER,BORDER);
%%% axis(win);
setaxis(h.axes1,win);
%% axes(h.axes1);
ppoints(sets.X,sets.I); end %%%%%%%%%%%%%%%%%%%%%%%%%%%%
% create comment
if isempty(sets)==0,
set(h.title1,'String',sprintf('File: %s, # of points K = %d',file.name,sum(sets.K)));
else
set(h.title1,'String','No data loaded');
pos=get(h.axes1,'Position');
fsize=min(pos(3),pos(4))/7;
setaxis(h.axes1,[-1 1 -1 1]);
builtin('text',0,0,'Press ''Load data'' button.',...
'Parent',h.axes1,... 'HorizontalAlignment','center',...
'FontUnits','normalized',...
'Clipping','on',...
'FontSize',fsize);
end
drawnow;
case 'creatdata'
% == Invoke data set creator ============================================
creatset('finite',10,'unsudemo','created',hfigure);
case 'created'
% == Load new created data set ===========================================
% get handler and make this figure active
figure(hfigure);
h=get(hfigure,'UserData');
% get file name
path=varargin{1};
name=varargin{2};
pathname=strcat(path,name);
if checkdat(pathname,DATA_IDENT,2,0)==1,
file.pathname=pathname;
file.path=path;
file.name=name;
set(h.btload,'UserData',file);
unsudemo('loadsets',hfigure);
else
errordlg('This file does not contain required data.','Bad file','modal');
end
case 'info'
% == Call standard Matlab`s info box =========================================
helpwin(mfilename);
end % of switch
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -