-1

我想对fisheriris数据应用感知器算法,我试过这个代码

function [  ] = Per(  )
%PERCEPTON_NN Summary of this function goes here
%   Detailed explanation goes here
%%%%%%%%%%%STEP ONE INPUT DATA PREPERATION
%N=3000;
load fisheriris
tr=50; %traning
te=50; %test
epochs =150;

data=meas;
%N = size(meas,1);
%species=nonomil(species)
%figure,plot(data_shuffeled(1,:),data_shuffeled(2,:),'rx');
%%%%%%%%%%%%%%%%%%%STEP TWO INTIALIZE  WEIGHT
baise=1;
w=[baise; 1 ; 1;1 ; 1];
eta=0.9; %%learning rate
%%%%%%%%%%%%%%%%%%%%%%%% Rosen Blatt learning Algo
for epoch=1 : epochs 
for i=1 : tr
   x=[1;data(i,1);data(i,2);data(i,3);data(i,4)]; % input vector
   N = size(species,i); %desiard output
   y=w'*x; % y=actual output ,w'= transpose w , mmoken y=w.*x 
   %%%%%%%%%%%%%%% Activation function (hardlimit)(step fn)
   y=1*(y>=0)+(-1)*(y<0); % da badl el if 
   %%%%%%%%%%% Error calcualtion %%%%%%%
   err(i)=N-y;
   %%%%%%%%%%%%%% update weight %%%%%%%%%5
   wnew=w+ eta*err(i)*x;
   w=wnew;
end
mse(epoch)=mean(err.^2);
end
%%%%%%%%%%%%%%%%%%%%%%  step four classification (testing) %%%%%%%%%%%%%%%%%%5
hold on
for i=1 : te
    %x=[1;data(i,1);data(i,2),data(i,3);data(i,4)];
     x=[1;data(i,1);data(i,2);data(i,3);data(i,4)]; 
   % d=data_shuffeled(3,i+tr);
    N = size(species,i);
    y=w'*x;
    y=1*(y>=0)+(-1)*(y<0);
    if (y==1)
        plot(x(2),x(3),x(4),x(5),'rx');
    elseif y==-1
        plot(x(2),x(3),x(4),x(5),'r&');
    end
end
hold off

 if abs(N-y)>1E-6
    testerro=testerro+1;

end

我编写了这段代码来制作以fisheriris数据“meas”作为输入,物种作为“输出”的感知器算法

代码中的任何帮助或对此代码的任何修改。

谢谢 。

4

1 回答 1

0

首先,您是否知道 MATLAB 有一个用于神经网络训练的东西,称为神经网络工具箱?

其次,认为 data_shuffled 是您自己的功能。randperm您应该使用 MATLAB 中的某些东西来打乱您的数据。

第三,当您可以在 MATLAB 中使用向量/矩阵时,您要避免使用 for 循环。

而不是做(用于测试)

for i = 1:te,
   ....
end

你可能想做

X = [ones(te,1), data]; %X is [50x5] so each row of X is x'
y = X*w;   %y is [50x1], X is [50x5], w is [5x1]
idx_p1 = y==1; %all the indices of y where y is +1
idx_m1 = y==-1; %all the indicies of y where y is -1

plot(X(idx_p1,1),y(idx_p1),'rx');
plot(X(idx_m1,1),y(idx_m1),'r&');

我不知道你是如何使用plot4 维 X 的,所以上面只绘制了 X 的第一个特征(列)。

此外,训练对我来说看起来很奇怪。一方面,我认为您不应该将 N 用于数据矩阵测量的大小和所需的输出。'yhat' 或 'ybar' 是一个更好的名字。此外,如果 N 是所需的输出,那么为什么size(species,i)i 在 1:50 循环?物种是一个 [150x1] 向量。size(species,1) = 150. 其中size(species,x)x 是 2 到 50 将是 1。你确定要这个吗?不应该是这样的:

yhat = -ones(50,1); %Everything is -1
yhat(strmatch('virginica,species)) = 1; %except virginicas which are +1
于 2012-05-18T18:41:25.933 回答