我知道我遇到了一个非常常见的错误,但在这种情况下我很困惑,我不知道我收到此错误的原因,因为错误发生在代码已写入的函数中我想,大学和其他许多人事先都使用过这段代码。
所以,我的代码是关于使用perceptron的渔夫虹膜数据集的多类分类(单层,因此对于3类数据集,我需要3个单独的分类器通过one-all-all方法)。
我考虑的代码是perceptron function from Toronto university。
感知器功能(perceptron.m)(稍微修改一下):
function [w_per] = perceptron(X,Y,w_init)
w_per = w_init;
for iteration = 1 : 100
for ii = 1 : size(X,2) % Cycle through training set
if sign(w_per'*X(:,ii)) ~= Y(ii) % Wrong decision?
w_per = w_per + X(:,ii) * Y(ii); % then add (or subtract) this point to w_per
end
end
% Show misclassification rate
misclassification_rate = sum(sign(w_per'*X)~=Y)/size(X,2); // HERE IS THE POINT I AM GETTING THE ERROR
disp(misclassification_rate);
end
我还在下面插入了我的代码(仅针对第一种情况,即数据集的类“Setosa”是第一类,另外两类“Versicolor”和“Virginica”是第二类我的感知器):
% Perceptron
t1 = randperm(50);
X1a = meas(t1(1:35),3:4);
t2 = randperm(100);
X2a = meas(50 + t2(1:35),3:4);
clear t1 t2;
Xa = [X1a X2a];
Ya = [-ones(1,35) ones(1,35)];
wa = rand(35,1);
wtaga = perceptron(Xa,Ya,wa); % call perceptron
ytaga = wtaga'*Xa; % predict
figure;
hold on;
plot(X1a(1,:),X1a(2,:),'b.');
plot(X2a(1,:),X2a(2,:),'r.');
plot(Xa(1,ytaga<0),Xa(2,ytaga<0),'bo');
plot(Xa(1,ytaga>0),Xa(2,ytaga>0),'ro');
legend('class +1','class -1','pred +1','pred -1');
title('Setosa');
尽管我已经评论了perceptron.m函数中出现错误的行,但我再次写错误消息:
Matrix dimensions must agree
Error in perceptron (line 13)
misclassification_rate = sum(sign(w_per'*X)~=Y)/size(X,2);
有人能帮帮我吗?我很感激!