感知器准则函数的matlab程序.doc
文本预览下载声明
?clear%产生第一类和第二类原始数据,分别赋值给w1和w2变量w1=[0.1 6.8 -3.5 2.0 4.1 3.1 -0.8 0.9 5.0 3.9;????1.1 7.1 -4.1 2.7 2.8 5.0 -1.3 1.2 6.4 4.0];w2=[-3.0 0.5 2.9 -0.1 -4.0 -1.3 -3.4 -4.1 -5.1 1.9;????-2.9 8.7 8 5.2 2.2 3.7 6.2 3.4 1.6 5.1];%分别产生第一类和第二类增广样本向量集ww1、ww2ww1=[ones(1,size(w1,2));w1];ww2=[ones(1,size(w2,2));w2];%产生第一类和第二类样本向量的规范化增广样本向量集w12w12=[ww1,-ww2];y=zeros(1,size(w12,2)); % 产生1x20的行向量,赋给y,初值全为0a=[1;1;1];???????%给权向量a赋初值k=0;???????????????%k为迭代次数,a(0)=[1;1;1]while any(y=0)for i=1:size(y,2)y(i)=a*w12(:,i);enda=a+(sum((w12(:,find(y=0)))));k=k+1;enda??????%显示最终求得的权向量a的值k??????%迭代次数值figure(1)plot(w1(1,:),w1(2,:),r+)hold onplot(w2(1,:),w2(2,:),*)xmin=min(min(w1(1,:)),min(w2(1,:)));?xmax=max(max(w1(1,:)),max(w2(1,:)));?ymin=min(min(w1(2,:)),min(w2(2,:)));?ymax=max(max(w1(2,:)),max(w2(2,:)));?xindex=xmin-1:(xmax-xmin)/100:xmax+1;yindex=-a(2)*xindex/a(3)-a(1)/a(3);plot(xindex,yindex)
?
我自己模仿写的:
%%测试函数点clcclear allx1=-1:0.1:1;y1=x1+2;w1=[x1;y1];x2=-1.5:0.1:0.5y2=x2;w2=[x2;y2];figure(1)plot(x1,y1,r+)hold onplot(x2,y2,g*)ww1=[ones(1,size(w1,2));w1];ww2=[ones(1,size(w2,2));w2];w12=[ww1,-ww2];a=[1;1;1];y=zeros(1,size(w12,2));k=1;while any(y=0)???for i=1:size(w12,2)???????y(i)=a*w12(:,i);???end???temp=sum((w12(:,find(y=0))));???a=a+temp;???k=k+1;endakxmin=min(min(x1),min(x2));xmax=max(max(x1),max(x2));ymin=min(min(y1),min(y2));ymax=max(max(y2),max(y2));xindex=xmin-1:(xmax-xmin)/100:xmax+1;yindex=-a(2)/a(3)*xindex-a(1)/a(3);hold onplot(xindex,yindex)
心得体会:感知器准则函数只能用来线性分类,而且最有找到判决边界一般在边界面上,具体原理还是比较好理解的。
?
?
三类情况:
clear%original data%产生第一类、第二类和第三类原始数据,分别赋给w1、w2 和w3 变量w1=[0.1 0.8 -3.5 2.0 4.1 3.1 -0.8 2 5.0 3.9; 1.1 7.1 -4.1 2.7 2.8 5.0 -1.3 1.2 6.4 4.0];w2=[7.1 -1.4 4.5 6.3 4.2 1.4 2.4 2.5 8.4 4.1;4.2 -4.3 0.0 1.6 1.9 -3.2 -4.0 -6.1 3.7 -2.2];w3=[-3.0 5 2.9 -0.1 -4.0 -1.3 -3.4 -4.1 -5.1 1.9;-2.9 8.7 2.1 5.2 2.2 3.7 6.2 3.4 1.6 5.1];figure(1)plot(w1(1,:),w1(2,:),r.)hold onplot(w2(1,:),w2(2,:),*)%normali
显示全部