📄 classifier_commands.m
字号:
evalin('base','[patterns, targets, distribution_parameters] = load_file([pathname, filename]);')
evalin('base','clear pathname filename');
if (evalin('base', 'isempty(distribution_parameters)')),
evalin('base', 'clear distribution_parameters');
end
if (evalin('base', '~isempty(patterns)'))
evalin('base','region = calculate_region(patterns, [zeros(1,4) 100]);')
classifier_commands('ClearBounds');
else
%Clean the axis
cla
end
end
case 'EnterManualDist'
disp('Clearing current data from workspace');
evalin('base', 'clear')
cla
ttl = 'Manual definition of distribution';
n0 = str2num(char(inputdlg('Enter the number of distribution objects in class 0:',ttl,1,cellstr(num2str(1)))));
n1 = str2num(char(inputdlg('Enter the number of distribution objects in class 1:',ttl,1,cellstr(num2str(1)))));
distribution_parameters(1).p = str2num(char(inputdlg('Enter the probability of class 0:',ttl,1,cellstr(num2str(0.5)))));
distribution_parameters(2).p = 1 - distribution_parameters(1).p;
distribution_parameters(1).mu = zeros(n0,2);
distribution_parameters(2).mu = zeros(n1,2);
distribution_parameters(1).sigma= zeros(n0,2,2);
distribution_parameters(2).sigma= zeros(n1,2,2);
for i = 1:n0,
distribution_parameters(1).sigma(i,:,:) = eye(2);
distribution_parameters(1).type(i) = {'Gaussian'};
end
for i = 1:n1,
distribution_parameters(2).sigma(i,:,:) = eye(2);
distribution_parameters(2).type(i) = {'Gaussian'};
end
distribution_parameters(1).w = ones(n0,1)/n0;
distribution_parameters(2).w = ones(n1,1)/n1;
save synthetic distribution_parameters
uiwait(enter_distributions);
evalin('base','distribution_parameters = load_file(''synthetic'');')
case 'ManualGraphData'
%Graphically enter a data set
evalin('base','if ~(exist(''region'')), region = [-1 1 -1 1 100];end');
evalin('base','if (sum(abs(region(1:4))) == 0), region = [-1 1 -1 1 100];end');
evalin('base','[new_patterns, new_targets, new_params, region] = click_points(region);');
new_patterns = evalin('base','new_patterns');
new_targets = evalin('base','new_targets');
new_params = evalin('base','new_params');
s = questdlg('Do you want to permute the data (Recommended)?','Graphic input','Yes','No','Yes');
if strcmp(s,'Yes'),
i = randperm(length(new_targets));
new_targets = new_targets(i);
new_patterns = new_patterns(:,i);
end
if (evalin('base','exist(''patterns'')')),
patterns = evalin('base','patterns');
targets = evalin('base','targets');
else
patterns = [];
targets = [];
end
if (evalin('base','exist(''distribution_parameters'')')),
distribution_parameters = evalin('base','distribution_parameters');
else
distribution_parameters = [];
end
if isempty(distribution_parameters),
%If now patterns exist on the workspace, this is a new distribution, so take it
%(Otherwise, we may be saving only pars of the distribution)
if isempty(patterns)
distribution_parameters = new_params;
end
else
distribution_parameters(1).mu = [distribution_parameters(1).mu; new_params(1).mu];
distribution_parameters(2).mu = [distribution_parameters(2).mu; new_params(2).mu];
distribution_parameters(1).sigma= [distribution_parameters(1).sigma; new_params(1).sigma];
distribution_parameters(2).sigma= [distribution_parameters(2).sigma; new_params(2).sigma];
distribution_parameters(1).w = [distribution_parameters(1).w*sum(~targets); new_params(1).w*sum(~new_targets)];
distribution_parameters(2).w = [distribution_parameters(2).w*sum( targets); new_params(2).w*sum( new_targets)];
distribution_parameters(1).w = distribution_parameters(1).w / sum(distribution_parameters(1).w);
distribution_parameters(2).w = distribution_parameters(2).w / sum(distribution_parameters(2).w);
distribution_parameters(1).p = length(distribution_parameters(1).w) / (length(distribution_parameters(1).w)+length(distribution_parameters(2).w));
distribution_parameters(2).p = length(distribution_parameters(2).w) / (length(distribution_parameters(1).w)+length(distribution_parameters(2).w));
distribution_parameters(1).type = [distribution_parameters(1).type; new_params(1).type];
distribution_parameters(2).type = [distribution_parameters(2).type; new_params(2).type];
end
patterns = [patterns, new_patterns];
targets = [targets, new_targets];
assignin('base', 'patterns', patterns);
assignin('base', 'targets', targets);
assignin('base', 'distribution_parameters', distribution_parameters);
evalin('base','region = calculate_region(patterns, [zeros(1,4) 100]);')
classifier_commands('ClearBounds');
case 'Save'
evalin('base','[filename, pathname] = uiputfile(''*.mat'', ''Save file ...'');')
if (evalin('base','filename ~= 0')),
if (evalin('base', 'exist(''patterns'')')),
if (evalin('base', 'exist(''distribution_parameters'')')),
evalin('base','save([pathname filename], ''patterns'', ''targets'', ''distribution_parameters'');')
else
evalin('base','save([pathname filename], ''patterns'', ''targets'');')
end
else
if (evalin('base', 'exist(''distribution_parameters'')')),
evalin('base','save([pathname filename], ''distribution_parameters'');')
else
error('No data to save!')
end
end
end
case 'GenerateDistData'
if (evalin('base','~exist(''distribution_parameters'')')),
error('The parameters needed to generate the data are missing on the workspace!')
end
evalin('base','region = [0 0 0 0 100];')
evalin('base','[patterns, targets] = generate_data_set (distribution_parameters);')
evalin('base','region = calculate_region(patterns, [zeros(1,4) 100]);')
evalin('base','plot_scatter(patterns, targets, gcbf)')
classifier_commands('ClearBounds');
case 'Params'
%Print to mean, cov, main directions to workspace
if (evalin('base','~isempty(whos(''patterns''))'))
%There are patterns on workspace
patterns = evalin('base','patterns');
targets = evalin('base','targets');
train_one = find(targets == 1);
train_zero = find(targets == 0);
%Estimate mean and covariance for class 0
m0 = mean(patterns(:,train_zero)'');
c0 = cov(patterns(:,train_zero)'',1);
p0 = length(train_zero)/length(targets);
%Estimate mean and covariance for class 1
m1 = mean(patterns(:,train_one)'');
c1 = cov(patterns(:,train_one)'',1);
Chernoff = Chernoff(mean(patterns(:,train_zero)'), cov(patterns(:,train_zero)',1), mean(patterns(:,train_one)'), cov(patterns(:,train_one)',1),length(train_one)/length(targets));
Bhattacharyya = Bhattacharyya(mean(patterns(:,train_zero)'), cov(patterns(:,train_zero)',1), mean(patterns(:,train_one)'), cov(patterns(:,train_one)',1),length(train_one)/length(targets));
h0 = GaussianParameters;
set(findobj(h0,'Tag','txtMean00'),'String',num2str(m0(1),3))
set(findobj(h0,'Tag','txtMean01'),'String',num2str(m0(2),3))
set(findobj(h0,'Tag','txtMean10'),'String',num2str(m1(1),3))
set(findobj(h0,'Tag','txtMean11'),'String',num2str(m1(2),3))
set(findobj(h0,'Tag','txtCov000'),'String',num2str(c0(1,1),3))
set(findobj(h0,'Tag','txtCov001'),'String',num2str(c0(1,2),3))
set(findobj(h0,'Tag','txtCov010'),'String',num2str(c0(2,1),3))
set(findobj(h0,'Tag','txtCov011'),'String',num2str(c0(2,2),3))
set(findobj(h0,'Tag','txtCov100'),'String',num2str(c1(1,1),3))
set(findobj(h0,'Tag','txtCov101'),'String',num2str(c1(1,2),3))
set(findobj(h0,'Tag','txtCov110'),'String',num2str(c1(2,1),3))
set(findobj(h0,'Tag','txtCov111'),'String',num2str(c1(2,2),3))
set(findobj(h0,'Tag','txtBound1'),'String',['The Bhattacharyya bound value is: ' num2str(Bhattacharyya,3)])
set(findobj(h0,'Tag','txtBound2'),'String',['The Chernoff bound value is: ' num2str(Chernoff,3)])
waitfor(h0)
end
case 'MenuZoom'
umtoggle(findobj(gcbf,'Label','&Zoom'));
h = findobj(gcbf, 'Label', '&Zoom');
v = strcmp('on',get(h, 'Checked'));
if v,
zoom on
else
zoom off
end
case 'MenuGrid'
umtoggle(findobj(gcbf,'Label','&Grid'));
h = findobj(gcbf, 'Label', '&Grid');
v = strcmp('on',get(h, 'Checked'));
if v,
grid on
set(gca,'layer','top')
else
grid off
end
case 'Copy'
map = colormap;
h = figure;
copyobj(findobj(gcbf, 'Type','axes'),h);
set(gca,'Position',[0.1300 0.1100 0.7750 0.8150]);
set(h, 'colormap', map);
print -dmeta
case 'Print'
map = colormap;
h = figure;
copyobj(findobj(gcbf, 'Type','axes'),h);
set(gca,'Position',[0.1300 0.1100 0.7750 0.8150]);
set(h, 'colormap', map);
printpreview
case 'Exit'
h = findobj(gcbf, 'Tag', 'Messages');
set(h,'String','');
h = findobj('Tag', 'TestSetError');
set(h, 'String', '');
h = findobj('Tag', 'TrainSetError');
set(h, 'String', '');
h = findobj('Tag', 'FileNameInput');
set(h, 'String', '');
h = findobj('Tag', 'PercentTraining');
set(h, 'String', '');
h = findobj('Tag', 'Redraws');
set(h, 'String', '');
h = findobj('Tag', 'HowMany');
set(h, 'String', '');
set(gcf, 'pointer', 'arrow');
close
case 'SeparatePreprocessing'
umtoggle(findobj(gcbf,'Label','&Perform preprocessing separately for each class'));
case 'ShowPartitions'
umtoggle(findobj(gcbf,'Label','&Show center of partitions during training'));
case 'ShowVoronoiPartitions'
umtoggle(findobj(gcbf,'Label','Show &Voronoi regions during training'));
case 'ShowTrainingPoints'
umtoggle(findobj(gcbf,'Label','Show &Training points'));
case 'ShadeDecisionRegion'
umtoggle(findobj(gcbf,'Label','Shade &Decision Regions'));
case 'ClearBounds'
%Clear all bounds
evalin('base','hold off')
cla
if (evalin('base', 'exist(''patterns'') & exist(''targets'')'))
evalin('base','plot_scatter(patterns, targets, gcbf)')
end
if (evalin('base', 'exist(''region'')'))
evalin('base', 'axis(region(1:4))')
end
evalin('base', 'drawnow');
h = findobj('Tag', 'TestSetError');
set(h, 'String', '');
h = findobj('Tag', 'TrainSetError');
set(h, 'String', '');
h = findobj(gcbf, 'Label', '&Grid');
v = strcmp('on',get(h, 'Checked'));
if v,
grid on
set(gca,'layer','top')
else
grid off
end
h = findobj('Tag', 'Messages');
set(h,'String','');
case 'ClearWorkspace'
if strcmp(questdlg('Clear current data on the workspace?', 'Classification toolbox', 'Yes', 'No', 'Yes'), 'Yes')
%Clear all
h = findobj('Tag', 'TestSetError');
set(h, 'String', '');
h = findobj('Tag', 'TrainSetError');
set(h, 'String', '');
h = findobj('Tag', 'BayesError');
set(h, 'String', '');
h = findobj('Tag', 'FileNameInput');
set(h, 'String', '');
hold off
plot(0,0); grid on;
h = findobj('Tag', 'Messages');
set(h,'String','');
evalin('base','clear all')
end
case 'Mixpatterns'
%Mix (permute) the patterns
if (evalin('base','exist(''patterns'')') & evalin('base','exist(''targets'')')),
evalin('base','indexes = randperm(length(targets));')
evalin('base','patterns = patterns(:,indexes);')
evalin('base','targets = targets(indexes);')
h = findobj('Tag', 'Messages');
set(h,'String','patterns were permuted.');
else
error('No patterns or targets in workspace!');
end
case 'HelpPreprocessing'
h = findobj(gcbf, 'Tag', 'Preprocessing');
chosen = get(h, 'Value');
evalin('base', ['help ' Preprocessing_methods(chosen).Name ])
case 'HelpClassifier'
h = findobj(gcbf, 'Tag', 'Algorithm');
chosen = get(h, 'Value');
evalin('base', ['help ' Algorithms(chosen).Name ])
case 'About'
im = imread('about','bmp');
plot(0,0)
h = image(im);
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -