57、基于概率神经网络(PNN)的分类(matlab)

1、基于概率神经网络(PNN)的分类简介

PNN(Probabilistic Neural Network,概率神经网络)是一种基于概率论的神经网络模型,主要用于解决分类问题。PNN最早由马科夫斯基和马西金在1993年提出,是一种非常有效的分类算法。

PNN的原理可以简单概括为以下几个步骤:

  1. 数据输入层:将输入的样本数据分别输入到模型中。
  2. **模式层:**对每个输入数据进行模式匹配,计算其与指定类别之间的相似度得分。
  3. **模式比较层:**将所有类别的相似度得分进行比较,找到得分最高的类别作为最终分类结果。

PNN具有以下特点:

  1. 高效性:PNN的训练速度较快,且在实际应用中表现出较高的分类准确率。
  2. **鲁棒性:**PNN对噪声和异常值具有较强的鲁棒性,能够有效处理复杂的分类问题。
  3. **容易解释:**PNN的结果可以直观地解释,使得用户可以更好地理解模型的分类依据。

总的来说,PNN是一种非常有效的分类算法,适用于各种不同领域的分类问题,如图像识别、文本分类等。

2、基于概率神经网络(PNN)的分类说明及关键函数

1)说明

此处有三个二元输入向量 X 和它们相关联的类 Tc。

创建 y 概率神经网络,对这些向量正确分类。

2)重要函数

**newpnn()函数:**设计概率神经网络

概率神经网络(PNN)是一种适用于分类问题的径向基网络。

语法

net = newpnn(P,T,spread)%接受两个或三个参数,并返回一个新的概率神经网络。

参数

**P:**Q个输入向量的r × Q矩阵

**T:**Q个目标类向量的s × Q矩阵

spread:传播径向基函数的扩展(默认= 0.1)

如果扩散接近于零,则网络作为最近邻分类器。当扩展变大时,所设计的网络会考虑附近的几个设计向量。

sim()函数:模拟神经网络

语法

[Y,Xf,Af] = sim(net,X,Xi,Ai,T)

参数

net:网络

X:网络的输入

Xi:初始输入延迟条件(默认= 0)

Ai:初始层延迟条件(default = 0)

T:网络目标(默认= 0)

3、数据集及显示

代码

Matlab 复制代码
X = [1 2; 2 2; 1 1]';
Tc = [1 2 3];
figure(1)
plot(X(1,:),X(2,:),'.','markersize',30)
for i = 1:3, text(X(1,i)+0.1,X(2,i),sprintf('class %g',Tc(i))), end
axis([0 3 0 3])
title('三个二元向量及分类')
xlabel('X(1,:)')
ylabel('X(2,:)')

视图效果

4、 基于设计输入向量测试网络

1)说明

将目标类索引 Tc 转换为向量 T

用 NEWPNN 设计 y 概率神经网络

SPREAD 值 1,因为这是输入向量之间的 y 典型距离。

2)测试网络

代码

Matlab 复制代码
T = ind2vec(Tc);
spread = 1;
net = newpnn(X,T,spread);
%测试网络
%基于输入向量测试网络。通过对网络进行仿真并将其向量输出转换为索引来实现目的。
Y = net(X);
Yc = vec2ind(Y);
figure(2)
plot(X(1,:),X(2,:),'.','markersize',30)
axis([0 3 0 3])
for i = 1:3,text(X(1,i)+0.1,X(2,i),sprintf('class %g',Yc(i))),end
title('测试网络')
xlabel('X(1,:)')
ylabel('X(2,:)')

视图效果

3)新数据测试网络

代码

Matlab 复制代码
x = [2; 1.5];
y = net(x);
ac = vec2ind(y);
hold on
figure(3)
plot(x(1),x(2),'.','markersize',30,'color',[1 0 0])
text(x(1)+0.1,x(2),sprintf('class %g',ac))
hold off
title('新数据分类')
xlabel('X(1,:) and x(1)')
ylabel('X(2,:) and x(2)')

视图效果

5、 概率神经网络将输入空间分为三个类。

说明

分为三类

代码

Matlab 复制代码
x1 = 0:.05:3;
x2 = x1;
[X1,X2] = meshgrid(x1,x2);
xx = [X1(:) X2(:)]';
yy = net(xx);
yy = full(yy);
m = mesh(X1,X2,reshape(yy(1,:),length(x1),length(x2)));
m.FaceColor = [0 0.5 1];
m.LineStyle = 'none';
hold on
m = mesh(X1,X2,reshape(yy(2,:),length(x1),length(x2)));
m.FaceColor = [0 1.0 0.5];
m.LineStyle = 'none';
m = mesh(X1,X2,reshape(yy(3,:),length(x1),length(x2)));
m.FaceColor = [0.5 0 1];
m.LineStyle = 'none';
plot3(X(1,:),X(2,:),[1 1 1]+0.1,'.','markersize',30)
plot3(x(1),x(2),1.1,'.','markersize',30,'color',[1 0 0])
hold off
view(2)
title('三分类')
xlabel('X(1,:) and x(1)')
ylabel('X(2,:) and x(2)')

试图效果

6、总结

概率神经网络(PNN)是一种用于模式分类的人工神经网络。它基于贝叶斯定理和高斯混合模型,可以用于处理各种类型的数据,包括连续型数据和离散型数据。PNN在处理分类问题时比传统的神经网络更加灵活,具有更高的准确性和泛化能力。

