(转载)有导师学习神经网络的分类(matlab实现)

news2024/12/26 22:38:49
        有导师学习神经网络以其良好的学习能力广泛应用于各个领域中,其不仅可以解决拟合回归问题,亦可以用于模式识别、分类识别。将继续介绍两种典型的有导师学习神经网络(GRNN和PNN),并以实例说明其在分类识别中的应用。

1 理论基础

1.1 广义回归神经网络(GRNN)概述

        1.GRNN的结构
        GRNN最早是由Specht提出的,是RBF神经网络的一个分支,是一种基于非线性回归理论的前馈式神经网络模型。
        GRNN的结构如图1所示,一般由输入层、隐含层和输出层组成。输入层仅将样本变量送入隐含层,并不参与真正的运算。隐含层的神经元个数等于训练集样本数,该层的权值函数为欧式距离函数(用||dist||表示),其作用为计算网络输入与第一层的权值IW1,1之间的距离,b1为隐含层的阈值。隐含层的传递函数为径向基函数,通常采用高斯函数作为网络的传递函数。网络的第三层为线性输出层,其权函数为规范化点积权函数(用nprod表示),计算网络的向量为n²,它的每个元素就是向量a1和权值矩阵LW2,1每行元素的点积再除以向量a1的各元素之和得到的,并将结果n²提供给线性传递函数a2=purelin(n²),计算网络输出。
图1  GRNN的结构
        2.GRNN的学习算法
        GRNN的学习算法与RBF神经网络的学习算法类似,但在输出层部分区别较大。下面将详细描述GRNN的学习算法及步骤。
        (1)确定隐含层神经元径向基函数中心
        不失一般性,设训练集样本输入矩阵P和输出矩阵T分别为
        与RBF神经网络相同,隐含层的每个神经元对应一个训练样本,即Q个隐含层神经元对应的径向基函数中心为

        (2)确定隐含层神经元阈值
        为了简便起见,Q个隐含层神经元对应的阈值为

        (3)确定隐含层与输出层间权值
        当隐含层神经元的径向基函数中心及阈值确定后,隐含层神经元的输出便可以由式(26-4)计算:

        与RBF神经网络不同的是,GRNN中隐含层与输出层间的连接权值W取为训练集输出矩阵,即

        (4)输出层神经元输出计算
        当隐含层与输出层神经元间的连接权值确定后,根据图26-1所示,便可以计算出输出层神经元的输出,即

        3.GRNN的特点
        与BP神经网络相比,GRNN具有如下优点:
        (1)网络的训练是单程训练而不需要迭代。
        (2)隐含层神经元个数由训练样本自适应确定。
        (3)网络各层之间的连接权重由训练样本唯一确定,避免了BP神经网络在迭代中的权值修改。
        (4)隐含层节点的激活函数采用对输入信息具有局部激活特性的高斯函数,使得对接近于局部神经元特征的输入具有很强的吸引力。
        4.GRNN的MATLAB工具箱函数
        函数newgrnn用于创建一个GRNN,其调用格式如下:
net= newgrnn(P,T,spread)
        其中,P为网络输入向量;T为网络目标向量;spread为径向基函数的扩展速度(默认为1.0); net为创建好的GRNN。

1.2 概率神经网络(PNN)概述

        1.PNN的结构
        PNN是一种前馈型神经网络,由Specht在1989年提出,他采用Parzen提出的由高斯函数为基函数来形成联合概率密度分布的估计方法和贝叶斯优化规则,构造了一种概率密度分类估计和并行处理的神经网络。因此,PNN既具有一般神经网络所具有的特点,又具有很好的泛化能力及快速学习能力。
        PNN的结构如图2所示,与GRNN类似,由输入层、隐含层及输出层组成。与GRNN不同的是,PNN的输出层采用竞争输出代替线性输出,各神经元只依据Parzen方法来求和估计各类的概率,从而竞争输入模式的响应机会,最后仅有一个神经元竞争获胜,这样获胜神经元即表示对输入模式的分类。
        在数学上,PNN的结构合理性可由Cover定理证明,即对于一个模式问题,在高维数据空间中可能解决在低维空间不易解决的问题。这就是PNN隐含层神经元较多的原因,即隐含层空间维数较高。隐含层空间的维数和网络性能有着直接的关系,维数越高,网络的逼近精度就越高,但带来的负面后果是网络复杂度也随之提高。

