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

news2024/9/22 21:23:44

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、数据集及显示

代码

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,:)')

视图效果

4d5fefa895b64a729f35c0ae3f875dfa.png

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

1)说明

将目标类索引 Tc 转换为向量 T
用 NEWPNN 设计 y 概率神经网络
 SPREAD 值 1,因为这是输入向量之间的 y 典型距离。

2)测试网络

代码

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,:)')

视图效果 

99dcaabffb554913b0d153b807c6b7e2.png

3)新数据测试网络

 代码

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)')

视图效果

03a46217cb4840ddb1d7a4da2b249be4.png

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

说明

分为三类

代码

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)')

试图效果

d9f88e5a4a194cdab4a7d4c903d77645.png

6、总结

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

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

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

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

7、源代码 

代码

%% 基于概率神经网络(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)')



 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1910997.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MyBatis框架学习笔记(一):MyBatis入门

1 MyBatis 介绍 1.1 官方文档 MyBatis 中文手册: (1)https://mybatis.org/mybatis-3/zh/index.html (2)https://mybatis.net.cn/ Maven 仓库: https://mvnrepository.com/ 仓库作用:需要…

android Dialog全屏沉浸式状态栏实现

在Android中,创建沉浸式状态栏通常意味着让状态栏背景与应用的主题颜色一致,并且让对话框在状态栏下面显示,而不是浮动。为了实现这一点,你可以使用以下代码片段: 1、实际效果图: 2、代码实现:…

第一次坐火车/高铁,如何坐?全流程讲解

第一次坐动车注意事项 第一次乘动车流程:进站→安检→候车厅→找检票口→过闸机→站台候车→找车厢→上车找座→下车→出站 乘车流程 一、进火车站/高铁站:刷购票证件原件进站 1、自助闸机刷证:身份证 2、人工通道:护照、临时…

Oracle通过procedure调用webservice接口

文章目录 准备工作方法体如下Oracle语句详情重要参数说明Web Service的URL地址构造SOAP请求包体构造SOAP请求包体方法依次如下操作即可: 如果需要把上面的功能变成function或者procedure,请自行搜索相关的方法实现即可。 准备工作 定义测试的webservice…

怎么将图片旋转30度?旋转图片的几种方法推荐

怎么将图片旋转30度?在创作过程中,我们常常需要处理图片的镜像效果,确保其视觉效果和构图都达到最佳状态。镜像效果的合理运用不仅可以解决视觉单调的问题,还能在艺术作品中吸引观者的注意力。此外,镜像可以有效地调整…

MoRA: High-Rank Updating for Parameter-Efficient Fine-Tuning

文章汇总 LoRA的问题 与FFT相比,低秩更新难以记忆新知识。虽然不断提高LoRA的秩可以缓解这一问题,但差距仍然存在。 动机 尽可能地利用相同的可训练参数来获得更高的 Δ W \Delta W ΔW秩。 考虑到预训练权值 W 0 ∈ R d k W_0\in R^{d\times k} W0​…

Mac电脑上有什么好玩的肉鸽游戏推荐 苹果电脑怎么玩以撒的结合

Mac电脑尽管在游戏兼容性上可能不及Windows。但是,对于喜欢在Mac上游玩的玩家来说,依然有不少优秀的游戏可以选择,尤其是那些富有挑战性和策略性的肉鸽游戏。此外,对于经典游戏《以撒的结合》,Mac平台也提供了良好的游…

原创作品—数据可视化大屏

设计数据可视化大屏时,用户体验方面需注重以下几点:首先,确保大屏信息层次分明,主要数据突出显示,次要信息适当弱化,帮助用户快速捕捉关键信息。其次,设计应直观易懂,避免复杂难懂的…

论文 | Chain-of-Thought Prompting Elicits Reasoningin Large Language Models 思维链

