模式识别作业马忠彧

发布 2021-03-07 07:38:28 阅读 1489

作业1:线性分类器设计。

1、问题描述。

将4个输入矢量分为两类,其中两个矢量对应的目标值为1,另两个矢量对应的目标值为0。输入矢量为p=[-0.5 -0.5 0.3 0

目标分类矢量为t=[1 1 0 0]

2、算法描述。

采用单一感知器神经元来解决这个简单的分类问题。感知器(perceptron)是由美国学者于2024年提出的,它是一个具有单层计算神经元的神经网络,并由线性阈值单元组成。当它用于两类模式的分类时,相当于在高维样本空间中,用一个超平面将两类样本分开。

两类样本线性情况下,线性判别函数可描述为,其中是权向量,是阈值。假设两类样本线性可分,则一定存在一个由定义的超平面,满足,其中。

定义感知器代价函数为,其中y是训练向量的子集,是权向量w定义的超平面错误分类的部分。变量;。为了计算出代价函数的最小迭代值,利用梯度下降法设计迭代方案,即。

其中,代入得。

这种算法称为感知器算法。这个算法从任意权向量w(0)开始初始化,通过错误分类特征形成修正向量。如此重复到算法收敛于解,即所有的特征向量都正确的分类。

可以证明,如果两类模式是线性可分的,则算法一定收敛。感知器特别适合用于简单的模式分类问题。

3、算法的实现。

matlab源程序如下:

t=[1 1 0 0];

w,b]=initp(p,t) %初始化感知器。

plotpv(p,t) %绘制输入矢量。

plotpc(w,b) %绘制分类线。

pausew,b,epochs,errors]=trainp(w,b,p,t,-1) %训练感知器。

pauseploterr(errors); 绘制误差图。

4、分类结果和讨论。

图1为分类结果,图中的实线将两类分开。经过6步达到误差要求,训练结束。误差变化曲线如图2所示。图1图2

经过训练后,网络的权值和阈值分别为。

w =-2.9871 -0.4630

b=-0.3572

训练结束后,验证。

p=[-0.5;-0.2];

a=simup(p,w,b)

运行结果为a=1属1类。

可见,单层感知器算法可用于简单的线性分类问题。

作业2:非线性分类器设计。

1、问题描述。

设计分类器实现同或运算。同或问题的真值表为。

用一条直线是不能将这两类分开的,可考虑非线性分类算法设计分类器。

2、算法描述。

1)双层感知器算法。

单层感知器神经网络不能解决线性不可分的输入矢量的分类问题,解决这一问题的办法是输入的线性不可分矢量进行预处理。双层感知器算法就是采用两层感知器神经元,先将线性不可分问题转化为线性可分问题,再进行分类的。

算法分为两个阶段,第一阶段的映射将非线性可分问题转换为线性可分问题,通过第一层的神经元完成第一阶段的计算,它们构成隐层(hidden layer),将输入向量x映射到新向量y,即。

第二阶段是基于转换数据实现分类,通过第二层神经元实现运算,构成输出层(output layer),得出决策方程。即。

2)径向基函数算法。

若定义函数变量为从中心点ci与输入向量的欧式距离,即,则称该函数为径向基函数(radial basis function,rbf)。函数f可有多种形式,例如。

高斯形式被广泛使用。

径向基函数网络的结构包括两层,即隐层和输出层,隐层为径向基层(radbas),利用径向基函数将非线性问题转换为线性问题,输出层为线性层(pureline),将转换后的样本用线性分类方法进行分类。

3、算法的实现与分类结果。

1)双层感知器算法。

matlab源程序为:

p=[0 0 1 1;0 1 0 1];

t=[1 0 0 1];

s1=2;w1,b1]=initp(p,s1)

w2,b2]=initp(s1,t)

plotpv(p,t)

plotpc(w1,b1)

pausea1=simup(p,w1,b1);

w2,b2,epochs,errors]=trainp(w2,b2,a1,t,[-1]);

