感知器算法有代码

  • 格式:doc
  • 大小:281.00 KB
  • 文档页数:10

基于模式识别的判别函数分类器的设计与实现

摘要:本文主要介绍了模式识别中判别函数的相关概念和感知器算法的原理及特点,并例举实例介绍感知器算法求解权向量和判别函数的具体方法,最后按照线性函数判决函数的感知算法思想结合数字识别,来进行设计,通过训练数字样本(每个数字样本都大于120),结合个人写字习惯,记录测试结果,最后通过matlab编码来实现感知器的数字识别。

关键字:模式识别 判别函数 感知器 matlab

1 引言

模式识别就是通过计算机用数学技术方法来研究模式的自动处理和识别。对于人类的识别能力我们是非常熟悉的。因为我们在早些年就已经会开发识别声音、脸、动物、水果或简单不动的东西的技术了。在开发出说话技术之前,一个象球的东西,甚至看上去只是象个球,就已经可以被识别出来了。所以除了记忆,抽象和推广能力是推进模式识别技术的关键技术。最近几年我们已可以处理更复杂的模式,这种模式可能不是直接基于通过感知器观察出来的随着计算机技术的发展,人类对模式识别技术提出了更高的要求。

本文第二节介绍判别函数分类器,具体介绍了判别函数的概念、特点以及如何确定判别函数的正负;第三节介绍了感知器的概念、特点并用感知器算法求出将模式分为两类的权向量解和判别函数,最后用matlab实现感知判别器的设计。

2 判别函数分类器

2.1 判别函数概念

直接用来对模式进行分类的准则函数。若分属于ω1,ω2的两类模式可用一方程d(X) =0来划分,那么称d(X) 为判别函数,或称判决函数、决策函数。如,

一个二维的两类判别问题,模式分布如图示,这些分属于ω1,ω2两类的模式可用一直线方程 d(X)=0来划分。其中0)(32211wxwxwdX 式中: 21,xx 为坐标变量。

图2-1 两类二维模式的分布

将某一未知模式 X 代入:

32211)(wxwxwdX

若0)(Xd,则1X类;

若0)(Xd,则2X类;

若0)(Xd,则21ωωXX或或拒绝

维数=3时:判别边界为一平面。

维数>3时:判别边界为一超平面。

2.2 判别函数正负值的确定

判别界面的正负侧,是在训练判别函数的权值时确定的。如图2-2。

0)(Xd 2x

1x O 1

2 + -

图2-2 判别函数正负的确定

图中 d(X)=0表示的是一种分类的标准,它可以是1、2、3维的,也可以是更高维的。

2.3 确定判别函数的两个因素

1)判决函数d(X)的几何性质。它可以是线性的或非线性的函数,维数在特征提取时已经确定。

已知三维线性分类 —— 判决函数的性质就确定了判决函数的形式:4332211)(wxwxwxwdX

非线性判决函数,其示意图如图2-3所示:

图:2-3 非线性判决函数图示

122x1xO 0)(Xd -

2x

1xO

2x

1x O

2)判决函数d(X)的系数,由所给模式样本确定的。

3感知器算法设计与实现

对一种分类学习机模型的称呼,属于有关机器学习的仿生学领域中的问题,由于无法实现非线性分类而下马。但“赏罚概念( reward-punishment concept)”

得到广泛应用,感知器算法就是一种赏罚过程。

3.1 感器算法原理及特点

3.1.1 感知器算法原理