这篇论文研究了如何通过生成一系列中间推理步骤(即思维链)来显著提高大型语言模型进行复杂推理的能力。论文展示了一种简单的方法,称为思维链提示,通过在提示中提供几个思维链示例来自然地激发这种推理能力。 主要发现&#xff1…

飞睿智能会议室静止雷达人体检测传感器,实时监测使用状态,有人、无人智能感应节能减

在这个科技日新月异的时代,每一个细微的创新都可能成为推动行业创新的关键力量。今天,让我们聚焦于一项看似不起眼却实则潜力无限的技术——飞睿智能静止雷达人体检测传感器,以及它在会议室这一商务交流核心区域中的巧妙应用。想象一下&#…

嵌入式c语言——指针加修饰符

指针变量可以用修饰符来修饰

图吧工具箱:DIY爱好者必备工具合集

名人说:莫道谗言如浪深,莫言迁客似沙沉。 ——刘禹锡《浪淘沙》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 目录 一、概述二、主要功能1、硬件检测2、测试与故障诊断 三、使用方法四、总结 很…

我是如何渗透电信网络的

TLDR;作为一个电信公司的红队,从该公司的网络监控系统(NMS)获得一个立足点。通过基于HTTP协议的SSH隧道解决了Shell反连问题。通过HTTP获得SSH连接时,使用了Ninja。搭建代理以进行内部网络扫描。使用SS7应用程序访问CD…

斯坦福大学博士在GitHub发布的漫画机器学习小抄,竟斩获129k标星

斯坦福大学数据科学博士Chris Albon在GitHub上发布了一份超火的机器学习漫画小抄,发布仅仅一天就斩获GitHub榜首标星暴涨120k,小编有幸获得了一份并把它翻译成中文版本,今天给大家分享出来! 轻松的画风配上让人更容易理解的文字讲…

瑞萨RH850 RTC计时进位异常

RH850 MCU的RTC(实时时钟)采用BCD(二进制编码的十进制)编码格式,支持闰年自动识别,并具有秒、分、时、日、周、月、年的进位功能。其中,秒和分为60进位,时为12或24进位,周…

救生拉网的使用方法及注意事项_鼎跃安全

水域救援在夏季尤为重要,随着气温的升高,人们更倾向于参与水上活动,如游泳、划船、垂钓等,这些活动虽然带来了乐趣和清凉,但同时也增加了水域安全事故的风险。救生拉网作为水域安全的重要工具之一,其重要性…

Vue3 pdf.js将二进制文件流转成pdf预览

好久没写东西,19年之前写过一篇Vue2将pdf二进制文件流转换成pdf文件,如果Vue2换成Vue3了,顺带来一篇文章,pdf.js这个东西用来解决内网pdf预览,是个不错的选择。 首先去pdfjs官网,下载需要的文件 然后将下载…

前端入门知识分享:如何在HTML或CSS文件中引用CSS文件。

阅读提示:本文仅仅仅适用于刚刚接触HTML和CSS的小白从业者,新人爱好者。自觉身份不符的老鸟们,尽快绕行吧! 什么是CSS?什么是CSS文件。 CSS,全称为Cascading Style Sheets(层叠样式表&#xff…

数字化时代下,财务共享数据分析建设之路

随着人工智能、云计算、大数据、区块链等技术,以及衍生出的各种产品的大发展,使得数字化发展的速度再一次加快,也让数字经济和数字化转型得到了更多人的关注和认可。 在传统经济增长逐渐放缓,市场竞争愈发激烈的局面下&#xff0…

解决虚拟机文件因快照占用硬盘空间较多的情况(压缩虚拟机文件,节省硬盘空间)

在使用虚拟机(Wmware)中,我们经常会在需要的时候拍摄虚拟机快照,尤其是虚拟机运行时的快照,动辄几个G,容易占满硬盘空间,那么有什么方法能够压缩虚拟机文件呢 下面是压缩后的存放虚拟机的文件夹 可以看到节约了大约2…