错误:矩阵维度必须同意

时间:2016-01-31 09:20:23

标签: matlab perceptron

我知道我遇到了一个非常常见的错误,但在这种情况下我很困惑,我不知道我收到此错误的原因,因为错误发生在代码已写入的函数中我想,大学和其他许多人事先都使用过这段代码。

所以,我的代码是关于使用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);

有人能帮帮我吗?我很感激!

0 个答案:

没有答案