资源描述:
《感知准则函数.docx》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、《模式识别》实验报告1实验目的1.学习和掌握关于感知准则函数的知识;2.应用感知准则函数求解判决面,解决模式识别的分类问题;2实验内容利用感知准则函数用感知准则函数的方法求解以下数据的判决面,学习率为ρt=0.1,画出每次迭代法向量的变化轨迹,并画出最终的判决曲线。样本ω1ω2样本ω1ω2x1x2x1x2x1x2x1x210.11.1-3.0-2.963.15.0-1.33.726.87.10.58.77-0.8-1.3-3.46.23-3.5-4.12.92.180.91.2-4.13.442.02.7-0.15.295.06.4-
2、5.11.654.12.8-4.02.2103.94.01.95.13实验原理或步骤初始的线性判别函数为g(x)=wTx+w0为了讨论方便,把向量x增加一维,但取其值为常数,即定义y=[1,x1,x2,···,xd]T7其中,x1为样本x的第i维分量。我们称y为增广的样本向量。相应地,定义增广的权向量为α=[w0,w1,w2,···,wd]T线性判别函数变为g(y)=αTy决策规则是:如果g(y)>0,则y∈ω1;如果g(y)<0,则y∈ω2。设一组样本为y1···,yN,若存在权向量α,使得对于样本集中的任意一个样本yi,i=1,·
3、··,N,若y∈ω1则αTyi>0,若y∈ω2则αTyi<0,那么称这组样本或这个样本集是线性可分的。即在样本的特征空间中,至少存在一个线性分类面能够把两类样本没有错误地分开。如果定义一个新的变量y′,使对于第一类的样本y′=y,而对第二类样本则y′=−y,即其中i=1,2,···,N则样本可分性条件就变成了存在α,使这样定义的y′称作规范化增广样本向量。为了讨论方便,都采用规范化增广样本向量,并且把y′仍然记作y。对于权向量α,如果某个样本yk被错误分类,则αTyk≤0。我们可以用对所有错分样本的求和来表示对错分样本的惩罚这就是Ro
4、senblatt提出的感知器准则函数。显然,当且仅当JP(α∗)=minJP(α)=0时α∗是解向量。感知器准则函数式的最小化可以用梯度下降方法迭代求解7α(t+1)=α(t)−ρt∇JP(α)即,下一时刻的权向量是把当前时刻的权向量向目标函数的负梯度方向调整一个修正量,其中ρt为调整的步长。目标函数Jp对权向量α的梯度是yk)因此,迭代修正的公式就是α(t+1)=α(t)+ρtT∑k(yk)αy≤0即在每一步迭代时把错分的样本按照某个系数加到权向量上。算法步骤如下:(1)任意选择初始的权向量α(0),置t=0;(2)考察样本yj,若
5、α(t)Tyj≤0,则α(t+1)=α(t)+yj,否则继续;(3)考察另一个样本,重复(2),直至对所有样本都有α(t)Tyj>0,即JP(α)=0。4运行结果和分析原始数据的分布,如图:7图像中可以清晰的发现有两个蓝色样本掺杂到红色中了,被错误分类。于是我把这两个样本坐标点进行了更改,由(-3.0,-2.9)和(2.9,2.1)分别改为(-3.0,6)和(2.9,8)。7图中可以看到决策线很好的将两类样本分开,下方的线代表每次迭代的法向量,长短代表迭代的先后。分析:5实验总结这次做感知实验的函数是我大学以来第一次把课上学到的算法运
6、用到解决一个实际问题上,虽然只是把两类样本分类。我从中获益很多,在做这个实验之前,虽然大概懂了感知准则函数这个算法,但总感觉模模糊糊,似懂非懂,但做实验时,真的是要把每个需要掌握的点都要挖透,一个点不懂,这整个实验就会导致失败,有的数学公式一大串,看似明白,但理解不深,在实际动手时,马上让我吃到苦头,在如何画出每次迭代的法向量上,想了好久好久,才发现原来自己对法向量的几何意义没有搞懂,这次实验真的让我知道了学好数学的重要性和优越7性。通过此次实验,我还加深了对matlab的画图的理解,整个过程虽然烦,但成果出现时,还是有点小兴奋的。6
7、附:matlab源码w1=[0.16.8−3.52.04.13.1−0.80.95.03.9;1.17.1−4.12.72.85.0−1.31.26.44.0];5.11.9;%分别产生第一类和第二类增广样本向量集ww1、ww2ww1=[ones(1,size(w1,2));w1];ww2=[ones(1,size(w2,2));w2];%产生第一类和第二类样本向量的规范化增广样本向量集w12w12=[ww1,−ww2];y=zeros(1,size(w12,2));%产生1x20的行向量,赋给y,初值全为0a=[1;1;1];%给权
8、向量a赋初值k=0;figure(1)whileany(y<=0)fori=1:size(y,2)y(i)=a’*w12(:,i);enda=a+0.1*(sum((w12(:,find(y<=0)))’))’;a=a/