我似乎不明白为什么我有一个很高的百分比错误。
我试图在X1和X2之间找到一个感知器,它们是具有不同均值和相同协方差的高斯分布数据集。
下面是我的代码:
N=200;
C= [2 1; 1 2]; %Covariance
m1=[0 2];
m2=[1.5 0];%mean
X1 = mvnrnd(m1, C, N/2);
X2 = mvnrnd(m2, C, N/2);
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),:);
Nts = N/2;
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(yts .*yhts < 0)/Nts;我做错了什么,如何应对这个挑战?
发布于 2014-10-28 17:07:32
对于负数情况,你在错误的方向上改变权重。
线
w = w + eta*Xtr(j,:)';应该是
w = w + eta*Xtr(j,:)'*ytr(j);改变后,我得到了12%的误差。
发布于 2015-02-27 05:28:25
我认为这句话是错的:
ytr = X(ii(1:N/2),:);ytr应该是培训数据的标签。在这种情况下,应该是
ytr = y(ii(1:N/2),:);https://datascience.stackexchange.com/questions/2353
复制相似问题