PNN模式识别.docx
- 文档编号:4336397
- 上传时间:2022-11-29
- 格式:DOCX
- 页数:13
- 大小:648.46KB
PNN模式识别.docx
《PNN模式识别.docx》由会员分享,可在线阅读,更多相关《PNN模式识别.docx(13页珍藏版)》请在冰豆网上搜索。
PNN模式识别
一.概率神经网络
概率神经网络(ProbabilisticNeuralNetworks,PNN)是由D.F.Specht在1990年提出的。
主要思想是用贝叶斯决策规则,即错误分类的期望风险最小,在多维输入空间内分离决策空间。
它是一种基于统计原理的人工神经网络,它是以Parzen窗口函数为激活函数的一种前馈网络模型。
PNN吸收了径向基神经网络与经典的概率密度估计原理的优点,与传统的前馈神经网络相比,在模式分类方面尤其具有较为显著的优势。
PNN的结构如图所示,共由四层组成,以3类为例,同时设特征向量维数为3。
每层的介绍如下:
在PNN的神经网络模型中,输入层中的神经元数目等于学习样本中输入向量的m,各神经元是简单的分布单元,直接将输入变量传递给样本层。
样本层的节点数由输入样本和待匹配类别的乘积决定,为m*L。
样本层是将输入节点传来的输入进行加权求和,然后经过一个激活函数运算后,再传给求和层。
这里激活函数采用高斯函数,则输出为:
式中
为径向基函数的中心,
表示特性函数第i个分量对弈的开关参数。
些层中每个节点均为RBF的中心,采用的特性函数为径向基函数—高斯函数,计算未知模式与标准模式间相似度。
求和层各单元只与相应类别的模式单元相连,各单元只依据Parzen方法求和估计各类的概率,即其条件概率为:
式中
为类别,X为识别样本,
为类别i的模式样本(在概率神经网络中做为权值),m为向量维数,
为平滑参数,n为类i的模式样本数量。
先验概率记为P(X)。
决策层节点数等于待匹配类别数,为L。
根据各类对输入向量概率的估计,采用Bayes分类规则,选择出具有最小“风险”的类别,即具有最大后验概率的类别,可用下式来表达其决策方法对所有i
则输出y(X)=
。
二.基本学习算法
1、归一化训练样本矩阵
,该矩阵的训练样本有m个,每一个样本维数为n。
,归一化系数。
,C即为归一化后的学习样本。
2、将归一化好的m个样本送入到网络输入层中
3、模式距离的计算
该距离是指样本矩阵与学习矩阵中相应元素之间的距离。
假设将由P个n维向量组成的矩阵称为待识别样本矩阵,则经归一化后,需要待识别的输入样本矩阵为:
,待分类样本矩阵,有p个,每一个样本维数为n。
计算欧式距离:
就是需要识别的归一化的样本向量
,与每一个归一化后的训练样本(
)的欧式距离。
归一化的训练样本
,i=1,2,...,m;
归一化的待分类样本
,j=1,2,...,p;
:
表示第i个待分类样本(
)与第j个训练样本(
)的欧式距离。
4、模式层高斯函数的神经元被激活
学习样本与待识别样本被归一化后,通常取标准差
=0.1的高斯型函数。
激活后得到初始概率矩阵:
5、在网络的求和层求得初始概率和
假设样本有m个,那么一共可以分为c类,设属于每一类的样本数目分别为
,
,
,
,且
,在每一行中
、
、
、
分别取不同的值,则可以在网络的求和层求得各个样本属于各类的初始概率和:
6、计算概率
计算概率,即第i个样本属于第j类的概率。
,概率值最大的那一类即为所属类。
三.微博好友特性分类
本实验中,类别定为4类:
明星,同学,同事,密友。
特征定为3类,分别以落入不同的范围来表征,利用前面建立起来的模型进行分类。
1、明星(1-20,21-40,41-60)
2、同学(61-80,81-100,101-120)
3、同事(121-140,141-160,161-180)
4、密友(181-200,201-220,221-240)
每一组用20个训练样本,样本来自于程序中生成的满足一定范围的随机数。
训练样本的个数是可以认为控制的,只要修改程序中的宏就可以。
在本实验中,我们自己定义一些待分类样本:
明星:
蔡康永(10,30,50) 琢磨先生(15,35,55) 韩寒(5,25,45)
同学:
张三(70,90,110) 李四(65,85,105) 王五(75,95,115)
同事:
张一(130,150,170) 李二(125,145,165) 王三(135,155,175)
亲人:
妈妈(190,210,230) 哥哥(185,205,225) 姐姐(195,215,235)
运行结果如下:
偶尔也会出现分类错误的时候:
不过分类错误的情况很少,运行程序很多次才偶尔会出错。
原因可能是因为训练样本是随机生成的随机数,不一定都在那个范围内均匀分布,可能会偏大或偏小,造成计算欧式距离时出现分类的错误。
程序的运行环境为vs2013。
#include
#include
#include
#include
#include
#include
#definep12
#definem80
usingnamespacestd;
structData1
{
doubled1;
doubled2;
doubled3;
intc;
};
structData2
{
stringname;
doubled1;
doubled2;
doubled3;
intc;
};
structData3
{
doubledata;
intc;
};
intmain()
{
structData1sample[m];
srand(time(0));
for(inti=0;i<20;i++)
{
sample[i].d1=rand()%20+1;
sample[i].d2=rand()%20+21;
sample[i].d3=rand()%20+41;
sample[i].c=1;
}
for(inti=20;i<40;i++)
{
sample[i].d1=rand()%20+61;
sample[i].d2=rand()%20+81;
sample[i].d3=rand()%20+101;
sample[i].c=2;
}
for(inti=40;i<60;i++)
{
sample[i].d1=rand()%20+121;
sample[i].d2=rand()%20+141;
sample[i].d3=rand()%20+161;
sample[i].c=3;
}
for(inti=60;i<80;i++)
{
sample[i].d1=rand()%20+181;
sample[i].d2=rand()%20+201;
sample[i].d3=rand()%20+221;
sample[i].c=4;
}
structData2t[p]={{"蔡康永",10,30,50},{"张三",70,90,110},{"张一",130,150,170},{"妈妈",190,210,230},
{"琢磨先生",15,35,55},{"李四",65,85,105},{"李二",125,145,165},{"哥哥",185,205,225},
{"韩寒",5,25,45},{"王五",75,95,115},{"王三",135,155,175},{"姐姐",195,215,235}};
doubleb[m];
structData1c[m];
for(inti=0;i { b[i]=1.0/sqrt(pow(sample[i].d1,2.0)+pow(sample[i].d2,2.0)+pow(sample[i].d3,2.0)); c[i].d1=b[i]*sample[i].d1; c[i].d2=b[i]*sample[i].d2; c[i].d3=b[i]*sample[i].d3; c[i].c=sample[i].c; } doublew[p]; structData1d[p]; for(inti=0;i { w[i]=1.0/sqrt(pow(t[i].d1,2.0)+pow(t[i].d2,2.0)+pow(t[i].d3,2.0)); d[i].d1=w[i]*t[i].d1; d[i].d2=w[i]*t[i].d2; d[i].d3=w[i]*t[i].d3; } doublee[p][m]; structData3pr[p][m]; for(inti=0;i { for(intj=0;j { e[i][j]=sqrt(pow(d[i].d1-c[j].d1,2.0)+pow(d[i].d2-c[j].d2,2.0)+pow(d[i].d3-c[j].d3,2.0)); pr[i][j].data=exp(-e[i][j]/(2*0.01)); pr[i][j].c=c[j].c; } } doubles[p][4]={0}; for(inti=0;i { for(intj=0;j { if(pr[i][j].c==1) s[i][0]+=pr[i][j].data; elseif(pr[i][j].c==2) s[i][1]+=pr[i][j].data; elseif(pr[i][j].c==3) s[i][2]+=pr[i][j].data; else s[i][3]+=pr[i][j].data; } } doubleprob[p][4]; for(inti=0;i { for(intj=0;j<4;j++) { prob[i][j]=s[i][j]/(s[i][0]+s[i][1]+s[i][2]+s[i][3]); } } ofstreammyfile; myfile.open("result.txt"); if(myfile.fail()) { cout<<"Fileopeningfailed! \n"; exit (1); } doubletemp=0; intk; for(inti=0;i { for(intj=0;j<4;j++) { if(prob[i][j]>temp) { temp=prob[i][j]; k=j+1; } } t[i].c=k; temp=0; } cout<<"明星: "; myfile<<"明星: "; for(inti=0;i { if(t[i].c==1) { cout< myfile< } } cout< myfile< cout<<"同学: "; myfile<<"同学: "; for(inti=0;i { if(t[i].c==2) { cout< myfile< } } cout< myfile< cout<<"同事: "; myfile<<"同事: "; for(inti=0;i { if(t[i].c==3) { cout< myfile< } } cout< myfile< cout<<"亲人: "; myfile<<"亲人: "; for(inti=0;i { if(t[i].c==4) { cout< myfile< } } cout< myfile< myfile.close(); system("pause"); return0; }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- PNN 模式识别