ploterr(errors);

运行结果:图3为分类结果,误差变化曲线如图4所示。图3图4

训练结束后,,两层网络的权值和阈值分别为。

w1=[1 1;1 1];b1=[-0.5;-1.5]

w2=[1 -1] ;b2=-0.5;

2)径向基函数算法。

matlab源程序为:

p=[0 0;0 1;1 0;1 1];

t=[1 0 0 1];

c=[1 0;1 0];

n=dist(p,c)

a=radbas(n)

a1=a'w,b]=initp(a1,t)

subplot(211)

plotpv(a1,t)

plotpc(w,b)

w,b,epochs,errors]=trainp(w,b,a1,t,-1)

subplot(212)

ploterr(errors)

运行结果:分类结果和误差变化曲线如图5所示。

图5训练结束后,网络的权值和阈值分别为。

w =[1.6973 1.9886]

b =-1.7863

作业3: 非线性分类器设计。

1、问题描述。

将5个输入矢量分为两类,其中两个矢量对应的目标值为1,另三个矢量对应的目标值为0。输入矢量为p=[-0.5 -0.5 0.3 -0.1 -0.8

目标分类矢量为t=[1 1 0 0 0]

2、算法及实现。

1)采用单层感知器算法。

clearp=[-0.5 -0.5 0.3 -0.1 -0.8;-0.5 0.5 -0.5 1.0 0];

t=[1 1 0 0 0];

plotpv(p,t);

pausew,b]=initp(p,t)

pauseplotpv(p,t)

plotpc(w,b)

pausew,b,epochs,errors]=trainp(w,b,p,t,-1);

ploterr(errors)

2)采用双层感知器算法。

p=[-0.5 -0.5 0.3 -0.1 -0.8;-0.5 0.5 -0.5 1.0 0];

t=[1 1 0 0 0];

plotpv(p,t);

pauses1=2;

w1,b1]=initp(p,s1)

w2,b2]=initp(s1,t)

pauseplotpv(p,t)

plotpc(w1,b1)

pausea1=simup(p,w1,b1);

w2,b2,epochs,errors]=trainp(w2,b2,a1,t,[-1]);

ploterr(errors)

3、分类结果和讨论。

1)单层感知器算法。

图6为分类结果,误差变化曲线如图7所示。图6图7

训练结束后,网络的权值和阈值分别为。

w =[0.8096 0.1384]

b =0.2636

2)双层感知器算法。

分类结果如图8所示。

图83)讨论。

对于线性不可分输入矢量的分类问题,单层感知器神经网络永远也找不到正确的分类方案。对于这类问题,可采用先将线性不可分问题转化为线性可分问题,再用线性算法进行分类的方法解决,双层感知器算法就是采用这种途径。从结果来看,可以找到分类方案,但训练时间很长。

模式识别作业

6.题目 fisher分类和基于核的fisher分类的设计与实现研究。具体内容 1.简述fisher分类和基于核的fisher分类的算法原理 2.举出实例 3.用matlab软件编写程序实现 4.分析实验结果。fisher分类和基于核的fisher分类的设计与实现研究。1 fisher分类和基于核的...

模式识别作业

模式识别课程matlab程序作业。模式识别贝叶斯决策 正常状态细胞p 1 0.9,异常状态细胞p 2 0.1,类条件概率密度分别为p x 1 n 0,1 p x 2 n 0.2,1.5 现有一待识别细胞,其观察值为0.2,用matlab写出程序对该细胞进行分类。编写程序如下 close all cl...

模式识别作业

感知器训练算法。在设计贝叶斯分类器时需要设法获取样本统计分布的资料,应知道先验概率及类分布概率密度函数等。然而,在样本数不充足条件下要获取准确的统计分布是很困难的。这样,可以考虑另外一种分类器设计方法,即根据训练样本集提供的信息,直接进行分类器设计。下面实验是针对线性可分情况下的感知器算法。实验所用...