Estoy revisando un código de Toronto perceptron MATLAB codeImplementación y ploting un perceptrón en MATLAB
El código es
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
Así que estaba leyendo cómo aplicar esta función a los datos de la matriz X, Y y el objetivo, pero, no sé cómo usar esta función, entiendo, devuelve un vector de pesos, por lo que puede clasificar.
¿Podría dar un ejemplo y explicarlo?
He tratado
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);
Gracias
Gracias por los anwers, tengo uno más, Si cambio de la Y = [0, 1], lo que ocurre con el algoritmo ?.
Por lo tanto, cualquier dato de entrada no funcionarán con Y = [0,1] con este código de la perceptrón derecho ?,
-------------- --------------- EDITAR ------------------------
Una pregunta más, si Quiero trazar la línea que divide las 2 clases, sé que podemos conseguir que la línea de la resolución de sistemas de ecuaciones lineales que tiene que ver con los pesos, sino cómo, ¿qué podía hacer ?, estoy intentando algo así como
% 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???
¡¡¡Buena respuesta !! – qdjm
Muchas gracias, realmente entiendo tu ejemplo, pero tengo una pregunta más: ¿Qué harías si la clase 1 tuviera más ejemplos que la clase 0? en el ejemplo que proporcionó hay el mismo número de ejemplos para ambas clases, X1 y X2 – cMinor
¿Es correcto, no puedo probarlo ahora mismo? X1 = [rand (1,100); rand (1,100); unos (1,100)]; % clase '+1' X2 = [rand (1300); 1 + rand (1300); unos (1300)]; % clase '-1' X = [X1, X2]; % clase de salida [-1, + 1]; Y = [- unos (1,100), unos (1,300)]; % init vector de peso w = [.5 .5 .5] '; wtag = perceptron (X, Y, w); – cMinor