📄 classifier_commands.m
字号:
h = findobj('Tag', 'TrainSetError');
set(h, 'String', '');
evalin('base','set(findobj(''Tag'', ''FileNameInput''), ''String'', [pathname filename]);')
evalin('base','[features, targets, distribution_parameters] = load_file([pathname, filename], region);')
evalin('base','clear pathname filename');
if (evalin('base', 'isempty(distribution_parameters)')),
evalin('base', 'clear distribution_parameters');
end
if (evalin('base', '~isempty(features)'))
evalin('base','region = calculate_region(features, [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 Gaussians in class 0:',ttl,1,cellstr(num2str(1)))));
n1 = str2num(char(inputdlg('Enter the number of Gaussians in class 1:',ttl,1,cellstr(num2str(1)))));
distribution_parameters.p0 = str2num(char(inputdlg('Enter the probability of class 0:',ttl,1,cellstr(num2str(0.5)))));
distribution_parameters.m0 = zeros(n0,2);
distribution_parameters.m1 = zeros(n1,2);
distribution_parameters.s0 = zeros(n0,2,2);
distribution_parameters.s1 = zeros(n1,2,2);
for i = 1:n0,
distribution_parameters.s0(i,:,:) = eye(2);
end
for i = 1:n1,
distribution_parameters.s1(i,:,:) = eye(2);
end
distribution_parameters.w0 = ones(n0,1)/n0;
distribution_parameters.w1 = ones(n1,1)/n1;
save synthetic distribution_parameters
uiwait(enter_distributions);
evalin('base','region = [0 0 0 0 500];')
evalin('base','distribution_parameters = load_file(''synthetic'', region);')
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_features, new_targets, new_params, region] = click_points(region);');
new_features = evalin('base','new_features');
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_features = new_features(:,i);
end
if (evalin('base','exist(''features'')')),
features = evalin('base','features');
targets = evalin('base','targets');
else
features = [];
targets = [];
end
if (evalin('base','exist(''distribution_parameters'')')),
distribution_parameters = evalin('base','distribution_parameters');
else
distribution_parameters = [];
end
if isempty(distribution_parameters),
%If now features exist on the workspace, this is a new distribution, so take it
%(Otherwise, we may be saving only pars of the distribution)
if isempty(features)
distribution_parameters = new_params;
end
else
distribution_parameters.m0=[distribution_parameters.m0; new_params.m0];
distribution_parameters.m1=[distribution_parameters.m1; new_params.m1];
distribution_parameters.s0=[distribution_parameters.s0; new_params.s0];
distribution_parameters.s1=[distribution_parameters.s1; new_params.s1];
distribution_parameters.w0=[distribution_parameters.w0*sum(~targets); new_params.w0*sum(~new_targets)];
distribution_parameters.w1=[distribution_parameters.w1*sum( targets); new_params.w1*sum( new_targets)];
distribution_parameters.w0=distribution_parameters.w0/sum(distribution_parameters.w0);
distribution_parameters.w1=distribution_parameters.w1/sum(distribution_parameters.w1);
distribution_parameters.p0=length(distribution_parameters.w0)/(length(distribution_parameters.w0)+length(distribution_parameters.w1));
end
features = [features, new_features];
targets = [targets, new_targets];
assignin('base', 'features', features);
assignin('base', 'targets', targets);
assignin('base', 'distribution_parameters', distribution_parameters);
evalin('base','region = calculate_region(features, [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(''features'')')),
if (evalin('base', 'exist(''distribution_parameters'')')),
evalin('base','save([pathname filename], ''features'', ''targets'', ''distribution_parameters'');')
else
evalin('base','save([pathname filename], ''features'', ''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','[features, targets] = generate_data_set (distribution_parameters, region);')
evalin('base','region = calculate_region(features, [zeros(1,4) 100]);')
classifier_commands('ClearBounds');
case 'Params'
%Print to mean, cov, main directions to workspace
if (evalin('base','~isempty(whos(''features''))'))
%There are features on workspace
features = evalin('base','features');
targets = evalin('base','targets');
train_one = find(targets == 1);
train_zero = find(targets == 0);
%Estimate mean and covariance for class 0
m0 = mean(features(:,train_zero)'');
c0 = cov(features(:,train_zero)'',1);
p0 = length(train_zero)/length(targets);
%Estimate mean and covariance for class 1
m1 = mean(features(:,train_one)'');
c1 = cov(features(:,train_one)'',1);
Chernoff = Chernoff(mean(features(:,train_zero)'), cov(features(:,train_zero)',1), mean(features(:,train_one)'), cov(features(:,train_one)',1),length(train_one)/length(targets));
Bhattacharyya = Bhattacharyya(mean(features(:,train_zero)'), cov(features(:,train_zero)',1), mean(features(:,train_one)'), cov(features(:,train_one)',1),length(train_one)/length(targets));
Discriminability = Discriminability(mean(features(:,train_zero)'), cov(features(:,train_zero)',1), mean(features(:,train_one)'), cov(features(:,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)])
set(findobj(h0,'Tag','txtDiscriminability'),'String',['The discriminability value is: ' num2str(Discriminability,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 '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(''features'') & exist(''targets'')'))
evalin('base','plot_scatter(features, 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 'MixFeatures'
%Mix (permute) the features
if (evalin('base','exist(''features'')') & evalin('base','exist(''targets'')')),
evalin('base','indexes = randperm(length(targets));')
evalin('base','features = features(:,indexes);')
evalin('base','targets = targets(indexes);')
h = findobj('Tag', 'Messages');
set(h,'String','Features were permuted.');
else
error('No features 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 + -