基于 BP 算法的分类器设计
一、实验目的
1.对模式识别有一个初步的理解。
2.能够根据自己的设计对 BP 决策理论算法有一个深刻地认识。
3.理解二类分类器的设计原理。
二、实验条件
MATLAB R2010b
三、实验原理
3.1 输出层神经元的权值修正算法(神经元 j)
由于权值的修正值ΔW 是通过梯度下降法求得的,因此要求出
。
的计算公式如下
=
•
•
•
对等式右侧的分式分别求偏导数有
=
(-1)φ' (vj(n))
=-
φ' (vj(n))
其中 vj(n)=
=φ(vi(n))
可以得到
Δ
=η
φ' (vj(n))
若 =φ(vi(n))=
,则φ' (vj(n))=
(1-
)
这样就得到了权值的修正值
1
Δ
=η
(1-
)
由此值修正权系数
。
3.2 隐含层神经元的权值修正算法(神经元 j)
仿照 3.1 求
。如图 5,
的计算公式如下:
=
•
•
其中 vj(n)=
=
=φ' (vj(n))=
(1-
)
=
=
•
=φ' (vk(n))
=-
=-
故有
则权值的修正值
(φ' (vk(n))
)
)
=-
=-
) φ' (vj(n))
Δ
=η(-
)= η
2
由此值修正权系数
。
四、实验内容
已知在二维平面上存在两条决策线,其方程为
=
以及
= ,ρ=
。可表示为 y=f(x)=
=
=
,其中
ρ=
。由这两条决策线构成了的非线性分类器可将空间中的三种不同性质
的物质分开。利用 BP 算法设计模型 f(x)。
首先考察隐含层为 4 个神经元的情形。任意选取 x1 与 x2 的值(此处各选取 20
个值)利用 MATLAB 画出原函数 f1 与 f2 的三维图形如图 1 所示。画出前向传
播神经网络图形如图 2 所示,用神经网络反向学习算法与此图去逼近模型,学习
矩阵为之前选取的 x1 与 x2 的 20 个值与其对应的 20 个输出值。
五、实验步骤
实验流程图
六、实验代码
3
%误差值
%学习步长
eta=0.06;
e1=zeros(1,20);
e2=zeros(1,20);
sita=zeros(100,1); %误差矩阵
zeta=0;
%误差初值
N=20;
%学习矩阵的长度
x1=[-10.5 -9.8 -8.6 -7.4 -6.7 -5.5 -4.3 -3.1 -2.8 -1.9 1.2 2.7 3.5 4.3 5.1 6.2 7.9 8
9.9 10];
x2=[-10.5 -9.8 -8.6 -7.4 -6.7 -5.5 -4.3 -3.1 -2.8 -1.9 1.2 2.7 3.5 4.3 5.1 6.2 7.9 8
9.9 10];%输入矩阵
d1=zeros(1,20);
d2=zeros(1,20);%真实值输出矩阵
y1=zeros(1,20);
y2=zeros(1,20);%BP算法输出矩阵
for a=1:20
d1(a)=x1(a)*exp(-(x1(a)^2+x2(a)^2));
d2(a)=sin(2*(x1(a)^2+x2(a)^2))/(4*(x1(a)^2+x2(a)^2));
end
W1=[1 -1 2 -2]';
W2=[2 1 3 -1]';
W3=[1 0 3 -1]';
W4=[0 3 2 -1]'; %初始权值
rou=0.03;
times=1000;
v1=zeros(4,1);
v2=zeros(4,1);
v3=zeros(4,1);
v4=zeros(4,1);
u1=zeros(4,1);
u2=zeros(4,1);
%误差衡量标准
%学习次数
4
o1=zeros(4,1);
o2=zeros(4,1);
o3=zeros(4,1);
o4=zeros(4,1); %神经元上的值
for i=1:times
for j=1:N
for k=1:4
v1(j)=W1(1)*x1(j)+W2(1)*x2(j);
o1(j)=logsig(v1(j));
v2(j)=W1(2)*x1(j)+W2(2)*x2(j);
o2(j)=logsig(v2(j));
v3(j)=W1(3)*x1(j)+W2(3)*x2(j);
o3(j)=logsig(v3(j));
v4(j)=W1(4)*x1(j)+W2(4)*x2(j);
o4(j)=logsig(v4(j));
end
O=[o1(j) o2(j) o3(j) o4(j)]';
u1(j)=W3'*O;
u2(j)=W4'*O;
y1(j)=logsig(u1(j));
y2(j)=logsig(u2(j));
e1(j)=d1(j)-y1(j);
e2(j)=d2(j)-y2(j);
zeta=zeta+(e1(j)^2+e2(j)^2)/2;
dW3=eta*e1(j)*y1(j).*O;
dW4=eta*e2(j)*y2(j).*O;
W3=W3+dW3;%修正权值
W4=W4+dW4;% 修正权值
dW1=zeros(4,1);
dW2=zeros(4,1);
5
dW1(1)=eta*(e1(j)*y1(j)*(1-y1(j))*W3(1)+e2(j)*y2(j)*(1-y2(j))*W4(1))*O(1)
*(1-O(1))*x1(j);
dW1(2)=eta*(e1(j)*y1(j)*(1-y1(j))*W3(2)+e2(j)*y2(j)*(1-y2(j))*W4(2))*O(2)
*(1-O(2))*x1(j);
dW1(3)=eta*(e1(j)*y1(j)*(1-y1(j))*W3(3)+e2(j)*y2(j)*(1-y2(j))*W4(3))*O(3)
*(1-O(3))*x1(j);
dW1(4)=eta*(e1(j)*y1(j)*(1-y1(j))*W3(2)+e2(j)*y2(j)*(1-y2(j))*W4(4))*O(4)
*(1-O(4))*x1(j);
dW2(1)=eta*(e1(j)*y1(j)*(1-y1(j))*W3(1)+e2(j)*y2(j)*(1-y2(j))*W4(1))*O(1)
*(1-O(1))*x2(j);
dW2(2)=eta*(e1(j)*y1(j)*(1-y1(j))*W3(2)+e2(j)*y2(j)*(1-y2(j))*W4(2))*O(2)
*(1-O(2))*x2(j);
dW2(3)=eta*(e1(j)*y1(j)*(1-y1(j))*W3(3)+e2(j)*y2(j)*(1-y2(j))*W4(3))*O(3)
*(1-O(3))*x2(j);
dW2(4)=eta*(e1(j)*y1(j)*(1-y1(j))*W3(2)+e2(j)*y2(j)*(1-y2(j))*W4(4))*O(4)
*(1-O(4))*x2(j);
W1=W1+dW1;% 修正权值
W2=W2+dW2;% 修正权值
end
sita(i)=zeta/N;%均方误差计算
if sita(i)
grid on;
hold on;
plot3(x1,x2,d2,'r');
title('functon f');
xlabel('input x1');
ylabel('input x2');
zlabel('output f');
hold off
for j=1:N
for k=1:4
v1(j)=W1(1)*x1(j)+W2(1)*x2(j);
o1(j)=logsig(v1(j));
v2(j)=W1(2)*x1(j)+W2(2)*x2(j);
o2(j)=logsig(v2(j));
v3(j)=W1(3)*x1(j)+W2(3)*x2(j);
o3(j)=logsig(v3(j));
v4(j)=W1(4)*x1(j)+W2(4)*x2(j);
o4(j)=logsig(v4(j));
end
O=[o1(j) o2(j) o3(j) o4(j)]';
u1(j)=W3'*O;
u2(j)=W4'*O;
y1(j)=logsig(u1(j));
y2(j)=logsig(u2(j));
end
plot3(x1,x2,y1,'b');
grid on;
hold on
plot3(x1,x2,d1,'r');
title('compare functon d1 and y1');
7
xlabel('input x1');
ylabel('input x2');
zlabel('output d1 and y1');
hold off;
plot3(x1,x2,y2,'b');
grid on;
hold on
plot3(x1,x2,d2,'r');
title('compare functon d2 and y2');
xlabel('input x1');
ylabel('input x2');
zlabel('output d2 and y2');
七、实验结果
程序运行后可得到修正后的权值矩阵W1,W2,W3,W4分别赋给矩阵A,B,C,D。以
及实际输出的图行曲线与BP算法得到的图形曲线的比较图。d1与y1的比较图如图
1所示,d2与y2的比较图如图2所示。结果经BP学习算法得到的学习曲线能与实际
输出的真实曲线有较好的相似度,且误差在允许的范围之内。
A =[1.0109;-0.9579;1.9998;-1.9877]B =[ 2.0109;1.0421;2.9998;-0.9877]
C =[-1.9955;-2.7510;-0.0016;-2.8610]D =[-3.0749;-0.0936;-1.0825;
8