基于感知器准则的线性分类器设计
一、实验目的
理解感知准则函数的原理,理解参数设置对算法的影响; 掌握线性分类器的基本原理和设计步骤。
二、实验环境
PC 机下 MATLAB 编程环境
三、实验原理
感知器基本原理:
感知器学习的过程是不断改变权向量的输入,更新结构中的可变参数,最后实现在有限次迭代之后的收敛。感知器的基本模型结构如下图所示:
其中,X 输入,Xi 表示的是第 i 个输入;Y 表示输出;W 表示权向量;w0 是阈值,f 是一个阶跃函数。
感知器实现样本的线性分类主要过程是:将特征向量的元素 x1,x2,……,xk(网络的输入元素)与每一个元素与相应的权 wi 相乘,乘积相加后再与阈值 w0 相加,结果通过 f 函数执行激活功能,f 为系统的激活函数。因为 f 是一个阶跃函数,故当自变量小于 0 时,f= - 1;当自变量大于 0 时,f= 1。这样,根据输出信号Y,把相应的特征向量分到为两类。
四、实验内容
用所给二维样本数据(如下表),编程设计线性分类器实现ω1 和 ω2 类、ω2 和 ω3 类和 ω1 和 ω3 类的分类。
实验样本数据
类别 ω1 ω2 ω3
样本 x1 x2 x1 x2 x1 x2
1 0.1 1.1 7.1 4.2 3.0 -2.9
2 6.8 7.1 -1.4 -4.3 0.5 8.7
3 -3.5 -4.1 4.5 0.0 2.9 2.1
4 2.0 2.7 6.3 1.6 -0.1 5.2
5 4.1 2.8 4.2 1.9 -4.0 2.2
6 3.1 5.0 1.4 -3.2 -1.3 3.7
7 -0.8 -1.3 2.4 -4.0 -3.4 6.2
8 0.9 1.2 2.5 -6.1 -4.1 3.4
9 5.0 6.4 8.4 3.7 -5.1 1.6
10 3.9 4.0 4.1 -2.2 1.9 5.1
程序:
(1)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=[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 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];
ww1=[ones(1,size(w1,2));w1];
ww2=[ones(1,size(w2,2));w3];
w12=[ww1,-ww2];
y=zeros(1,size(w12,2));
v=[1;1;1];
k=0;
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
figure(1)
plot(w1(1,:),w1(2,:),‘bo’)
hold on
plot(w2(1,:),w2(2,:),‘b+’)
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,‘g’)
(2)w2 w3分类:
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=[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 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];
ww1=[ones(1,size(w2,2));w1];
ww2=[ones(1,size(w3,2));w3];
w23=[ww1,-ww2];
y=zeros(1,size(w23,2));
v=[1;1;1];
k=0;
while any(y<=0)
for i=1:size(y,2)
y(i)=v’*w23(:,i);
end
v=v+(sum((w23(:,find(y<=0)))’))’;
k=k+1;
end
figure(1)
plot(w2(1,:),w2(2,:),‘bo’)
hold on
plot(w3(1,:),w3(2,:),‘b+’)
xmin=min(min(w2(1,:)),min(w3(1,:)));
xmax=max(max(w2(1,:)),max(w3(1,:)));
ymin=min(min(w2(2,:)),min(w3(2,:)));
ymax=max(max(w2(2,:)),max(w3(2,:)));
xindex=xmin-1:(xmax-xmin)/100:xmax+1;
yindex=-v(2)*xindex/v(3)-v(1)/v(3);
plot(xindex, yindex,‘g’)
(3)w1 w3分类:
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=[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 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];
ww1=[ones(1,size(w1,2));w1];
ww2=[ones(1,size(w3,2));w3];
w13=[ww1,-ww2];
y=zeros(1,size(w13,2));
v=[1;1;1];
k=0;
while any(y<=0)
for i=1:size(y,2)
y(i)=v’*w13(:,i);
end
v=v+(sum((w13(:,find(y<=0)))’))’;
k=k+1;
end
figure(1)
plot(w1(1,:),w1(2,:),‘bo’)
hold on
plot(w3(1,:),w3(2,:),‘b+’)
xmin=min(min(w1(1,:)),min(w3(1,:)));
xmax=max(max(w1(1,:)),max(w3(1,:)));
ymin=min(min(w1(2,:)),min(w3(2,:)));
ymax=max(max(w1(2,:)),max(w3(2,:)));
xindex=xmin-1:(xmax-xmin)/100:xmax+1;
yindex=-v(2)*xindex/v(3)-v(1)/v(3);
plot(xindex, yindex,‘g’)