机器学习-模型与算法

【模型】一篇入门之-PNN概率神经网络

作者 : 老饼 发表日期 : 2023-03-25 00:20:45 更新日期 : 2024-10-19 09:13:53
本站原创文章,转载请说明来自《老饼讲解-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与任何一个已有样本中xix_i相同的概率都服从正态分布
 概率神经网络PNN的概率原理
则易知,样本xix_i认为样本xx与它相同的概率为 : P(i)=aexp(b2xxi22)\small \text{P}^{(i)} = a*\textbf{exp}(-b^2\left \| x-x_i\right \| _2^2)  
再以所有历史样本的概率评估作为评分,并以k类历史样本的评分占比作为样本属于k类的概率
 则PNN评估样本x属于类别k的概率为:
 Pk(x)=yi=kP(i)iP(i)=yi=kexp(b2xxi22)iexp(b2(xxi22)\small \text{P}_k(x) = \dfrac{\sum\limits_{\text{y}_i=k} \text{P}^{(i)}}{\sum\limits_{i} \text{P}^{(i)}} = \dfrac{\sum\limits_{\text{y}_i=k} \textbf{exp}(-b^2\left \| x-x_i\right \| _2^2)}{\sum\limits_{i} \textbf{exp}(-b^2(\left \| x-x_i\right \| _2^2)}
由于上式的分母对于所有k都是一样的,因此,在类别判别时可以只用分子部分
 即PNN判别函数为:
 Gk(x)=yi=kexp(b2(xxi22)\small \text{G}_k(x) = \sum\limits_{\text{y}_i=k} \textbf{exp}(-b^2(\left \| x-x_i\right \| _2^2)
在样本判别时,只需要比较哪类样本的判别值大,就认为样本x属于哪个类别





       PNN的拓扑结构与模型表达式         


 PNN神经网络一般用如下的三层神经网络的形式来表示
 PNN概率神经网络的拓扑图如下:
 PNN概率神经网络的拓扑图
 备注:PNN的拓扑结构在此不作讲解,自行结合上述原理与下述数学表达式进行理解
 PNN的模型表达式如下:
 
h=exp([b(2)xW(21)2]2)\small \text{h} = \textbf{exp}(-[b^{(2)}\left \| x-W^{(21)}\right \| _2]^2)                     
 g=W(32)h\small \text{g} = \text{W}^{(32)} *\text{h}                                                
 y=compet(h)\small \text{y} = \textbf{compet}(\text{h})                                            
其中,
 W(21)\small W^{(21)}:输入层与隐层的连接权重                                      
                                              W(21)\small W^{(21)}的第i行代表第i个RBF隐节点的中心,实际上就是第i个历史样本的x 
                  b(2)\small b^{(2)}   :隐层的阈值,它代表隐节点RBF的宽度 ,是一个预设的超参数
 W(32)\small W^{(32)}:隐层与输出层的权重矩阵                                      
                                              第j个样本属于第i类时,则Wij(32)\small W^{(32)}_{ij}为1,代表第j个隐节点与第i个输出连接
                                         compet\text{compet}:竞争函数,它将向量最大的值置为1,其余置0                                           
  PNN只需要把训练样本的 X保存为W(21)\small W^{(21)} , y 保存为W(32)\small W^{(32)},并设置好隐层的阈值b(2)\small b^{(2)} 的值就可以了
来了新样本,只要按上述表达式来计算预测值就可以了,即它是一个生成模型,整个构建过程不需任何训练
✍️PNN计算-例子讲解
以  x=[23],W(21)=[221514],W(32)=[110001],b(2)=1x=\begin{bmatrix} 2 \\3 \end{bmatrix}, W^{(21)} = \begin{bmatrix} 2 &2 \\ 1 & 5\\ 1 &4 \end{bmatrix},W^{(32)} = \begin{bmatrix} 1&1&0\\ 0&0&1 \end{bmatrix},b^{(2)}=1 为例
一、先计算径向基的值                                                                                 
                                  h=exp(b2x,W2122)=[exp(12[(22)2+(32)2]exp(12[(21)2+(35)2]exp(12[(21)2+(34)2]]=[0.36790.00670.1353]\small \begin{aligned} \textbf{h} &= \text{exp}(-b^2\left \|x,W_{21} \right \|_2^2) = \begin{bmatrix} \text{exp}(-1^2*[(2-2)^2+(3-2)^2] \\ \text{exp}(-1^2*[(2-1)^2+(3-5)^2] \\ \text{exp}(-1^2*[(2-1)^2+(3-4)^2] \end{bmatrix} =\begin{bmatrix} 0.3679\\ 0.0067\\ 0.1353 \end{bmatrix} \end{aligned}
二、计算判别值                                                                                            
 g=W32h=[110001][0.36790.00670.1353]=[0.37460.1353]\small g = W32*\text{h} = \begin{bmatrix} 1&1 & 0\\ 0&0 & 1\end{bmatrix} *\begin{bmatrix} 0.3679\\ 0.0067\\ 0.1353 \end{bmatrix} = \begin{bmatrix} 0.3746\\ 0.1353 \end{bmatrix}
三、计算竞争后的类别结果                                                                          
 y=compet(g)=compet([0.37460.1353])=[10]\text{y} = \text{compet}(g) = \text{compet}\left ( \begin{bmatrix} 0.3746\\ 0.1353 \end{bmatrix} \right ) =\begin{bmatrix} 1\\ 0 \end{bmatrix}







   02. PNN神经网络-代码实现   




本节展示如何实现一个PNN概率神经网络用于类别预测





    PNN概率神经网络-代码实现     


在matlab可以使用newpnn来构建一个PNN概率神经网络
具体代码实现如下:
% matlab工具箱实现概率神经网络(newpnn)进行类别预测(2018a版matlab实测已跑通)
% 训练数据
P = [1 2 3 4 5 6 7];   % 输入数据
Tc = [1 2 3 2 2 3 1]   % 输出数据:类别编号
T = ind2vec(Tc);       % 将类标转换为onehot编码格式

%构建PNN神经网络与预测
net = newpnn(P,T);      % 生成一个概率神经网络
Y = sim(net,P);         % 用网络进行预测
Yc = vec2ind(Y)         % 将预测结果转为类别编号 ·
运行结果如下:
 
PNN的代码运行结果
可以看到,PNN预测的样本类别Tc与真实类别Tc一致,说明模型是有效的






好了,以上就是PNN概率神经网络的全部内容了~







 End 






图标 评论
添加评论