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

📄 mperceptron.m~

📁 很好的matlab模式识别工具箱
💻 M~
字号:
function model = mpeceptron( data, options, init_model )% MPERCEPTRON Perceptron algorithm to train linear machine.%% Synopsis:%  model = mpeceptron(data)%  model = mpeceptron(data,options)%  model = mpeceptron(data,options,init_model)%% Description:%  model = mperceptron(data) uses the Perceptron learning rule%   to train linear machine (multi-class linear classitfier).%   The multi-class problem is transformed to the single-class%   one using the Kessler's construction [DHS01].%%  model = mperceptron(data,options) specifies stopping condition of%   the algorithm in structure options:%    .tmax [1x1]... maximal number of iterations.%%  model = mperceptron(data,options,init_model) specifies initial %   model which must contain:%    .W [dim x nclass] ... Normal vectors.%    .b [nclass x 1] ... Biases.%% Input:%  data [struct] Labeled training data:%   .X [dim x num_data] Training vectors.%   .y [1 x num_data] Labels (1,2,...,nclass).%%  options [struct] %   .tmax [1x1] Maximal number of iterations (default tmax=inf).%  %  init_model [struct] Initial model; must contain items .W, .b.%% Output:%  model [struct] Multi-class linear classifier:%   .W [dim x nclass] Normal vectors.%   .b [nclass x 1] Biases.%%   .exitflag [1x1] 1 ... perceptron has converged.%                   0 ... number of iterations exceeded tmax.%   .t [1x1] Number of iterations.%% Example:%  data = load('pentagon');%  model = mperceptron( data );%  figure; ppatterns( data ); pboundary( model );%% See also%  PERCEPTRON, LINCLASS, EKOZINEC.%% Modifications:% 21-may-2004, VF% 18-may-2004, VF% input arguments%----------------------------------------[dim,num_data] = size(data.X);nclass = max(data.y);if nargin < 2, options = []; else options = c2s(options); endif ~isfield(options,'tmax'), options.tmax = inf; end if nargin == 3,  model = init_model;else  model.W = zeros(dim,nclass);  model.b = zeros(nclass,1);endmodel.t = 0;% main loop% -----------------------------------model.exitflag = 0;while options.tmax > model.t & model.exitflag == 0,  model.t = model.t+1;  model.exitflag = 1;    % search for misclassified vector  for i=1:nclass,    class_i = find( data.y == i);    dfce_i = model.W(:,i)'*data.X(:,class_i) + model.b(i);    for j=setdiff([1:nclass], i),           dfce_j = model.W(:,j)'*data.X(:,class_i) + model.b(j);            [min_diff,inx] = min( dfce_i - dfce_j);            if min_diff <= 0,        % Perceptron rule                % take index of misclassified vector        inx=class_i(inx(1));        model.W(:,i) = model.W(:,i) + data.X(:,inx);        model.b(i) = model.b(i) + 1;        model.W(:,j) = model.W(:,j) - data.X(:,inx);        model.b(j) = model.b(j) - 1;                % error was found        model.exitflag = 0;        break;      end          end    if model.exitflag == 0, break; end  end  endmodel.fun = 'linclass';return;% EOF

⌨️ 快捷键说明

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