matlab单层感知器画线,MATLAB神经网络学习(1):单层感知器

单层感知器由一个线性组合器和一个二值阈值元件组成。

输入是一个N维向量 x=[x1,x2,...,xn],其中每一个分量对应一个权值wi,隐含层输出叠加为一个标量值:

5b5eb03b273f6b943b06d5418d6d064e.png

随后在二值阈值元件中对得到的v值进行判断,产生二值输出:

06cc462233f5f5730144ffad07080e1f.gif

可以将数据分为两类。实际应用中,还加入偏置,值恒为1,权值为b。这时,y输出为:

df6cc0fb2df2fd27e4151783592ebde1.gif

单层感知器结构图:

matlab单层感知器画线,MATLAB神经网络学习(1):单层感知器_第1张图片

单层感知器进行模式识别的超平面由下式决定:

17a4466cdd2036ba98d1a61e03e7be41.gif

当维数N=2时,输入向量可以表示为平面直角坐标系中的一个点。此时分类超平面是一条直线:

5c57aafec83d6da6f89b2b974ce64199.gif

这样就可以将点沿直线划分成两类。

matlab单层感知器画线,MATLAB神经网络学习(1):单层感知器_第2张图片

单层感知器实例:

matlab单层感知器画线,MATLAB神经网络学习(1):单层感知器_第3张图片

matlab单层感知器画线,MATLAB神经网络学习(1):单层感知器_第4张图片

matlab单层感知器画线,MATLAB神经网络学习(1):单层感知器_第5张图片.....重复上步骤,直到达到设定的loop值,或者误差小于设定值

%perception_hand_un.m%%清理

clear,clc

close all%%n=0.1; %学习率

w=[0,0,0];

P=[ -9, 1, -12, -4, 0, 5;...15, -8, 4, 5, 11, 9];

d=[1,1,0,0,0,1]; %期望输出

P=[ones(1,6);P];

MAX=100; %最大迭代次数为100次%%训练

i=0;while 1v=w*P;

y=hardlim(v); %实际输出%更新

e=(d-y);

ee(i+1)=mae(e);if (ee(i+1)<0.001) %判断

disp('we have got it:');

disp(w);break;

end%更新权值和偏置

w=w+n*(d-y)*P';

if (i>=MAX) %达到最大迭代次数,退出

disp('MAX times loop');

disp(w);

disp(ee(i+1));break;

end

i= i+1;

end%%显示

figure;

subplot(2,1,1); %显示待分类的点和分类结果

plot([-12 -4 0],[ 4 5 11],'o');

hold on;

plot([-9 ,1,5],[15,-8,9],'*');

axis([-13,6,-10,16]);

legend('第一类','第二类');

title('6个坐标点的二分类');

x=-13:.2:6;

y=x*(-w(2)/w(3))-w(1)/w(3);

plot(x,y);

hold off;

subplot(2,1,2); %显示mae值的变化

x=0:i;

plot(x,ee,'o-');

s=sprintf('mae的值(迭代次数:%d)', i+1);

title(s);

% perception_newp.m

% 清理

clear,clc

close all

% 创建感知器

net=newp([-20,20;-20,20],1);

%定义输入训练向量

P=[ -9, 1, -12, -4, 0, 5;...

15, -8, 4, 5, 11, 9];

% 期望输出

T=[0,1,0,0,0,1]

% 训练

net=train(net,P,T);

% 输入训练数据仿真验证

Y=sim(net,P)

你可能感兴趣的:(matlab单层感知器画线)