1. 原理
两类线性可分的模式类:,设判别函数为:。
对样本进行规范化处理,即类样本全部乘以(-1),则有:
感知器算法通过对已知类别的训练样本集的学习,寻找一个满足上式的权向量。
2. 过程
2.1 两类问题感知器算法
首先需要将训练样本构造成增广向量形式然后进行规范化处理,将属于w2的训练样本乘以(-1),处理后的训练样本为:
训练样本将以列向量的形式储存在A中,并设初始权向量为(-1,-2,-2,0),矫正量默认为1
接下来通过循环迭代去更新权向量的值(wX<=0则需要修改),代码如下,设置最大循环次数为100,当某一次迭代过程中八个训练样本均判别正确则跳出循环
迭代过程如下:
图1 迭代过程及结果
解向量已经求出,判别函数也就知道了,接下来绘制分类结果及判别界面,绘制三维图像,其中判别界面可以由内置函数fmesh实现
结果如下:
图2 分类图和判别界面
2.2 三类问题感知器算法
同样需要将训练样本修改为增广向量形式,但不需要再乘以(-1),处理结果如下:
三个初始权向量均设为0向量
设置最大循环次数为100开始进行迭代,每一次迭代需要对三类样本均判断比较d1,d2,d3的大小关系并更新权向量的值,以下代码以第一类样本为例,满足条件则更新相应的权向量
迭代过程如下:
图3 迭代过程
从中可以看出实际在第二轮迭代中就已经可以获得结果,第三轮只是进一步验证
得到了权向量便可以绘制判别函数,由于训练样本为2维数据且判别函数可以用直线描述,故可以直接通过两点一线的方法绘制图像,由于w2为0向量便无需绘制,结果如下:
图4分类结果及判别函数
可以看出训练样本可以被清晰的分成三类。
3. 结果与分析
3.1 两类样本
两类样本的感知器实验中,对于训练样本进行增广和将w2样本乘以(-1)的处理可以让我们在判断分类结果时只需要判断结果是否大于0即可,使得程序也可以更加简便,最终的分类结果可以通过三维图像来清晰的表示
3.2 三类样本
三类样本分类在训练数据的处理过程中不能做乘以(-1)的处理,在迭代过程中需要对每一类的训练数据计算所有的判别函数值并进行比较。
从实验过程中也可以看出感知器算法就是一种赏罚过程,分类错误则修改权向量,使其向正确方向转化,分类正确则不变。