Ja som s tým zápasil dosťteraz. I cant Zdá sa, že prísť na to, prečo mám percentuálnu chybu v tisícoch. Snažím sa zistiť perceptrón medzi X1 a X2, ktoré sú Gaussovými distribuovanými dátovými súbormi s odlišnými prostriedkami a identickými kovarianciami.
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;
Akákoľvek pomoc by bola ocenená. Ďakujem
odpovede:
2 pre odpoveď č. 1Vo výpočte chýb máte chybu.
Na tomto riadku:
PercentageError = 100*sum(find(yts .*yhts < 0))/Nts;
Na find
vracia indexy zodpovedajúcich položiek. Pre vašu mieru presnosti nechcete, aby ste to chceli.
PercentageError = 100*sum( yts .*yhts < 0 )/Nts;
Ak vygenerujem X1 = randn(100,2); X2 = randn(100,2);
a predpokladať Nts=100
, Dostanem 2808% pre váš kód a očakávanú 50% chybu (nie lepšiu ako odhad, pretože moje testovacie údaje nemožno oddeliť) pre opravenú verziu.
Aktualizácia - model perceptron mal aj jemnejšiu chybu, pozri: https://datascience.stackexchange.com/questions/2353/matlab-perceptron