/ / MATLAB Perceptron - matlab, nauka maszynowa

MATLAB Perceptron - matlab, uczenie maszynowe

Przez jakiś czas zmagałem się z tymjuż czas. Wydaje mi się, że nie wiem, dlaczego mam błąd procentowy w tysiącach. Próbuję znaleźć perceptron między X1 i X2, które są rozproszonymi zbiorami danych Gaussa z różnymi środkami i identycznymi kowariancjami. Mój kod:

N=200;
X = [X1; X2];
X = [X ones(N,1)]; %bias
y = [-1*ones(N/2,1); ones(N/2,1)]; %classification

%Split data into training and test
ii = randperm(N);
Xtr = X(ii(1:N/2),:);
ytr = X(ii(1:N/2),:);
Xts = X(ii(N/2+1:N),:);
yts = y(ii(N/2+1:N),:);

w = randn(3,1);
eta = 0.001;
%learn from training set
for iter=1:500
j = ceil(rand*N/2);
if( ytr(j)*Xtr(j,:)*w < 0)
w = w + eta*Xtr(j,:)";
end
end

%apply what you have learnt to test set
yhts = Xts * w;
disp([yts yhts])
PercentageError = 100*sum(find(yts .*yhts < 0))/Nts;

Każda pomoc będzie doceniona. Dziękuję Ci

Odpowiedzi:

2 dla odpowiedzi № 1

Masz błąd w obliczaniu błędów.

W tej linii:

PercentageError = 100*sum(find(yts .*yhts < 0))/Nts;

The find zwraca indeksy pasujących elementów. Dla twojej dokładności nie chcesz tego, po prostu chcesz liczyć:

PercentageError = 100*sum( yts .*yhts < 0 )/Nts;

Jeśli wygeneruję X1 = randn(100,2); X2 = randn(100,2); i załóżmy Nts=100, Otrzymuję 2808% dla twojego kodu i spodziewam się 50% błędu (nie lepiej niż zgadywanie, ponieważ moje dane testowe nie mogą być rozdzielone) dla poprawionej wersji.

Aktualizacja - model perceptron miał też bardziej subtelny błąd, zobacz: https://datascience.stackexchange.com/questions/2353/matlab-perceptron