模式识别课内实验(一)
感知器准则分类器的设计
一、实验目的
1. 掌握线性分类器的设计方案;
2. 掌握感知器准则分类器的设计;
3. 通过编写程序,实现感知器准则算法,并实现线性可分分类;
4. 检验分类器的有效性。
二、相关知识
感知器算法:
梯度下降算法:
三、实验内容及步骤
1. 随机产生数据,将他们分成两类并将它们增广规范化。
2. 采用梯度下降产生解向量,并求出分类·线(或分类面)。
四、程序
clear
clc
%***************************************
%
%***************************************
n=10;
构造实验数据
%产生 n 行两列,均值为 5,标准差为 5 的正态分布随机数
x=round(10*random('norm',5,5,n,2))/10;
%调出窗口,标注参数
figure;
xlabel('x(1)')
ylabel('x(2)')
title('感知准则函数')
box on
%加边框
hold on
%使当前轴及图形不在具备被刷新,保持图像
构造两类样本
%***************************************
%
%***************************************
n1=0;
n2=0;
for i=1:n
if x(i,2)> 2 * x(i,1)-5
n1=n1+1;
w1(n1,:)=x(i,:);
plot(x(i,1),x(i,2),'g+')
else
n2=n2+1;
w2(n2,:)=x(i,:);
%绘图
plot(x(i,1),x(i,2),'bo');
end
end
%***************************************
%
%***************************************
规范化增光样本向量
y1=[ones(n1,1)';w1']';
y2=[ones(n2,1)';w2']';
y=[y1;-y2];
%***************************************
%
%***************************************
迭代
a=[0,0,0]';
while isequal(a'*y'<=0,zeros(1,n))==0
for i=1:n
if x'*y(i)'<=0
%初始解向量
%假设初始分类正确
a0=a;
a=a+y(i,:)';
arrowline([a0(2),a(2)],[a0(3),a(3)],'color','m','linestyle','--');
%查看分类是否错误
%保留数值
%对权向量进行修正
end
end
end
arrowline([0,a(2)],[0,a(3)],'color','r');
text(0,0,'O','verticalalignment','top');
axis tight
%axis equal
%***************************************
%作出分类线
%***************************************
h=gca;
xlim=get(h,'xlim');
ylim=(-a(1)-a(2)*xlim)/a(3);
b=line([xlim(1),xlim(2)],[ylim(1),ylim(2)]);
set(h,'color','k')
x
%作解向量
%标记坐标原点
%随机产生图形
五、实验结果及说明
1.主界面 (实验环境:matlab2016)
2.结果(进行 4 次实验)
说明:迭代时,对于线性可分的样本集,经过有限次修正,可以找到一个解向量,
使得算法在有限次迭代后收敛,本次实验对权向量进行修正时采用较为单一的方式,而在
复杂的问题中还可以使用多种修正方式。此外没有显示迭代次数也是本次实验不足之处。
总结:在进行四次随机数生成并分类实验后,可以发现该感知器准则分类器可以较
为稳定的实现线性分类。通过本次实验是我对梯度下降算法有了更加深刻的认识与理
解。