概率神经网络(PNN)

        概率神经网络(Probabilistic Neural Network)是由D.F.Speeht博士在1989年首先提出,是径向基网络的一个分支,属于前馈网络的一种。它具有如下优点:学习过程简单、训练速度快;分类更准确,容错性好等。从本质上说,它属于一种有监督的网络分类器,基于贝叶斯最小风险准则。

       概率神经网络一般有以下四层:输入层、模式层、求和层和输出层。有的资料中也把模式层称为隐含层,把求和层叫做竞争层。其中,输入层负责将特征向量传入网络,输入层个数是样本特征的个数。模式层通过连接权值与输入层连接。计算输入特征向量与训练集中各个模式的匹配程度,也就是相似度,将其距离送入高斯函数得到模式层的输出。模式层的神经元的个数是输入样本矢量的个数,也就是有多少个样本,该层就有多少个神经元。求和层,就是负责将各个类的模式层单元连接起来,这一层的神经元个数是样本的类别数目。输出层的话,就负责输出求和层中得分最高的那一类。

      如果我们假设有一个识别任务,样本类别有3类,每类样本个数不定,每一个样本的特征维度为5维,那么我们可以画出以下网络结构图:


        在输入层和模式层之间的连接是通过一个高斯函数,求得模式层中的每个神经元和输入层中每个神经元之间的匹配程度。然后通过每类的匹配程度累加求和,再取平均,得到输入样本的所属类别。

        下面给出高斯函数公式:


其中,Lg表示g类的数量;n表示特征的个数(这里n=5) ; sigma表示平滑参数,这是唯一可以调整的量,一般在0到1之间,通过调整可以提高精度 ; Xij表示g类的第i个神经元的第j个数据。


        在Matlab仿真平台下,对于PNN又进行了一次封装,我们可以调用一些简单的函数来实现PNN算法。

%%  PNN在MATLAB平台下代码实现,假设data矩阵是M*N,
%%  M表示样本总数,N表示特征维度,再加上一个标签
%%  我们将前一半作为训练,后一半作为测试,假设M=50,N=6
Train = data(1:25,:);
Test = data(26:end,:);
p_train = Train(:,1:5)';
t_train = Train(:,6)';
p_test = Test(:,1:5)';
t_test = Test(:,6)';

spread = 1;
net = newpnn(p_train,t_train,spread);

%%实验一 训练数据回带,查看网络分类效果
Y = sim(net,p_train);
Yc = vec2ind(Y);
%%实验二 在测试集上查看预测未知数据效果
Y2 = sim(net,p_test);
Y2c = vec2ind(Y2);
%% 然后只要比较Y2c和真实标签t_test之间的差值


评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值