PNN的基本工作原理是将输入数据集分别与样本集中的每个样本计算相似度,并根据相似度来对输入数据进行分类。PNN由四层组成:输入层、模式层、竞争层和输出层。输入数据首先通过输入层传递到模式层,再通过竞争层计算相似度,最后根据相似度在输出层进行分类。

在Matlab中,可以使用相关工具箱或自行编程来实现PNN分类。首先需要准备训练数据集和测试数据集,然后通过训练数据集来训练PNN模型。训练完成后,可以使用测试数据集来评估PNN的分类性能,并进行预测。

总的来说,PNN是一种强大的分类方法,适用于各种分类问题。在实际应用中,可以根据具体问题选择合适的特征和模型参数,以提高分类性能。Matlab提供了丰富的工具和函数支持,使得实现和应用PNN变得更加便捷。

7、源代码

代码

Matlab 复制代码
%% 基于概率神经网络(PNN)的分类(matlab)
%此处有三个二元输入向量 X 和它们相关联的类 Tc。
%创建 y 概率神经网络,对这些向量正确分类。
%重要函数:NEWPNN 和 SIM 函数
%% 数据集及显示
X = [1 2; 2 2; 1 1]';
Tc = [1 2 3];
figure(1)
plot(X(1,:),X(2,:),'.','markersize',30)
for i = 1:3, text(X(1,i)+0.1,X(2,i),sprintf('class %g',Tc(i))), end
axis([0 3 0 3])
title('三个二元向量及分类')
xlabel('X(1,:)')
ylabel('X(2,:)')
%% 基于设计输入向量测试网络
%将目标类索引 Tc 转换为向量 T
%用 NEWPNN 设计 y 概率神经网络
% SPREAD 值 1,因为这是输入向量之间的 y 典型距离。
T = ind2vec(Tc);
spread = 1;
net = newpnn(X,T,spread);
%测试网络
%基于输入向量测试网络。通过对网络进行仿真并将其向量输出转换为索引来实现目的。
Y = net(X);
Yc = vec2ind(Y);
figure(2)
plot(X(1,:),X(2,:),'.','markersize',30)
axis([0 3 0 3])
for i = 1:3,text(X(1,i)+0.1,X(2,i),sprintf('class %g',Yc(i))),end
title('测试网络')
xlabel('X(1,:)')
ylabel('X(2,:)')
%数据测试
x = [2; 1.5];
y = net(x);
ac = vec2ind(y);
hold on
figure(3)
plot(x(1),x(2),'.','markersize',30,'color',[1 0 0])
text(x(1)+0.1,x(2),sprintf('class %g',ac))
hold off
title('新数据分类')
xlabel('X(1,:) and x(1)')
ylabel('X(2,:) and x(2)')
%% 概率神经网络将输入空间分为三个类。
x1 = 0:.05:3;
x2 = x1;
[X1,X2] = meshgrid(x1,x2);
xx = [X1(:) X2(:)]';
yy = net(xx);
yy = full(yy);
m = mesh(X1,X2,reshape(yy(1,:),length(x1),length(x2)));
m.FaceColor = [0 0.5 1];
m.LineStyle = 'none';
hold on
m = mesh(X1,X2,reshape(yy(2,:),length(x1),length(x2)));
m.FaceColor = [0 1.0 0.5];
m.LineStyle = 'none';
m = mesh(X1,X2,reshape(yy(3,:),length(x1),length(x2)));
m.FaceColor = [0.5 0 1];
m.LineStyle = 'none';
plot3(X(1,:),X(2,:),[1 1 1]+0.1,'.','markersize',30)
plot3(x(1),x(2),1.1,'.','markersize',30,'color',[1 0 0])
hold off
view(2)
title('三分类')
xlabel('X(1,:) and x(1)')
ylabel('X(2,:) and x(2)')
相关推荐
羊小猪~~2 小时前
神经网络基础--什么是正向传播??什么是方向传播??
人工智能·pytorch·python·深度学习·神经网络·算法·机器学习
软工菜鸡2 小时前
预训练语言模型BERT——PaddleNLP中的预训练模型
大数据·人工智能·深度学习·算法·语言模型·自然语言处理·bert
哔哩哔哩技术3 小时前
B站S赛直播中的关键事件识别与应用
深度学习
deephub3 小时前
Tokenformer:基于参数标记化的高效可扩展Transformer架构
人工智能·python·深度学习·架构·transformer
___Dream3 小时前
【CTFN】基于耦合翻译融合网络的多模态情感分析的层次学习
人工智能·深度学习·机器学习·transformer·人机交互
极客代码3 小时前
【Python TensorFlow】入门到精通
开发语言·人工智能·python·深度学习·tensorflow
顶呱呱程序4 小时前
2-143 基于matlab-GUI的脉冲响应不变法实现音频滤波功能
算法·matlab·音视频·matlab-gui·音频滤波·脉冲响应不变法
王哈哈^_^5 小时前
【数据集】【YOLO】【VOC】目标检测数据集,查找数据集,yolo目标检测算法详细实战训练步骤!
人工智能·深度学习·算法·yolo·目标检测·计算机视觉·pyqt
是瑶瑶子啦5 小时前
【深度学习】论文笔记:空间变换网络(Spatial Transformer Networks)
论文阅读·人工智能·深度学习·视觉检测·空间变换
wangyue46 小时前
c# 深度模型入门
深度学习