图2 PNN的结构 

        2.PNN的学习算法
        PNN的学习算法与GRNN的学习算法较为接近,仅在输出层部分有细微差别。下面将详细描述PNN的学习算法及步骤。
        (1)确定隐含层神经元径向基函数中心
        不失一般性,设训练集样本输入矩阵P和输出矩阵T分别为
        与GRNN相同,隐含层的每个神经元对应一个训练样本,即Q个隐含层神经元对应的径向基函数中心为

        (2)确定隐含层神经元阈值
        为了简便起见,Q个隐含层神经元对应的阈值为

        (3)确定隐含层与输出层间权值
        当隐含层神经元的径向基函数中心及阈值确定后,隐含层神经元的输出便可以由式(26-11)计算:

        与RBF神经网络不同的是,PNN中隐含层与输出层间的连接权值W取为训练集输出矩阵,即

        (4)输出层神经元输出计算
        当隐含层与输出层神经元间的连接权值确定后,根据图2所示,便可以计算出输出层神经元的输出,即
        3.PNN的MATLAB工具箱函数
        函数newpnn用于创建一个PNN,其调用格式如下:
net=newpnn(P,T,spread)
其中,P为网络输入向量;T为网络目标向量;spread为径向基函数的扩展速度(默认为0.1);net为创建好的RBF网络。

2 案例背景

2.1 问题描述

        植物的分类与识别是植物学研究和农林业生产经营中的重要基础工作,对于区分植物种类、探索植物间的亲缘关系、阐明植物系统的进化规律具有重要意义。目前常用的植物种类鉴别方法是利用分类检索表进行鉴定,但该方法花费时间较多,且分类检索表的建立是一件费时费力的工作,需要投入大量的财力物力。
        叶片是植物的重要组成部分,叶子的外轮廓是其主要形态特征。在提取叶子形态特征的基础上,利用计算机进行辅助分类与识别成为当前的主要研究方向,同时也是研究的热点与重点。
        现采集到150组不同类型鸢尾花(Setosa、Versicolour和Virginica)的4种属性:萼片长度、萼片宽度、花瓣长度和花瓣宽度,样本编号与4种属性的关系如图3所示(其中,样本编号1~50为Setosa, 51~100为Versicolour, 101~150为Virginica)。从图中大致可以看出,花瓣长度、花瓣宽度与鸢尾花类型间有较好的线性关系,而萼片长度、萼片宽度与鸢尾花类型间呈现出非线性的关系。

图3  样本编号与4种属性的关系
        现要求:
        (1)利用GRNN和PNN分别建立鸢尾花种类识别模型,并对模型的性能进行评价。
        (2)利用GRNN和PNN分别建立各个属性及属性组合与鸢尾花种类间的识别模型,并与(1)中所建模型的性能及运算时间进行对比,从而探求各个属性及属性组合与鸢尾花种类的相关程度。

2.2 解题思路及步骤

        依据问题描述中的要求,实现GRNN及PNN的模型建立及性能评价,大体上可以分为以下几个步骤,如图4所示。
        1.产生训练集/测试集
        在产生训练集及测试集时,除了考虑训练集及测试集样本数的大小,还应考虑异常样本对模型性能的影响,对于异常样本应进行剔除。常用的异常样本剔除方法有观察法、统计法、聚类法等。
        2.创建GRNN
        利用MATLAB自带的神经网络工具箱函数可以方便地创建GRNN,具体程序参见第3节。
        3.创建PNN
        利用MATLAB自带的神经网络工具箱函数可以方便地创建PNN,具体程序参见第3节。
        4.仿真测试
        模型建立后,将测试集的输入变量送入模型,模型的输出便是对应的预测结果。
        5.性能评价
        通过计算测试集预测类别与真实类别间的误差,可以对模型的泛化能力进行评价。同时,通过对比不同属性及属性组合与鸢尾花类别间的相关性,可以在模型精度与运算速度上做出折中选择。

3 MATLAB程序实现

        利用MATLAB神经网络工具箱提供的函数,可以方便地在MATLAB环境下实现上述步骤。

 

%% 清空环境变量
clear all
clc

%% 训练集/测试集产生

% 导入数据
load iris_data.mat
figure
subplot(2,2,1)
scatter(1:150,features(:,1),'*')
xlabel('样本编号')
ylabel('萼片长度')
subplot(2,2,2)
scatter(1:150,features(:,2),'*')
xlabel('样本编号')
ylabel('萼片宽度')
subplot(2,2,3)
scatter(1:150,features(:,3),'*')
xlabel('样本编号')
ylabel('花瓣长度')
subplot(2,2,4)
scatter(1:150,features(:,4),'*')
xlabel('样本编号')
ylabel('花瓣宽度')

