本站原创文章,转载请说明来自《老饼讲解-BP神经网络》www.bbbdata.com
概率神经网络PNN全称为ProbabilisticNeuralNetwork,是一种用于样本类别判别的神经网络
本文讲解概率神经网络PNN的原理,以及PNN的拓扑结构和数学表达式,并展示一个PNN的代码实现
通过本文,可以了解PNN概率神经网络是什么,以及如何使用PNN神经网络来对样本类别进行判别
01. 概率神经网络PNN是什么
本节讲解概率神经网络PNN的思想与原理,快速了解PNN是什么
什么是概率神经网络PNN
概率神经网络PNN全称为Probabilistic Neural Networks,
它是D.F.Specht在1989年提出的一种径向基神经网络,用于解决模式识别(分类)问题
PNN解决类别预测问题的思路如下:
它假设x与任何一个已有样本中xi相同的概率都服从正态分布

则易知,样本xi认为样本x与它相同的概率为 : P(i)=a∗exp(−b2∥x−xi∥22)
再以所有历史样本的概率评估作为评分,并以k类历史样本的评分占比作为样本属于k类的概率
则PNN评估样本x属于类别k的概率为:
Pk(x)=i∑P(i)yi=k∑P(i)=i∑exp(−b2(∥x−xi∥22)yi=k∑exp(−b2∥x−xi∥22)
由于上式的分母对于所有k都是一样的,因此,在类别判别时可以只用分子部分
即PNN判别函数为:
Gk(x)=yi=k∑exp(−b2(∥x−xi∥22)
在样本判别时,只需要比较哪类样本的判别值大,就认为样本x属于哪个类别
PNN的拓扑结构与模型表达式
PNN神经网络一般用如下的三层神经网络的形式来表示
PNN概率神经网络的拓扑图如下:

备注:PNN的拓扑结构在此不作讲解,自行结合上述原理与下述数学表达式进行理解
PNN的模型表达式如下:
h=exp(−[b(2)∥x−W(21)∥2]2)
g=W(32)∗h
y=compet(h)
其中,
W(21):输入层与隐层的连接权重
W(21)的第i行代表第i个RBF隐节点的中心,实际上就是第i个历史样本的x
b(2) :隐层的阈值,它代表隐节点RBF的宽度 ,是一个预设的超参数
W(32):隐层与输出层的权重矩阵
第j个样本属于第i类时,则Wij(32)为1,代表第j个隐节点与第i个输出连接
compet:竞争函数,它将向量最大的值置为1,其余置0
PNN只需要把训练样本的 X保存为W(21) , y 保存为W(32),并设置好隐层的阈值b(2) 的值就可以了
来了新样本,只要按上述表达式来计算预测值就可以了,即它是一个生成模型,整个构建过程不需任何训练
✍️PNN计算-例子讲解
以 x=[23],W(21)=⎣⎡211254⎦⎤,W(32)=[101001],b(2)=1 为例
一、先计算径向基的值
h=exp(−b2∥x,W21∥22)=[exp(−12∗[(2−2)2+(3−2)2]exp(−12∗[(2−1)2+(3−5)2]exp(−12∗[(2−1)2+(3−4)2]]=[0.36790.00670.1353]
二、计算判别值
g=W32∗h=[101001]∗[0.36790.00670.1353]=[0.37460.1353]
三、计算竞争后的类别结果
y=compet(g)=compet([0.37460.1353])=[10]
02. PNN神经网络-代码实现
本节展示如何实现一个PNN概率神经网络用于类别预测
PNN概率神经网络-代码实现
在matlab可以使用newpnn来构建一个PNN概率神经网络
具体代码实现如下:
P = [1 2 3 4 5 6 7];
Tc = [1 2 3 2 2 3 1]
T = ind2vec(Tc);
net = newpnn(P,T);
Y = sim(net,P);
Yc = vec2ind(Y)
运行结果如下:

可以看到,PNN预测的样本类别Tc与真实类别Tc一致,说明模型是有效的
好了,以上就是PNN概率神经网络的全部内容了~
End