sto rivedendo un codice da Toronto perceptron MATLAB codeImplementazione e ploting un percettrone in MATLAB
Il codice è
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
Così stavo leggendo come applicare questa funzione per i dati matrice X e Y bersaglio, ma, non so come usare questa funzione, capisco, restituisce un vettore di pesi, quindi può classificarlo.
Potrebbe per favore dare un esempio e spiegarlo ??
Ive ha provato
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);
Grazie
Grazie per i anwers, ho avuto uno di più, Se cambio la Y = [0, 1], che cosa succede all'algoritmo ?.
Quindi, eventuali dati di ingresso non funzionano con Y = [0,1] con questo codice del percettrone destra ?,
-------------- --------------- EDIT ------------------------
Un'altra domanda, se Voglio tracciare la linea che divide le 2 classi, so che possiamo ottenere quella linea che risolve il sistema di equazioni lineari che ha a che fare con i pesi, ma come, cosa posso fare ?, sto provando qualcosa come
% 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???
Risposta piacevole !! – qdjm
Grazie mille, ho davvero capito il tuo esempio, ma ho ancora una domanda: Cosa faresti se la classe 1 avesse più esempi della classe 0 ?? nell'esempio fornito ci sono lo stesso numero di esempi per entrambe le classi, X1 e X2 – cMinor
È corretto, non posso verificarlo adesso: X1 = [rand (1.100); rand (1.100); uno (1.100)]; % classe '+1' X2 = [rand (1.300); 1 + rand (1.300); uno (1.300)]; % class '-1' X = [X1, X2]; classe di uscita% [-1, + 1]; Y = [- uno (1.100), uno (1.300)]; vettore peso iniziale% w = [.5 .5 .5] '; wtag = perceptron (X, Y, w); – cMinor