1. 题目
感知器的程序设计。样本向量S=(x1,x2),已知两个样本S1、S2,各代表一类样本,S1=(2,1) 可设它>0;S2=(1,3) 可设它<0 。希望设计一个分类器,把它们分开。设初值为 w1=0;w2=0;也可自己设置。通过感知器原理,设计一个直线方程,通过迭代的方法 构建分类器, 确定了二维空间上的一个分界线。
安装程序系统,开启系统环境截图,如有硬件环境等困难可提出。
手工书写计算过程和用计算机程序完成分类器设计
2. 解答:
感知器的程序设计分析:样本向量S=(x1,x2),已知两个样本S1、S2,各代表一类样本,S1=(2,1)可设它<0,S2=(1,3)可设它>0 ,目标函数J=W*S,其中由J1和J2组成。若J1和J2都大于等于0,则更新权重W- S1;若J1和J2都小于等于0,则更新权重W + S2;直到J1和J2异号,则分类完毕。
具体代码见本文中ganzhiqi_movie.m,效果见test.gif
开启MATLAB环境截图
手工书写计算过程
设:w1x1+w2x2=0, w1=0;w2=0
S1:w1x1+w2x2=0x2+0x1=0
S2:w1x1+w2x2=0x1+0x3=0
w1=0-2=-2;w2=0-1=-1
S1:w1x1+w2x2=-2x2+-1x1=-5<0/
S2:w1x1+w2x2=-2x1+-1x3=-5<0
w1=-2+1=-1;w2=-1+3=2
S1:w1x1+w2x2=-1x2+2x1=0
S2:w1x1+w2x2=-1x1+2x3=5>0
w1=-1-2=-3;w2=2-1=1
S1:w1x1+w2x2=-3x2+1x1=-5
S2:w1x1+w2x2=-3x1+1x3=0
w1=-3+1=-2;w2=1+3=4
S1:w1x1+w2x2=-2x2+4x1=0
S2:w1x1+w2x2=-2x1+4x3=10
w1=-2-2=-4;w2=4-1=3
S1:w1x1+w2x2=-4x2+3x1=-5<0
S2:w1x1+w2x2=-4x1+3x3=5>0
ganzhiqi_movie.m
clear;clc;close;%清除数据,关闭显示 %w= floor(unifrnd(0,9,1,2))%随机生成初始化权重 w= [0,0]; s=[2 1;1 3]; % 初始化一个电影矩阵 M = moviein(16); % 创建电影 % figure; plot(s(1,1),s(2,1),'r>');%画出第一个样本坐标点 hold on;%保持 plot(s(1,2),s(2,2),'g*');%画出第二个样本坐标点 hold on;%保持 plot([-6*w(1,2)/sqrt(w(1,2)^2+w(1,1)^2),6*w(1,2)/sqrt(w(1,2)^2+w(1,1)^2)],[6*w(1,1)/sqrt(w(1,2)^2+w(1,1)^2),-6*w(1,1)/sqrt(w(1,2)^2+w(1,1)^2)]);%画出初始直线 hold on;%保持 title('二样本感知器分类');%表头名称 xlabel('xlabel');%x标签 ylabel('ylabel');%y标签 axis([-4, 4 -4, 4]); %限制x和y的范围 for i=1:50 j1=w*s(:,1);%计算第一类 j2=w*s(:,2);%计算第二类 if((j1>=0)&(j2>=0))%如果两类都大于零 w=w-s(:,1)';%更新权重 elseif((j1<=0)&(j2<=0))%如果两类都小于零 w=w+s(:,2)';%更新权重 else%如果两类异号结束循环 break; end plot([-6*w(1,2)/sqrt(w(1,2)^2+w(1,1)^2),6*w(1,2)/sqrt(w(1,2)^2+w(1,1)^2)],[6*w(1,1)/sqrt(w(1,2)^2+w(1,1)^2),-6*w(1,1)/sqrt(w(1,2)^2+w(1,1)^2)]);%画出更新直线 hold on;grid on;pause(1);%保持,生成网格,延迟1s M(i) = getframe;% 调用getframe函数生成每个帧 i=i+1;%更新迭代次数 end movie(M,3);% 调用movie函数将电影动画矩阵M(k)播放3次
test.gif
3. 总结
本文介绍利用二样本感知器的matlab程序设计,接下来我会记录我的matlab学习记录,很高兴能和大家分享!🤣🤣🤣希望你能有所收获。