您好,欢迎来到叨叨游戏网。
搜索
您的当前位置:首页感知器准则函数的matlab程序

感知器准则函数的matlab程序

来源:叨叨游戏网


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、ww2

ww1=[ones(1,size(w1,2));w1];

ww2=[ones(1,size(w2,2));w2];

%产生第一类和第二类样本向量的规范化增广样本向量集w12

w12=[ww1,-ww2];

y=zeros(1,size(w12,2)); % 产生1x20的行向量,赋给y,初值全为0

a=[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);

end

a=a+(sum((w12(:,find(y<=0)))'))';

k=k+1;

end

a %显示最终求得的权向量a的值

k %迭代次数值

figure(1)

plot(w1(1,:),w1(2,:),'r+')

hold on

plot(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)

我自己模仿写的:

%%测试函数点

clc

clear all

x1=-1:0.1:1;

y1=x1+2;

w1=[x1;y1];

x2=-1.5:0.1:0.5

y2=x2;

w2=[x2;y2];

figure(1)

plot(x1,y1,'r+')

hold on

plot(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;

end

a

k

xmin=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 on

plot(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 on

plot(w2(1,:),w2(2,:),'*')

%normalized

%分别产生第一类、第二类和第三类增广样本向量集ww1、ww2 和ww3

ww1=[ones(1,size(w1,2)); w1];

ww2=[ones(1,size(w2,2)); w2];

ww3=[ones(1,size(w3,2)); w3];

%产生第一类和第二类样本向量的规范化增广样本向量集w12

w12=[ww1,-ww2];

%%w13=[ww1,-ww3];

%%w23=[ww2,-ww3];

y=zeros(1,size(w12,2)); %产生1x20 的行向量,赋给y,初值全为0

v=[1;1;1]; %给权向量v 赋初值

k=0; %k 为迭代次数,v(0)= [1;1;1]

while any(y<=0)

for i=1:size(y,2)

y(i)=v'*w12(:,i);

end

v=v+(sum((w12(:,find(y<=0)))'))';

k=k+1;

end

v %显示最终求得的权向量v 的值

k %迭代次数值

figure(1)

plot(w1(1,:),w1(2,:),'r.')

hold on

plot(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=-v(2)*xindex/v(3)-v(1)/v(3);

plot(xindex,yindex)

%写出实现批处理感知器算法的程序,从v=0 开始,将程序应用在ω2 和ω3 类上,同样记下收敛的步数。

w23=[ww2,-ww3];

yy=zeros(1,size(w23,2)); %产生1x20 的行向量,赋给y,初值全为0

vv=[1;1;1]; %给权向量v 赋初值

kk=0; %k 为迭代次数,v(0)= [1;1;1]

while any(yy<=0)

for i=1:size(yy,2)

yy(i)=vv'*w23(:,i);

end

vv=vv+(sum((w23(:,find(yy<=0)))'))';

kk=kk+1;

end

vv %显示最终求得的权向量v 的值

kk %迭代次数值

figure(2)

plot(w2(1,:),w2(2,:),'r.')

hold on

plot(w3(1,:),w3(2,:),'*')

xxmin=min(min(w2(1,:)),min(w3(1,:)));

xxmax=max(max(w2(1,:)),max(w3(1,:)));

yymin=min(min(w2(2,:)),min(w3(2,:)));

yymax=max(max(w2(2,:)),max(w3(2,:)));

xxindex=xmin-1:(xxmax-xxmin)/100:xxmax+1;

yyindex=-vv(2)*xxindex/vv(3)-vv(1)/vv(3);

plot(xxindex,yyindex)

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- gamedaodao.net 版权所有 湘ICP备2024080961号-6

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务