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

📄 demossl.m

📁 一个Matlab写的关于图理论以及其在机器学习中应用的教学用GUI软件
💻 M
📖 第 1 页 / 共 3 页
字号:
function varargout = DemoSSL(varargin)
% Usage: DemoSSL()
% 
% Opens a large window, with all sorts of knobs and sliders. Just play :-) 
% 
% Documentation can be found at the GraphDemo webpage. 
% Written by Matthias Hein and Ulrike von Luxburg



% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name',       mfilename, ...
                   'gui_Singleton',  gui_Singleton, ...
                   'gui_OpeningFcn', @DemoSSL_OpeningFcn, ...
                   'gui_OutputFcn',  @DemoSSL_OutputFcn, ...
                   'gui_LayoutFcn',  [] , ...
                   'gui_Callback',   []);
if nargin && ischar(varargin{1})
    gui_State.gui_Callback = str2func(varargin{1});
end

if nargout
    [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
    gui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT

% --- Executes just before DemoSSL is made visible.
function DemoSSL_OpeningFcn(hObject, eventdata, handles, varargin)
% This function has no output args, see OutputFcn.
% hObject    handle to figure
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
% varargin   command line arguments to DemoSSL (see VARARGIN)


% ULE: 
% to avoid the following weird error message: 
% Warning: RGB color data not yet supported in Painter's mode.
% is due to automatic choice of renderer by matlab. 
set(gcf, 'Renderer', 'Zbuffer')
warning('off','MATLAB:dispatcher:InexactMatch')



global ALLDATA_SSL;
global SSLDATA;
ALLDATA_SSL = struct('Dim'  , 3, 'MinDim'   , 2, 'MaxDim'    , 200, 'Num', 500, 'NumLabels', 20 , 'MinLabels', 1, 'MaxLabels', 500, 'NumKNN', 5,  'MinKNN', 1, 'MaxKNN', 200, 'Eps', 0.3, 'MinEps', 0.01, 'MaxEps', 10.0, 'Density', 1, 'x',0, 'y', 0, 'Labeled', 0, 'GraphType', 1, 'K', 0, 'Gamma',1,'MaxGamma',10,'MinGamma',0.1);
SSLDATA = struct('Regul', 1, 'MinRegul',1E-12,'MaxRegul',1E+2,'TestError', 1, 'NotLabeled', 0, 'TrainError', 0, 'Output',0);

% Choose default command line output for DemoSSL
handles.output = hObject;

% Update handles structure
guidata(hObject, handles);
main=handles.figure1;
scrsz = get(0,'ScreenSize');
%set(main,'Position',[scrsz(1) scrsz(2) scrsz(3) scrsz(4)])

% set controls to the initial values
set(handles.SldNumNeighbors,'Value',(ALLDATA_SSL.NumKNN-ALLDATA_SSL.MinKNN)/(ALLDATA_SSL.MaxKNN-ALLDATA_SSL.MinKNN));
set(handles.SldNumLabels,'Value',(ALLDATA_SSL.NumLabels-ALLDATA_SSL.MinLabels)/(ALLDATA_SSL.MaxLabels-ALLDATA_SSL.MinLabels));
set(handles.SldDim,'Value',(ALLDATA_SSL.Dim-ALLDATA_SSL.MinDim)/(ALLDATA_SSL.MaxDim-ALLDATA_SSL.MinDim));
set(handles.SldWeights,'Value',(ALLDATA_SSL.Gamma-ALLDATA_SSL.MinGamma)/(ALLDATA_SSL.MaxGamma-ALLDATA_SSL.MinGamma));
% set all static text elements
set(handles.TxtNumNeighbors,'String',num2str(ALLDATA_SSL.NumKNN));
set(handles.TxtNumLabels,'String',num2str(ALLDATA_SSL.NumLabels));
set(handles.TxtDim,'String',num2str(ALLDATA_SSL.Dim));
set(handles.TxtWeights,'String',num2str(ALLDATA_SSL.Gamma));

% update slider for labeled data
set(handles.SldNumLabels,'SliderStep',[1/ALLDATA_SSL.MaxLabels,10/ALLDATA_SSL.MaxLabels]);


% generate data (inital dataset: two moons with balanced classes)
[ALLDATA_SSL.x,ALLDATA_SSL.y]=GD_GenerateData(2,ALLDATA_SSL.Num,3,[0.5,0.5],0.01);
% initialize labeled data
ALLDATA_SSL.Labeled = randperm(ALLDATA_SSL.Num);
ALLDATA_SSL.Labeled = ALLDATA_SSL.Labeled(1:ALLDATA_SSL.NumLabels);

% draw it in the input window
DrawData(handles.axes4);

% build and draw graph
BuildWeights();
DrawWeights(handles.axes2);

% get and set components
numComps = CompComps();
set(handles.TxtNumComps,'String',num2str(numComps));

[EdInBet,EdBet,WBet,WInBet]=getEdgeStatistics();
% set all static text elements for the graph Statistics
set(handles.TxtWBet,'String',num2str(WBet,'%2.2f'));
set(handles.TxtWInBet,'String',num2str(WInBet,'%2.2f'));
set(handles.TxtEdgeBet,'String',num2str(EdBet,'%2.0d'));
set(handles.TxtEdgeInBet,'String',num2str(EdInBet,'%2.0d'));
set(handles.TxtTotalNumberPoints,'String',['Total number of points: ',num2str(ALLDATA_SSL.Num)]);



% set regularization parameter
set(handles.TxtRegul,'String',num2str(SSLDATA.Regul,'%2.2e'));

% set slider of regularization parameter
value=log(SSLDATA.Regul);
value = (value - log(SSLDATA.MinRegul))/(log(SSLDATA.MaxRegul)-log(SSLDATA.MinRegul));
set(handles.SldRegul,'Value',SSLDATA.Regul);



% initialize SSL solution
laplacian=2;
lambda=0;
LabelVector = zeros(ALLDATA_SSL.Num,1);
LabelVector(ALLDATA_SSL.Labeled)=ALLDATA_SSL.y(ALLDATA_SSL.Labeled);
[output,d]=GD_PerformSSL(ALLDATA_SSL.K, LabelVector, max(ALLDATA_SSL.y), laplacian, lambda, SSLDATA.Regul);
[SSLDATA.TestError, SSLDATA.TrainError,SSLDATA.NotLabeled,SSLDATA.Output]= GD_EvalSolution(ALLDATA_SSL.y,output,ALLDATA_SSL.Labeled);
ShowOutput(handles.axes3);

set(handles.TxtTestError,'String',[num2str(100*SSLDATA.TestError,'%2.1f'),'%']);
set(handles.TxtTrainError,'String',[num2str(100*SSLDATA.TrainError,'%2.1f'),'%']);
set(handles.TxtNotLabeled,'String',[num2str(100*SSLDATA.NotLabeled,'%2.1f'),'%']);






% UIWAIT makes DemoSSL wait for user response (see UIRESUME)
% uiwait(handles.figure1);


% --- Outputs from this function are returned to the command line.
function varargout = DemoSSL_OutputFcn(hObject, eventdata, handles)
% varargout  cell array for returning output args (see VARARGOUT);
% hObject    handle to figure
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% Get default command line output from handles structure
varargout{1} = handles.output;

% --- Executes on button press in PshNewData.
function PshNewData_Callback(hObject, eventdata, handles)
% hObject    handle to PshNewData (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
global ALLDATA_SSL;

axes(handles.axes4);
cla;

popup_sel_index = get(handles.popupmenu1, 'Value');
switch popup_sel_index
     case 1 % Two Moons with balanced classes [0.5,0.5]
       ALLDATA_SSL.Density=2;
       % generate data 
       ALLDATA_SSL.Num=500;
       [ALLDATA_SSL.x,ALLDATA_SSL.y]=GD_GenerateData(ALLDATA_SSL.Density,ALLDATA_SSL.Num,ALLDATA_SSL.Dim,[0.5,0.5],0.01);
       
    case 2 % Two Moons with unbalanced classes [0.2,0.8]
       ALLDATA_SSL.Density=2;
       % generate data 
       ALLDATA_SSL.Num=500;
       [ALLDATA_SSL.x,ALLDATA_SSL.y]=GD_GenerateData(ALLDATA_SSL.Density,ALLDATA_SSL.Num,ALLDATA_SSL.Dim,[0.2,0.8],0.01);
      
    case 3 % Two isotropic Gaussians balanced classes [0.5,0.5]
      ALLDATA_SSL.Density=3;
      % generate data 
      ALLDATA_SSL.Num=500;
      [ALLDATA_SSL.x,ALLDATA_SSL.y]=GD_GenerateData(ALLDATA_SSL.Density,ALLDATA_SSL.Num,ALLDATA_SSL.Dim,[0.5,0.5,0],0.01);
     
    case 4 % Two isotropic Gaussians unbalanced classes [0.2,0.8]
      ALLDATA_SSL.Density=3;
      % generate data 
      ALLDATA_SSL.Num=500;
      [ALLDATA_SSL.x,ALLDATA_SSL.y]=GD_GenerateData(ALLDATA_SSL.Density,ALLDATA_SSL.Num,ALLDATA_SSL.Dim,[0.2,0.8,0],0.01);
      
    case 5 % Two isotropic Gaussians with different variance and balanced classes [0.2,0.8]
      ALLDATA_SSL.Density=4;
      % generate data 
      ALLDATA_SSL.Num=500;
      [ALLDATA_SSL.x,ALLDATA_SSL.y]=GD_GenerateData(ALLDATA_SSL.Density,ALLDATA_SSL.Num,ALLDATA_SSL.Dim,[0.5,0.5,0],0.01);
    
    case 6 % two isotropic Gaussians where the decision boundary goes through the middle of the Gaussians
       ALLDATA_SSL.Density=5;
       ALLDATA_SSL.Num=500;
       [ALLDATA_SSL.x,ALLDATA_SSL.y]=GD_GenerateData(ALLDATA_SSL.Density,ALLDATA_SSL.Num,ALLDATA_SSL.Dim,[0.5,0.5,0],0.01);
       
    case 7 % Three isotropic Gaussians almost balanced [0.3,0.3,0.4]
       ALLDATA_SSL.Density=3;
       % generate data 
       ALLDATA_SSL.Num=500;
       [ALLDATA_SSL.x,ALLDATA_SSL.y]=GD_GenerateData(ALLDATA_SSL.Density,ALLDATA_SSL.Num,ALLDATA_SSL.Dim,[0.3,0.3,0.4],0.01);
    
    
          
    case 8
        ALLDATA_SSL.Density=6;
        load GD_USPSTrain;
        xtrain=x; ytrain=y;
        load GD_USPSTest;
        xtest=x; ytest=y;
        %ALLDATA_SSL.x = [xtrain', xtest'];
        %ALLDATA_SSL.y = [ytrain; ytest];
        ALLDATA_SSL.x = [xtest'];
        ALLDATA_SSL.y = [ytest+1];
        ALLDATA_SSL.Num = length(ALLDATA_SSL.y);
        cla(handles.axes2);
        cla(handles.axes3);
        cla(handles.axes4);
end
% update slider for labeled data
set(handles.SldNumLabels,'SliderStep',[1/ALLDATA_SSL.MaxLabels,10/ALLDATA_SSL.MaxLabels]);

% update labeled data
ALLDATA_SSL.Labeled = randperm(ALLDATA_SSL.Num);
ALLDATA_SSL.Labeled = ALLDATA_SSL.Labeled(1:ALLDATA_SSL.NumLabels);

UpdateALL(handles);







% --- Executes on selection change in popupmenu1.
function popupmenu1_Callback(hObject, eventdata, handles)
% hObject    handle to popupmenu1 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% Hints: contents = get(hObject,'String') returns popupmenu1 contents as cell array
%        contents{get(hObject,'Value')} returns selected item from popupmenu1
global ALLDATA_SSL;

axes(handles.axes4);
cla;

popup_sel_index = get(handles.popupmenu1, 'Value');
switch popup_sel_index
    case 1 % Two Moons with balanced classes [0.5,0.5]
       ALLDATA_SSL.Density=2;
       % generate data 
       ALLDATA_SSL.Num=500;
       [ALLDATA_SSL.x,ALLDATA_SSL.y]=GD_GenerateData(ALLDATA_SSL.Density,ALLDATA_SSL.Num,ALLDATA_SSL.Dim,[0.5,0.5],0.01);
       
    case 2 % Two Moons with unbalanced classes [0.2,0.8]
       ALLDATA_SSL.Density=2;
       % generate data 
       ALLDATA_SSL.Num=500;
       [ALLDATA_SSL.x,ALLDATA_SSL.y]=GD_GenerateData(ALLDATA_SSL.Density,ALLDATA_SSL.Num,ALLDATA_SSL.Dim,[0.2,0.8],0.01);
      
    case 3 % Two isotropic Gaussians balanced classes [0.5,0.5]
      ALLDATA_SSL.Density=3;
      % generate data 
      ALLDATA_SSL.Num=500;
      [ALLDATA_SSL.x,ALLDATA_SSL.y]=GD_GenerateData(ALLDATA_SSL.Density,ALLDATA_SSL.Num,ALLDATA_SSL.Dim,[0.5,0.5,0],0.01);
     
    case 4 % Two isotropic Gaussians unbalanced classes [0.2,0.8]
      ALLDATA_SSL.Density=3;
      % generate data 
      ALLDATA_SSL.Num=500;
      [ALLDATA_SSL.x,ALLDATA_SSL.y]=GD_GenerateData(ALLDATA_SSL.Density,ALLDATA_SSL.Num,ALLDATA_SSL.Dim,[0.2,0.8,0],0.01);
      
    case 5 % Two isotropic Gaussians with different variance and balanced classes [0.2,0.8]
      ALLDATA_SSL.Density=4;
      % generate data 
      ALLDATA_SSL.Num=500;
      [ALLDATA_SSL.x,ALLDATA_SSL.y]=GD_GenerateData(ALLDATA_SSL.Density,ALLDATA_SSL.Num,ALLDATA_SSL.Dim,[0.5,0.5,0],0.01);
   
    case 6 % two isotropic Gaussians where the decision boundary goes through the middle of the Gaussians
       ALLDATA_SSL.Density=5;
       ALLDATA_SSL.Num=500;
       [ALLDATA_SSL.x,ALLDATA_SSL.y]=GD_GenerateData(ALLDATA_SSL.Density,ALLDATA_SSL.Num,ALLDATA_SSL.Dim,[0.5,0.5,0],0.01);
    
    case 7 % Three isotropic Gaussians almost balanced [0.3,0.3,0.4]
       ALLDATA_SSL.Density=3;
       % generate data 
       ALLDATA_SSL.Num=500;
       [ALLDATA_SSL.x,ALLDATA_SSL.y]=GD_GenerateData(ALLDATA_SSL.Density,ALLDATA_SSL.Num,ALLDATA_SSL.Dim,[0.3,0.3,0.4],0.01); 
          
    case 8
        ALLDATA_SSL.Density=6;   
        load GD_USPSTrain;
        xtrain=x; ytrain=y;
        load GD_USPSTest;
        xtest=x; ytest=y;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -