2014-10-25 2 views
0

Я уже много лет борется с этим. Я не могу понять, почему у меня процентная ошибка в тысячах. Я пытаюсь выяснить персептрон между X1 и X2, которые являются гауссовыми распределенными наборами данных с различными средствами и идентичными ковариациями. Мой код:MATLAB Perceptron

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; 

Любая помощь будет оценена по достоинству. Спасибо

+0

Вы отсутствуют некоторые определения - 'X1',' X2' (которые 100x2 матрицы), 'Nts' (который я угадать просто «N/2') - без них ваша проблема не может быть реплицирована (или, по крайней мере, не легко). –

ответ

2

У вас есть ошибка в вычислении ошибки.

На этой линии:

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

find возвращает индексы совпадающих элементов. Для вашей точности измерения вы не хотите, те, вы просто хотите подсчет:

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

Если я произвожу X1 = randn(100,2); X2 = randn(100,2); и предположим Nts=100, я получаю 2808% для вашего кода, и ожидается, 50% ошибок (не лучше, чем гадать потому что мои тестовые данные не могут быть разделены) для исправленной версии.

Update - модель персептрона была более тонкая ошибка тоже, см: https://datascience.stackexchange.com/questions/2353/matlab-perceptron

+0

Спасибо! Это привело к моей ошибке примерно до 50%. Я использовал другие методы (байки), и данные в значительной степени разделены. Я считаю, что процентная ошибка должна быть намного меньше – ElevenEleven

+0

Базовый персептрон будет находить только линейные разделения в данных. Возможно, вы могли бы задать другой вопрос (на http://datascience.stackexchange.com/), если ваша модель не делает то, что вы ожидаете. Вам нужно будет указать точный код, который вы используете для генерации X1 и X2, если это так, а также ваша модель, потому что вы можете делать предположения о том, как данные отделяются от классов. –

+0

сделаю. благодаря – ElevenEleven

Смежные вопросы