Wc =
-0.1000 0.2000 C =
0.9003 Wz =
0.7000 1.5000 1.7000 2.2000 2.4000 2.6000 2.8000 3.3000 3.5000 3.7000 4.2000 3.9000 4.4000 4.1000
从程序看,分类循环次数M设置为20次;从打印出的分类过程中的动态权值矩阵Wz来看,Wz只有5组权值,说明程序之循环了5次就满足了分类的误差要求:
? E??0.01;0.01;0.0;0.0;0.01;0.01;0.01;0.01(4)程序分析.
① 在程序中权值矩阵的初值Wc和阈值初值C可以分别采用W=rands(S,R);Wc=W' 和C=rands(S,1)产生随机数,也可以直接设置随机小数.程序中Wc采用置随机小数,而阈值初值C采用产生随机数指令实现.如果Wc和C均采用rands指令产生随机数实现,也可以得到类似图3-6所示的分类结果,读者不妨一试.
② 本例的样本为随机数,无量纲,无规律.目标向量T??0,0,0,1,0,?正好与样本1,1,1巧合,才得到了图3-6所示的分类结果.如果目标向量随机给定,如T??1,0,0,1,0,?,1,0,0则该程序无法分类,相当于对线性不可分的样本分类,单神经元感知器无能为力(如例2-2).
样本矩阵同上例,随机目标向量T=[1,0,0,1,0,1,0,0]. 解 clear
X=[-0.5,-0.5,0.3,0.1,-0.1,0.8,0.2,0.3;0.3,-0.2,-0.6,0.1,-0.5,1.0,0.3,0.9]; T=[1,0,0,1,0,1,0,0];M=20;
[R,Q]=size(X); %R=2;Q=8为X矩阵的维数 [S,Q]=size(T); %S=1;Q=8为T矩阵的维数
%W=rands(S,R); %根据输入样本X和目标向量T的维数产生随机权值阵W %初值
W=[-0.1 0.2];
Wc=W' %打印权值的初值 C=rands(S,1); %产生随机阈值初值
C %打印随机产生的阈值初值 Y=W*X+C; %计算感知器输出 for j=1:M %循环开始
for i=1:8 %对感知器输出分类
if Y(1,i)>0; %求感知器阈值激发后的输出,F表示式(3-8)中的y(k) F(1,i)=1; else,F(1,i)=0; end
end %一次分类循环结束
if all(F==T) %感知器的输出F和目标T不等时修正权值阵和阈值 break
41
end
dW=(T-F)*X';
E=[0.01;0.01;0.0;0.0;0.01;0.01;0.01;0.01];
ü=0.1*(T-F)*E,表示阈值不修正 W=W+dW;
Wz(:,j)=W; %存储分类过程中的动态权值 %C=C+dC; %表示阈值不修正 Y=W*X+C;
end %循环结束
Wz %打印分类过程中的动态权值 %开始绘图 plotpv(X,T); %绘点
plotpc(W,C); %绘分割线 grid on
xlabel('x1'),ylabel('x2')
(2)感知器分不开类的结果如图3-13所示.
Vectors to be Classified1.510.5x20-0.5-1-1-0.50x10.51
图3-13 感知器分不开类的结果
(3)感知器的参数.感知器的权值矩阵初值Wc、阈值初值C和分类过程中的动态权值矩阵Wz如下: Wc =
-0.1000 0.2000 C =
-0.5377 Wz =
0.3000 -0.6000 0 -0.7000 -0.3000 -0.5000 -0.7000
-0.3000 -0.5000 -0.4000 -0.6000 -0.2000
由图2-4可知,随机目标向量T与样本X规律不同,单神经元感知器不能分类.如过输入样本具有物理量纲,并对样本从小到大或从大到小排列,目标向量T?0要符合样本的
42
排列规律,即使目标向量T在一定范围内变化,则分类问题无疑可实现.
3.4.2 蠓虫分类问题
生物学家试图对两类蠓虫(Af与Apf)进行鉴别,依据的资料是蠓虫的触角和翅膀的长度,已经测得9只Af和6只Apf的数据,(触角长度用x表示,翅膀长度用y表示)具体数据为: x?[1.24 1.36 1.38 1.38 1.38 1.40 1.48 1.54 1.56 1.14 1.18 1.20 1.26 1.28 1.30]; y?[1.27 1.74 1.64 1.82 1.90 1.70 1.82 1.82 2.08 1.78 1.96 1.86 2.00 2.00 1.96];
现需要解决二个问题:(1)如何凭借原始资料(15 对数据,被称之为学习样本)制定一种方法,正确区分两类蠓虫;(2)依据确立的方法,对题目提供的三个样本:(1.24,1.80),(1.28,1.84),(1.40,2.04)加以识别.
解:
我们使用BP神经网络来实现分类蠓虫问题
首先,输入训练样本、训练目标样本及测试样本: %输入向量
p=[1.24 1.36 1.38 1.38 1.38 1.40 1.48 1.54 1.56 1.14 1.18 1.20 1.26 1.28 1.30; 1.72 1.74 1.64 1.82 1.90 1.70 1.82 1.82 2.08 1.78 1.96 1.86 2.00 2.00 1.96]; %输出向量
t=[1 1 1 1 1 1 1 1 1 0 0 0 0 0 0]; s=[1.24 1.28 1.40;1.80 1.84 2.04];
使用newff函数建立BP神经网络,并且使用训练样本数据训练网络:
net=newff(minmax(p),[5,1],{'logsig','purelin'},'traingdx'); net.trainParam.show=50; net.trainParam.lr=0.1;
net.trainParam.lr_inc=1.05; net.trainParam.epochs=300; net.trainParam.goal=0.01; [net,tr]=train(net,p,t); %回代检验 A=sim(net,p); %测试样本 a=sim(net,s);
训练过程曲线如图3-14所示,训练迭代过程为:
TRAINGDX, Epoch 0/300, MSE 0.353602/0.01, Gradient 1.36946/1e-006
TRAINGDX, Epoch 50/300, MSE 0.0106529/0.01, Gradient 0.0344785/1e-006 TRAINGDX, Epoch 52/300, MSE 0.00955509/0.01, Gradient 0.0301251/1e-006 TRAINGDX, Performance goal met.%性能满足退出网络训练过程. >> A A =
0.8651 0.9980 0.9983 0.9933 0.9554 0.9983 0.9943 0.9947 0.9875 0.0013 -0.1198 -0.0108 -0.0678 -0.0117 0.3220 >> a
43
a =
0.5215 0.7837 0.9578
从训练结果来看,测试结果中三个测试样本均属1类,即为Af型蠓虫.
100Performance is 0.00955509, Goal is 0.01Training-Blue Goal-Black10-110-210-305101520253052 Epochs354045503-14 训练过程曲线
3.4.3 水果直径识别问题
有两篮水果,其中有大小不同的火龙果、蛇果、莲雾等,水果的大小用其直径(cm)
T来确定,其中X为输入样本,T为目标向量.X?x1x2.两篮水果的直径参数分别为
x1??3.6,9.3,7.1,4.0,4.2,2.8,7.1,9.2,8.1,2.9,9.3,4.2???x2??6.6,6.3,8.1,4.1,4.2,2.9,7.3,7.6,7.8,4.9,8.2,3.5?
目标向量为T??0,0,0,0,0,0,1,1,1,1,1,1?,采用单神经元感知器对两篮水果按大小分类. 解 根据题意,直接无法分类.因此先对样本从小到到大排队,然后进行分类. (1)编程如下: clear
z=[3.6,9.3,7.1,4.0,4.2,2.8,7.1,9.2,8.1,2.9,9.3,4.2];
%读取样本x1,对其从小到大排队 j=0;i=0;b=0;N=12; for j=1:N
for i=1:N-j
if z(i)>z(i+1)
44