I´m reviewing a code from Toronto perceptron MATLAB code
The code is
function [w] = perceptron(X,Y,w_init)
w = w_init;
for iteration = 1 : 100 %<- in practice, use some stopping criterion!
for ii = 1 : size(X,2) %cycle through training set
if sign(w'*X(:,ii)) ~= Y(ii) %wrong decision?
w = w + X(:,ii) * Y(ii); %then add (or subtract) this point to w
end
end
sum(sign(w'*X)~=Y)/size(X,2) %show misclassification rate
end
So I was reading how to apply this function to data matrix X, and target Y, but, do not know how to use this function, I understand, it returns a vector of weights, so it can classify.
Could you please give an example, and explain it??
I´ve tried
X=[0 0; 0 1; 1 1]
Y=[1 0; 2 1]
w=[1 1 1]
Result = perceptron( X, Y, w )
??? Error using ==> mtimes
Inner matrix dimensions must agree.
Error in ==> perceptron at 15
if sign(w'*X(:,ii)) ~= Y(ii)
Result = perceptron( X, Y, w' )
??? Error using ==> ne
Matrix dimensions must agree.
Error in ==> perceptron at 19
sum(sign(w'*X)~=Y) / size(X,2);
Thanks
Thank you for the anwers, I got one more, If I change the Y = [0, 1], what happens to the algorithm?.
So, Any input data will not work with Y = [0,1] with this code of the perceptron right?,
-----------------------------EDIT------------------------
One more question, if I want to plot the line that divides the 2 classes, I know we can get that the line solving linear equation system that has to do with weights, but how, what could I do?, I'm trying something like
% the initial weights
w_init = [ 1 1 1]';
% the weights returned from perceptron
wtag = perceptron(X,Y,w_init,15);
% concatenate both
Line = [wtag,w_init]
% solve the linear system, am I correct doing this?
rref(Line')
% plot???
You should first understand what is the meaning of each of the inputs:
X
is the input matrix of examples, of size M x N, where M is the dimension of the feature vector, and N the number of samples. Since the perceptron model for prediction isY=w*X+b
, you have to supply one extra dimension inX
which is constant, usually set to1
, so theb
term is "built-in" intoX
. In the example below forX
, I set the last entry ofX
to be1
in all samples.Y
is the correct classification for each sample fromX
(the classification you want the perceptron to learn), so it should be a N dimensional row vector - one output for each input example. Since the perceptron is a binary classifier, it should have only 2 distinct possible values. Looking in the code, you see that it checks for the sign of the prediction, which tells you that the allowed values ofY
should be-1,+1
(and not0,1
for example).w
is the weight vector you are trying to learn.So, try to call the function with:
EDIT
Use the following code to call the perceptron alg and see the results graphically:
try this:
If you are interested, here is a little perceptron demo written in quite a tutorial manner: