classdef LinearPerceptron < handle % Linear perceptron learns a (D-1) dimensional hyperplane for % D-dimensional data. Can only solve linear separable problems with two % classes. % Florian Raudies, 01/09/2014, Boston University. properties (SetAccess = private) W % Weight. theta % Threshold. end properties my % Damping parameter. nMaxStep % Maximum number of steps. nStep % Steps taken to converge. eta % Error threshold. verbose % Print infos. end methods % Constructor. function obj = LinearPerceptron() obj.my = 1e-3; obj.nMaxStep = 1e+3; obj.eta = 1e-2; obj.verbose = 0; end % Training algorithm. function obj = train(obj, Data, Label) nDim = size(Data,2); nData = size(Data,1); obj.W = rand(nDim,1); obj.theta = rand; obj.nStep = obj.nMaxStep; for iStep = 1:obj.nMaxStep X = Data*obj.W; errSum = 0; for iData = 1:nData, y = double( (X(iData) - obj.theta) >= 0); d = Label(iData) - y; obj.W = obj.W + obj.my*Data(iData,:)'*d; obj.theta = obj.theta - obj.my*d; errSum = errSum + d^2; end if errSum < obj.eta, obj.nStep = iStep; if obj.verbose, fprintf('%d steps.\n',iStep); end break; end end end % Prediction 'P' of classes for data 'Data'. function P = predict(obj,Data) P = double( (Data*obj.W - obj.theta) >= 0); end % Get weight 'W'. function W = getWeight(obj) W = obj.W; end % Get threshold 'theta'. function theta = getThreshold(obj) theta = obj.theta; end end end