% 随机产生训练集和测试集
P_train = [];
T_train = [];
P_test = [];
T_test = [];
for i = 1:3
    temp_input = features((i-1)*50+1:i*50,:);
    temp_output = classes((i-1)*50+1:i*50,:);
    n = randperm(50);
    % 训练集——120个样本
    P_train = [P_train temp_input(n(1:40),:)'];
    T_train = [T_train temp_output(n(1:40),:)'];
    % 测试集——30个样本
    P_test = [P_test temp_input(n(41:50),:)'];
    T_test = [T_test temp_output(n(41:50),:)'];
end

%% 模型建立 
result_grnn = [];
result_pnn = [];
time_grnn = [];
time_pnn = [];
for i = 1:4
    for j = i:4
        p_train = P_train(i:j,:);
        p_test = P_test(i:j,:);
       %% GRNN创建及仿真测试
        t = cputime;
        % 创建网络
        net_grnn = newgrnn(p_train,T_train);
        % 仿真测试
        t_sim_grnn = sim(net_grnn,p_test);
        T_sim_grnn = round(t_sim_grnn);
        t = cputime - t;
        time_grnn = [time_grnn t];
        result_grnn = [result_grnn T_sim_grnn'];
       %% PNN创建及仿真测试
        t = cputime;
        Tc_train = ind2vec(T_train);
        % 创建网络
        net_pnn = newpnn(p_train,Tc_train);
        % 仿真测试
        Tc_test = ind2vec(T_test);
        t_sim_pnn = sim(net_pnn,p_test);
        T_sim_pnn = vec2ind(t_sim_pnn);
        t = cputime - t;
        time_pnn = [time_pnn t];
        result_pnn = [result_pnn T_sim_pnn'];
    end
end

%% 性能评价

% 正确率accuracy
accuracy_grnn = [];
accuracy_pnn = [];
time = [];
for i = 1:10
    accuracy_1 = length(find(result_grnn(:,i) == T_test'))/length(T_test);
    accuracy_2 = length(find(result_pnn(:,i) == T_test'))/length(T_test);
    accuracy_grnn = [accuracy_grnn accuracy_1];
    accuracy_pnn = [accuracy_pnn accuracy_2];
end
% 结果对比
result = [T_test' result_grnn result_pnn]
accuracy = [accuracy_grnn;accuracy_pnn]
time = [time_grnn;time_pnn]
%% 绘图
figure(1)
plot(1:30,T_test,'bo',1:30,result_grnn(:,4),'r-*',1:30,result_pnn(:,4),'k:^')
grid on
xlabel('测试集样本编号')
ylabel('测试集样本类别')
string = {'测试集预测结果对比(GRNN vs PNN)';['正确率:' num2str(accuracy_grnn(4)*100) '%(GRNN) vs ' num2str(accuracy_pnn(4)*100) '%(PNN)']};
title(string)
legend('真实值','GRNN预测值','PNN预测值')
figure(2)
plot(1:10,accuracy(1,:),'r-*',1:10,accuracy(2,:),'b:o')
grid on
xlabel('模型编号')
ylabel('测试集正确率')
title('10个模型的测试集正确率对比(GRNN vs PNN)')
legend('GRNN','PNN')
figure(3)
plot(1:10,time(1,:),'r-*',1:10,time(2,:),'b:o')
grid on
xlabel('模型编号')
ylabel('运行时间(s)')
title('10个模型的运行时间对比(GRNN vs PNN)')
legend('GRNN','PNN')
        说明:
        (1)借助函数cputime可以计算出程序(段)运行的时间,以衡量程序的运行速度及性能好坏,具体用法请参考帮助文档。
        (2)函数round的作用是四舍五入取整,具体用法请参考帮助文档。
        (3)函数ind2vec用于将代表类别的下标矩阵转换为对应的矢量矩阵,函数vec2ind的作用与函数ind2vec的作用相反,将矢量矩阵转换为对应的代表类别的下标矩阵。

        (4)result_grnn和result_pnn均为30行10列的矩阵,分别对应表1中的10个模型。

        其中,“O”表示对应的输入属性参与模型的建立。
        (5)accuracy为2行10列的矩阵,其第1行对应基于GRNN的10个模型的测试集正确率,其第2行对应基于PNN的10个模型的测试集正确率。
        (6)time为2行10列的矩阵,其第1行对应基于GRNN的10个模型的创建及仿真测试时间,其第2行对应基于PNN的10个模型的创建及仿真测试时间。

4 结果分析

        由于训练集和测试集是随机产生的,每次运行时的结果亦会有所不同。某次程序运行结果如图5、图6和图7所示。

 

        从图中不难发现:
        (1)GRNN和PNN模型具有良好的泛化能力,测试集预测正确率分别达96.67%和100%
        (2)如表1所列,利用4个属性(萼片长度、萼片宽度、花瓣长度、花瓣宽度)建立的模型编号分别为1、5、8、10。表2描述了与之对应的GRNN和PNN模型的测试集正确率。
        由表2中可以清晰地看出,萼片宽度单独建立的GRNN模型(模型编号分别为1和5)性能不佳,确率只有43.3和33.3%; 利用花瓣长度和花瓣宽度单独建立的GRNN 模型(模型编号分别为8和10)性能较好,正确率分别达93.3%和76.7%与之对应的PNN模型结果亦呈现类似的规律,这表明萼片长度和萼片宽度与鸢尾花类别的相关性较小,而花瓣长度和花瓣宽度与鸢尾花类别的相关性较大,该结论与图3中呈现的规律一致。
        (3)与GRNN相比,PNN模型的泛化能力较好,测试集的正确率较高。同时,GRNN和PNN模型的运行时间相当,10个模型的平均运行时间在50ms左右,远快于BP神经网络。

5 总结

         GRNN及PNN具有良好的泛化性能,且与BP神经网络等不同,其权值和阈值由训练样本一步确定,无须迭代,计算量小。因此,其在各个领域得到了广泛的应用。与RBF神经网络相同,spread值对于GRNN和PNN的性能影响较大,此处不再赘述。近年来,不少专家和学者开始致力于改善GRNN和PNN的结构,并与其他算法相结合,取得了更加令人满意的结果。

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

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

相关文章

小雉系统U盘安装包制作

​ 本文原地址: http://www.feitianzhi.com/boke/index.php/archives/57/ 概述 小雉系统可从线上系统制作安装包到U盘,制作的安装包可用于新系统的安装; 小雉系统只提供升级包,对应的安装包均是客户在应用升级包后按本文或http://www.f…

为什么AirtestIDE的selenium Window突然无法检索控件了?

1. 前言 最近有很多朋友跟我们反馈,为什么1.2.15版本的IDE没办法做网页元素检索了,是不是我们不支持selenium了之类的。 测试后发现,目前版本确实存在这个问题,原因是Chrome113.0.5672.127(最新)版本过高,AirtestIDE…

ansible 的学习

目录 ansible学习思路: ansible是什么? 官网:Ansible is Simple IT Automation ansible的组成: 参考文档:Ansible入门与playbook实战-~学无止境,学以致用 ^ _ ^-51CTO博客 ansible操作体验: 1、先…

机器学习算法(一)KNN近邻算法

一、KNN算法概述 KNN:K-Nearest-Neighbor算法,即K值为邻近。KNN是最简单的分类算法之一,同时,也是最常用的分类算法之一。KNN算法是有监督学习中的分类算法。 二、原理 基于基于iris数据集,具体经历下面四步流程&am…

指南 | OpenAI API对PDF进行总结提炼

前言 本文将针对信息过载阅读搜索难的问题,展示如何利用OpenAI API高效地自动总结PDF,从而提高阅读效率和节省时间。包含详尽的操作教程、实际案例及最佳实践,旨在确保准确且高效地进行文档摘要。另外,本文还将深入探讨运用AI技术…

Cocos Creator3D:发布到 Web 平台

推荐:将 NSDT场景编辑器 加入你的3D工具链 3D工具集: NSDT简石数字孪生 发布到 Web 平台 打开主菜单的 项目 -> 构建发布,打开构建发布面板。 Cocos Creator 3D 提供了两种 Web 平台的页面模板,可以通过 发布平台 的下拉菜单…

非靶代谢组学+肠道菌群测序:改善乳腺癌相关性疲劳——针灸!

文章标题: Acupuncture ameliorates breast cancer-related fatigue by regulating the gut microbiota-gut-brain axis 发表期刊:Frontiers in Endocrinology 影响因子:6.055 作者单位:河南中医药大学第一附属医院 百趣生物提…

新建项目框架详细过程(idea2021.3版本) IoC实例 DI

目录 使用Java Enterprise 一步到位 IOC、IOC容器、Bean、DI 1.IOC(Inversion of Control)控制反转 (1)什么是控制反转呢? (2)Spring和IOC之间的关系是什么呢? (3)IOC容器的作用以及内部存放的是什么? (4)当IOC容器中创建好service和…

【半监督图像分割 2023 CVPR】UniMatch

【半监督图像分割 2023 CVPR】UniMatch 论文题目:Revisiting Weak-to-Strong Consistency in Semi-Supervised Semantic Segmentation 中文题目:重新审视半监督语义分割中的强弱一致性 论文链接:https://arxiv.org/abs/2208.09910 论文代码&a…

ES6 JavaSript

爬虫组件分析 目录概述需求: 设计思路实现思路分析1.最常用的ES6特性2.let, const3.class, extends, super4.arrow function5.template string 参考资料和推荐阅读 Survive by day and develop by night. talk for import biz , show your perfect code,full busy&a…

MTK平台的SWT异常的简单总结(3)——常见SWT/ANR类型

(1)如何查看db文件Log (2)如何确认线程关系 (3)常见类型 (A)等锁 线程状态为"Blocked",通过关键字"held by"进一步确认哪个线程拿住了锁&#xff…

一.《传奇M》装备栏遍历的突破口

寻找突破口 1.首先根据大多数游戏而言,装备栏中一般记录的是装备的对象或者装备ID,那么当我们穿装备或者脱装备肯定会有相应的值在改变 2.我们就从这里入手,当穿或脱装备的时候,使用CE搜索0然后通过改变或者未改变来筛选结果 3.接下来我们操作试一试这个思路可不可以 4.点击首…

Vue中如何进行图片识别与物体检测

Vue中如何进行图片识别与物体检测 随着人工智能技术的发展,图像识别和物体检测已经成为了很多应用场景的必备功能。在Vue中如何使用百度AI或腾讯AI等云服务实现图片识别和物体检测呢?本文将为您介绍一些基本概念和示例代码,帮助您快速入门。…

强化学习PPO:Proximal Policy Optimization Algorithms解读

PPO算法是一类Policy Gradient强化学习方法,经典的Policy Gradient通过一个参数化决策模型来根据状态确定动作,其参数更新是通过下式进行的: 用于衡量决策模型的优劣目标,决策模型的优化目标为寻找最优决策,使得该决策…

电力辅助服务

电力辅助服务 1、电力辅助服务是什么2、电力辅助服务发展历程3、《电力辅助管理办法》主要修订内容4、电力辅助服务品种5、电力辅助服务市场规模6、国外电力辅助服务市场 1、电力辅助服务是什么 《电力辅助服务管理办法》中定义电力辅助服务是由火电、水电、核电、风电、光伏发…

Elastic 推出 Elastic AI 助手

作者:Mike Nichols Elastic 推出了 Elastic AI Assistant,这是一款由 ESRE 提供支持的开放式、生成式 AI 助手,旨在使网络安全民主化并支持各种技能水平的用户。 最近发布的 Elasticsearch Relevance Engine™ (ESRE™) 提供了用于创建高度相…

Spring Boot进阶(49):SpringBoot之集成WebSocket实现前后端通信 | 超级详细,建议收藏

1. 前言 在上一期,我对WebSocket进行了基础及理论知识普及学习,而这一期,我重点是要带着你们进行实战教学,手把手教学如何在springboot架构基础上集成WebSocket及实现前后端通讯功能。具有很好的学习价值,希望大家在学…

Python Selenium基本用法

Selenium 作为一款 Web 自动化测试框架,提供了诸多操作浏览器的方法,本节对其中的常用方法做详细介绍。 定位节点 Selenium 提供了 8 种定位单个节点的方法,如下所示: 定位节点方法 方法 说明 find_element_by_id() 通过 id 属性…

MacOS 高颜值的 数据库客户端工具 Tableplus 简单逆向分析

0x0 navicat 给公司发律师函了, 所以不能白嫖了.. 后来一直在找替代品, 但均感觉略有不足. dbeaver : java 开发的, 依赖 jdk , 而且BUG较多,也不流畅 mysqlworkbench : 官方出品, 功能强大. 但是用着不带劲 Sequel Ace : 开源免费, 但是只支持mysql,功能简单 最后试了下 Tab…

【手撕MyBatis源码】插件体系

文章目录 概述插件的使用插件代理机制自动分页插件拦截目标分页插件原理 概述 Mybatis作为一个应用广泛的优秀的ORM开源框架,这个框架具有强大的灵活性,在四大组件(Executor、StatementHandler、ParameterHandler、ResultSetHandler)处提供了简单易用的插…