两类线性可分的模式类 21,,设XWXdT)(其中,T121,,,,nnwwwwW,T211,,,,nxxxX应具有性质

(3-1)

对样本进行规范化处理,即ω2类样本全部乘以(-1),则有:

2)-(3 0)(TXWXd

感知器算法通过对已知类别的训练样本集的学习,寻找一个满足上式的权向量。

感知器算法步骤:

(1)选择N个分属于ω1和 ω2类的模式样本构成训练样本集{ X1 ,…, XN }构成增广向量形式,并进行规范化处理。任取权向量初始值W(1),开始迭代。迭代次数k=1。

(2)用全部训练样本进行一轮迭代,计算WT(k)Xi 的值,并修正权向量。

分两种情况,更新权向量的值:

1. ,若0≤TikXW分类器对第i个模式做了错误分类,权向量校正为:ickkXWW1 21T,0,0)(XXXWX若若d

c:正的校正增量。

2. 若,0TikXW分类正确,权向量不变:kkWW1,统一写为:

,01,0TkTkkkkkkCkWWXWWXWX (3-3)

(3)分析分类结果:只要有一个错误分类,回到(2),直至对所有样本正确分类。

感知器算法是一种赏罚过程:

分类正确时,对权向量“赏”——这里用“不罚”,即权向量不变;

分类错误时,对权向量“罚”——对其修改,向正确的方向转换。

3.1.2 感知算法特点--收敛性

收敛性:经过算法的有限次迭代运算后,求出了一个使所有样本都能正确分类的W,则称算法是收敛的。感知器算法是在模式类别线性可分条件下才是收敛的。

3.1.3 感知器算法用于多类情况

采用多类情况3的方法时,应有:

若iX,则,,)(ijddjiXX Mj,,1

对于M类模式应存在M个判决函数: Midi,,1,,,,,,

算法主要内容:

设有M中模式类别:M,,,21设其权向量初值为:Mjj,,1,1W训练样本为增广向量形式,但不需要规范化处理。第K次迭代时,一个属于ωi 类的模式样本X被送入分类器,计算所有判别函数

Mjkkdjj,,1,TXW (3-4)

分二种情况修改权向量:

① 若Mjijkdkdji,,2,1;,,则权向量不变;

Mjkkjj,,2,1,1WW

② 若第L个权向量使kdkdli≤,则相应的权向量作调整,即:

lijkkckkckkjjllii,,111WWXWWXWW

(3-5)

其中c为正的校正增量,只要模式类在情况3判别函数时是可分的,则经过有限次迭代后算法收敛。

3.2 实例说明

为了说明感知器算法的具体实现,下面举出实例加以说明:

已知两类训练样本

:1T10,0XT21,0X

:2T30,1XT41,1X

用感知器算法求出将模式分为两类的权向量解和判别函数。

解:所有样本写成增广向量形式;进行规范化处理,属于ω2的样本乘以(-1)。

T11,0,0X T21,1,0X T31,0,1X T41,1,1X

任取W(1)=0,取c=1,迭代过程为:

第一轮:

0,1000,0,0)1(1TXWT11,0,0)1()2(,0XWW故

1,1101,0,0)2(2TXWT1,0,0)2()3(,0WW故

-1,1-01-1,0,0)3(3TXWT30,0,1-)3()4(,0XWW故

1,1-1-1-0,0,1-)4(4TXWT0,0,1-)4()5(,0WW故

有两个WT(k)Xi ≤0的情况(错判),进行第二轮迭代。

第二轮:

T11T1,0,1-)5()6(,00)5(XWWXW故

T2T1,0,1-(6))7(,01)6(WWXW故

T33T0,0,2-)7()8(,00)7(XWWXW故

T4T0,0,2-)8()9(,02)8(WWXW故

第三轮:

T11T1,0,2-)9()10(,00)9(XWWXW故

(10))11(,01)10(2TWWXW故

)11()12(,01)11(3TWWXW故

)12()13(,01)12(4TWWXW故

第四轮:

)13()14(,01)13(1TWWXW故

(14))15(,01)14(2TWWXW故

)15()16(,01)15(3TWWXW故

)16()17(,01)16(4TWWXW故

该轮迭代的分类结果全部正确,故解向量T1,0,2W

相应的判别函数为:12)(1xdX

图3-1 判决函数示意图

判别界面d(X)=0如图示。当c、W(1)取其他值时,结果可能不一样,所以感 2x 0121xdX

0,13X 1,02X 1,14X

1x 1 2

0,01X

知器算法的解不是单值的。

3.3 matlab的感知器算法设计与实现

本设计是按照线性函数判决函数的感知算法思想结合数字识别,来进行设计,通过训练数字样本(每个数字样本都大于120),结合个人写字习惯,记录测试结果,最后通过matlab编码来实现感知器的数字识别。

3.3.1 Matlab代码设计

function y=jiangcheng(sample)

clc;

load templet pattern;

w=zeros(26,10);

d=[];

maxpos=0;

maxval=0;

f=1;

n=[];m=[];

%依次输入样本

for j=1:100

for i=1:10

f=1;

pattern(i).feature(26,j)=1;

for k=1:10

m=pattern(i).feature(:,j);

d(k)=w(:,k)*m;

end

%判断是否为最大值,如果是,f=1,否则f=0;

for=1:10

if k=i

if d(i)<=d(k)

I=0;

end

end

end

%修正权值

if f

for k=1:10

if k==i

w(:,k)=w(:,k)+pattern(i).feature(:,j);