⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 classifier_commands.m

📁 用于分类的一个工具箱
💻 M
📖 第 1 页 / 共 2 页
字号:
        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 + -