(转载)无监督学习神经网络的分类(matlab实现)

news2024/11/21 1:35:41
        对于监督学习神经网络,事先需要知道与输入相对应的期望输出,根据期望输出与网络输出间的偏差来调整网络的权值和阈值。然而,在大多数情况下,由于人们认知能力以及环境的限制,往往无法或者很难获得期望的输出,在这种情况下,基于有导师学习的神经网络往往是无能为力的。
        与有导师学习神经网络不同,无监督学习神经网络在学习过程中无需知道期望的输出。其与真实人脑中的神经网络类似,可以通过不断地观察、分析与比较,自动揭示样本中的内在规律和本质,从而可以对具有近似特征(属性)的样本进行准确地分类和识别。本章将详细介绍竞争神经网络与自组织特征映射(SOFM)神经网络的结构及原理,并以实例说明其具体的应用范围及效果。

1 理论基础

1.1 竞争神经网络概述

        1.竞争神经网络的结构
        竞争神经网络是一种典型的、应用非常广泛的无导师学习神经网络,其结构如图1所示。竞争神经网络一般由输入层和竞争层组成。与RBF等神经网络类似,输入层仅实现输入模式的传递,并不参与实际的运算。竞争层的各个神经元以相互竞争的形式来赢得对输入模式的响应,最终只有一个神经元赢得胜利,并使与该获胜神经元相关的各连接权值和阈值向着更有利于其竞争的方向发展,而其他神经元对应的权值和阈值保持不变。

图1 竞争神经网络结构 

        2.竞争神经网络的学习算法
        如前文所述,竞争神经网络在学习的过程中,仅用到了样本的输入信息,无须知晓样本对应的输出信息。因此,其学习算法与有导师学习神经网络的学习算法有着本质上的区别。
        (1)网络初始化
        如图1所示,输入层由R个神经元构成,竞争层由S1个神经元构成。不失一般性,设训练样本的输入矩阵为

        3.竞争神经网络的MATLAB工具箱函数
        函数newc用于创建一个竞争神经网络,其调用格式为
net =newc(PR,S,KLR,CLR)
        其中,PR为输入变量的最小及最大值构成的矩阵;S为竞争层神经元个数;KLR为权值 的学习速率(默认为0.01);CLR为阈值的学习速率(默认为0.001);net为创建好的竞争网络。

1.2 SOFM神经网络概述

        1.SOFM神经网络的结构

图2 OFM神经网络结构 

        自组织特征映射(self-organizing feature mapping,SOFM)神经网络是Kohonen于1981年根据神经元有序的排列可以反映出所感觉到的外界刺激的某些物理特性而提出的。其主要思想是在学习过程中逐步缩小神经元之间的作用邻域,并依据相关的学习规则增强中心神经元的激活程度,从而去掉各神经元之间的侧向连接,以达到模拟真实大脑神经系统“近兴奋远抑制"的效果。如图2所示,SOFM神经网络的结构与竞争神经网络的结构类似,是一个由输入层和自组织特征映射层(竞争层)组成的两层网络。在竞争神经网络中,每次仅有一个神经元获胜,即只有一个神经元的权值和阈值得到修正。而在SOFM神经网络中,不仅与获胜神经元对应的权值和阈值得到调整,其邻近范围内的其他神经元也有机会进行权值和阈值调整,这在很大程度上改善了网络的学习能力和泛化能力。
        2.SOFM神经网络的学习算法
        SOFM神经网络的学习算法与竞争神经网络的学习算法类似,仅在权值调整部分有较大差异。

        (4)学习速率及邻域更新
        获胜神经元及其邻域内的神经元权值更新完成后,在进入下一次迭代前,需要更新学习速率及邻域,即

        (5)迭代结束判断
        若样本没有学习完,则再另外随机抽取一个样本,返回步骤(2)。否则,若N<T,令N=N+1,返回步骤(2);否则,迭代结束。
        3.SOFM神经网络的MATLAB工具箱函数
        函数newsom用于创建一个SOFM神经网络,其调用格式为
net=newsom(P,[D1,D2,...],TFCN,DFCN,STEPS,IN)
        其中,P为网络输入向量;Di为网络第i层的维数(默认为[58]);TFCN为网络的拓扑函数(默认为‘hextop’);DFCN为网络的距离函数(默认为'linkdist');STEPS为邻近距离递减到1的步数(默认为100);IN为初始的邻近距离(默认为3);net为创建好的SOFM网络。

2 案例背景

2.1 问题描述

        近年来,国内煤矿事故时有发生,严重危害了人民的生命和财产安全。其中,由于煤矿突水造成的事故不容忽视。因此,不少专家和学者致力于研究矿井突水事故的预防,突水水源的判别对预测矿井突水事故的发生有着重要的意义。相关研究表明,可以利用水化学法判别矿井的突水水源,其基本依据是:由于受到含水层的沉积期、地层岩性、建造和地化环境等诸多因素的影响,使储存在不同含水层中的地下水主要化学成分有所不同。为了准确地判别突水水源,需要综合多种因素,用得比较多的是“7大离子"溶解氧、硝酸根离子等。
        目前,有很多种判别突水水源的方法,如模糊综合评判、模糊聚类分析、灰色关联度法等,然而这些方法都要事先假定模式或主观规定一些参数,致使评价的结果主观性较强。现采集到某矿的39个水源样本,分别来自于4个主要含水层:二灰和奥陶纪含水层、八灰含水层、顶板砂岩含水层和第四系含水层(砂砾石成分以石灰岩为主)。以每个水源样本中的\text Na^+\text K^+\text Ca^{2+}\text {Mg}^{2+}\text{Cl}^-\text{SO}_4^{2-}\text{HCO}_3^-7种离子的含量作为判别因素,试利用竞争神经网络和SOFM神经网络分别建立判别模型,并对模型的性能进行综合评价。

2.2 解题思路及步骤

        依据问题描述中的要求,实现竞争神经网络及SOFM神经网络的模型建立及性能评价,可以分为以下几个步骤,如图3所示。

图3 模型建立步骤 

        1.产生训练集/测试集
        由于采集到的水源样本较少,为了保证所建立的判别模型具有较好的泛化性能,这里从每个含水层中取出一个水源样本(共4个样本)作为测试集,剩下的35个水源样本作为训练集。
        2.创建/训练竞争神经网络
        创建竞争神经网络前需要确定网络的结构,即竞争层神经元的数目与待分的类别数目相等,如问题描述所示,水源样本来自于4个不同的含水层,因此,竞争层神经元的数目为4。同时,还应考虑权值学习速率、阈值学习速率及训练次数等参数对网络性能的影响。
        3.创建SOFM神经网络
        创建SOFM神经网络前需要确定网络的结构,即确定竞争层神经元的数目及拓扑结构。同时,还应考虑邻近距离、距离函数及训练次数等参数对网络性能的影响。
        4.仿真测试
        判别模型训练完成后,便可以将测试集的4个水源样本对应的7个判别因素送入模型,模型的输出对应的便是各个水源样本的预测类别。
        5.性能评价
        通过对比预测类别与真实类别,可以对所建立的判别模型的性能进行综合评价。并通过研究网络结构及相关参数对网络性能的影响,寻求理想的网络结构及参数,从而使得判别模型的泛化能力得到不断的提升和改善。

3 MATLAB程序实现

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

%% 训练集/测试集产生

% 导入数据
load water_data.mat
% 数据归一化
attributes = mapminmax(attributes);
% 训练集——35个样本
P_train = attributes(:,1:35);
T_train = classes(:,1:35);
% 测试集——4个样本
P_test = attributes(:,36:end);
T_test = classes(:,36:end);

%% 竞争神经网络创建、训练及仿真测试

% 创建网络
net = newc(minmax(P_train),4,0.01,0.01);
% 设置训练参数
net.trainParam.epochs = 500;
% 训练网络
net = train(net,P_train);
% 仿真测试
% 训练集
t_sim_compet_1 = sim(net,P_train);
T_sim_compet_1 = vec2ind(t_sim_compet_1);
% 测试集
t_sim_compet_2 = sim(net,P_test);
T_sim_compet_2 = vec2ind(t_sim_compet_2);

%% SOFM神经网络创建、训练及仿真测试

% 创建网络
net = newsom(P_train,[4 4]);
% 设置训练参数
net.trainParam.epochs = 200;
% 训练网络
net = train(net,P_train);
% 仿真测试
% 训练集
t_sim_sofm_1 = sim(net,P_train);
T_sim_sofm_1 = vec2ind(t_sim_sofm_1);
% 测试集
t_sim_sofm_2 = sim(net,P_test);
T_sim_sofm_2 = vec2ind(t_sim_sofm_2);

%% 结果对比

% 竞争神经网络
result_compet_1 = [T_train' T_sim_compet_1']
result_compet_2 = [T_test' T_sim_compet_2']
% SOFM神经网络
result_sofm_1 = [T_train' T_sim_sofm_1']
result_sofm_2 = [T_test' T_sim_sofm_2']

说明:

       1.39个水源样本数据存放在water_data.mat文件中,其包含的变量attributes和classes分别对应判别因素和类别。如前文所述,前35个样本作为训练集建立判别模型,剩余的4个样本(分别对应4个类别)作为测试集对模型的性能进行评价。
        2.
为了减少输入变量间的变化较大(不属于同一数量级)对模型性能的影响,在模型建立之前有必要对输入变量进行归一化。这里采用函数mapminmax进行归一化预处理,具体用法请参考帮助文档。低版本的MATLAB中,归一化函数为premnmx,反归一化函数为postmnmx。
        3.(1)result_compet_1为35行2列的矩阵,分别表示竞争神经网络训练集的真实类别和对应的获胜神经元标号。(2)result_compet_2为4行2列的矩阵,分别表示竞争神经网络测试集的真实类别和对应的获胜神经元标号。(3)result_sofm_1为35行2列的矩阵,分别表示SOFM神经网络训练集的真实类别和对应的获胜神经元标号。(4)result_sofm_2为4行2列的矩阵,分别表示SOFM神经网络测试集的真实类别和对应的获胜神经元标号。

3.6 结果分析

        由于网络在训练的过程中采取的是随机抽取训练样本的方法,因此每次运行的结果都会有所不同。某次运行的结果如表27-1所列。从表中不难发现以下几点:
        (1)对于竞争神经网络,第Ⅱ类水源样本大多与竞争层第1个神经元相对应(仅有第15号样本对应的是竞争层第3个神经元),因此可以认定对于第Ⅱ类水源样本而言,竞争层第1个神经元为获胜神经元。同理,可以认定,对于第Ⅲ类水源样本而言,竞争层第2个神经元为获胜神经元(仅有第20号样本对应的是竞争层第3个神经元)。然而,对于第I类和第IV类水源样本而言,则很难确定与之对应的获胜神经元。据此对应关系,可以发现测试集中37号和38号样本分类正确,而36号和39号样本难以判断。
        (2)对于SOFM神经网络,第I类水源样本对应的获胜神经元编号为3、8、11、12、14;第Ⅱ类水源样本对应的获胜神经元编号为14、15、16;第Ⅲ类水源样本对应的获胜神经元编号为1、2、5、6;第IV类水源样本对应的获胜神经元编号为4、7、8、13。据此对应关系可以发现,测试集中4个水源样本对应的获胜神经元编号在训练集中对应的获胜神经元编号集合内,因此,可以认定判别正确率为100%。值得一提的是,若测试集中某个水源样本的预测获胜神经元编号为8,则难以界定其属于第I类或是第IV类水源样本。同理,若测试集中某个水源样本的预测获胜神经元编号为14,则难以界定其属于第I类或是第Ⅱ类水源样本。
表1 竞争神经网络与SOFM神经网络预测结果对比
        与之类似,若测试集中某个水源样本的预测获胜神经元编号为9或者10,则难以确定其属于哪一类水源样本。这是因为在训练过程中,竞争层9号和10号神经元从未赢得获胜机会,一直处于抑制状态,即成为所谓的“死”神经元。从图4中的竞争层各个神经元成为获胜神经元的统计次数也可以直观地观察到这一点。
        值得一提的是,图4中神经元的编号方式是从左至右,从下至上,神经元编号逐渐增加,即左下角的神经元编号为1,右上角的神经元编号为16。神经元编号与其获胜次数间的映射关系如表2所列。  
表2神经元编号与其获胜次数间的映射关系 
        图25为竞争层各个神经元与其周围邻近神经元间的距离分布图,相邻神经元间填充区域的颜色表示两个神经元间的距离远近程度。颜色愈深(接近于黑色),表明神经元间的距离越远。从图中可以看出,2号与3号神经元间的距离较远,3号神经元与4号神经元间的距离较远,同时,从表27-1中可以看到,2、3、4号获胜神经元分别对应第Ⅲ、I、IV类水源样本,这表明,不同类别对应的获胜神经元间距离较远。同理,可以观察出,同一类别对应的获胜神经元间的距离较近,如14、15与16号神经元间的距离较近,均对应第Ⅱ类水源样本。其余类别分析方法类似,此处不再一一列举。  

4.总结

4.1 竞争神经网络与SOFM神经网络性能对比

        从表1及上述分析结果可以清晰地看出,与竞争神经网络相比,SOFM神经网络的性能更好,泛化能力更强(即使SOFM神经网络中存在“死”神经元问题)。这是因为,竞争神经网络在学习时,每次仅有一个神经元赢得获胜机会,只有获胜神经元对应的权值得到调整。而SOFM神经网络虽然每次亦只有一个神经元赢得获胜机会,但其及其邻近范围内的神经元对应的权值同时进行修正,朝着更有利于其获胜的方向调整。同时,SOFM神经网络逐渐缩小其邻域范围,逐渐“排斥”邻近的神经元。这种“协作”与“竞争”相结合的模式使得其性能更加优越。

4.2 案例延伸

        近年来,竞争神经网络与SOFM神经网络的算法越来越受到人们的重视,已经成为继BP网络之后研究最多、应用最广泛的一种神经网络模型。然而,越来越多的实践研究表明,竞争层中“死”神经元对网络性能的影响较大。对于“死”神经元,增加其阈值的调整幅度,可以使其逐渐成为获胜神经元,从而赢得公平竞争的机会。同时,SOFM神经网络需预先设定网络的拓扑结构,在训练过程中其拓扑结构保持不变,通常只有在训练结束之后才发现不同的网络拓扑结构也许能得到更好的结果。大多数情况下,并没有先验知识能够让人们事先去选择一个合适的网络规模,所以这些因素严重地影响了SOFM的应用,有待于进一步的研究和实践。

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

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

相关文章

AbstractQueuedSynchronizer源码

介绍 基于队列的抽象同步器&#xff0c;它是jdk中所有显示的线程同步工具的基础&#xff0c;像ReentrantLock/DelayQueue/CountdownLatch等等&#xff0c;都是借助AQS实现的。 public abstract class AbstractQueuedSynchronizerextends AbstractOwnableSynchronizerimplemen…

Camera 基础知识点

和你一起终身学习&#xff0c;这里是程序员Android 经典好文推荐&#xff0c;通过阅读本文&#xff0c;您将收获以下知识点: 1.1 Camera 工作原理1.2 Camera 模组组成1.3 Camera 常见缩写解释1.4 Camera 部分名词解释1.5 参考文献 一、Camera 基础知识 1.1 Camera 工作原理 外部…

[进阶]Java:线程安全问题、取钱模拟

什么是线程安全问题&#xff1f; 多个线程&#xff0c;同时操作同一个共享资源的时候&#xff0c;可能会出现业务安全问题。 线程安全问题出现的原因&#xff1f; 存在多个线程在同时执行同时访问一个共享资源存在修改该共享资源 代码演示如下&#xff1a; 账户类&#xff…

深蓝学院C++基础与深度解析笔记 第 5 章 语句

1. 语句基础 ● 语句的常见类别 – 表达式语句&#xff1a;表达式后加分号&#xff0c;对表达式求值后丢弃&#xff0c;可能产生副作用 – 空语句&#xff1a;仅包含一个分号的语句&#xff0c;可能与循环一起工作 – 复合语句&#xff08;语句体&#xff09;&#xff1a;由大…

软考A计划-系统集成项目管理工程师-信息系统集成及服务管理体系

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例点击跳转>软考全系列 &#x1f449;关于作者 专注于Android/Unity和各种游戏开发技巧&#xff…

Flutter Dart 变量和内置类型

目录 一、变量 1.1 var 1.2 Object 1.3 dynamic 1.4 final与const 二、内置类型 2.1 num&#xff08;数值&#xff09; 2.2 Strings&#xff08;字符串&#xff09; 2.3 bool&#xff08;布尔值&#xff09; 2.4 List&#xff08;列表&#xff09; 2.5 Map&#xff08;映射集…

Android apk 反编译后打包(含签名)

想分析某些app源码时&#xff0c;遇到烦人弹框&#xff0c;现在想反编译看看具体实现。 用到的工具: GDA4.06 apk反编译工具 apktool apk 打包工具 jdk 环境 一、反编译分析 将apk反编译打开 找到入口代码 弹框代码如图 二、解包、打包 使用apktool解包 ps: apktool工具…

unity游戏架构设计

1.unity架构的3个等级 EmptyGO 所有功能写一个脚本挂载object上面&#xff0c;没有单列manager。 Simple GameManager 写一个公用的管理器&#xff0c;方便调用 Manager of Managers 不同的类型的东西用不同的管理器【声音管理器&#xff0c;关卡管理器&#xff0c;】 2…

chatgpt赋能python:Python搜索快捷键

Python搜索快捷键 介绍 Python作为一门广泛应用在各个领域的编程语言&#xff0c;其强大的搜索功能也得到了广泛的应用和赞誉。但是&#xff0c;在日常的使用中&#xff0c;有时我们需要进行大量的搜索和筛选操作&#xff0c;这时候掌握一些Python搜索快捷键将能够极大地提高…

java入门2(运算符)

目录 运算符和C语言基本一样 算术运算符 单目运算符&#xff1a;自增自减运算符 比较运算符 逻辑运算符 位运算符&#xff08;C语言好像没有&#xff09; 优先级 交换算法 运算符和C语言基本一样 算术运算符 比如拆分一个三位数 public class java练习代码 {public…

Cortext-M3系统:NVIC与中断控制(4)

1、NVIC概述 向量中断控制器&#xff0c;简称NVIC&#xff0c;是Cortex-M3不可分离的一部分&#xff0c;它与CM3内核的逻辑紧密耦合。NVIC的寄存器以存储器映射的方式来访问&#xff0c;除了包含控制寄存器和中断处理的控制逻辑之外&#xff0c;NVIC还包含了MPU、SysTick定时器…

算法分析01--算法的基本概念

1.算法设计与分析的基本概念 1.1算法 算法(Algorithm)是对特定问题求解步骤的一种描述&#xff0c; 它是指令的有限序列&#xff0c; 其中每一条指令表示一个或多个操作。 算法具有以下5个重要特性&#xff1a; 1.有穷性 一个算法必须在有穷步内完成&#xff0c;并且每一步…

Vue2 到 Vue3, 5 个常用API的变化有哪些

Vue3之于Vue2最大的变化&#xff0c;当属composition API了&#xff0c;而除了引入composition API外&#xff0c;一些我们在Vue2上经常使用的东西到了Vue3时也发生了不小的变化&#xff0c;本文将介绍一些有Vue2到Vue3中几个比较重要且常用的知识点&#xff0c;欢迎感兴趣的同…

学习adaboost(一,遍历分类器,c#实现)

我看了很多遍&#xff0c;终于搞懂了&#xff0c;现在编程试一试&#xff0c; 参考文献&#xff08;十三&#xff09;通俗易懂理解——Adaboost算法原理 - 知乎 (zhihu.com) 先写一一段代码&#xff0c;把这个数据集里头的所有分类器找出来&#xff1a;一共四种结果&#xff1a…

C++基础(4)——类和对象(2)

前言 本文主要介绍了C中类和对象的基本知识。 4.2.5&#xff1a;深拷贝和浅拷贝 浅拷贝&#xff1a;编译器给我们提供的拷贝函数就是等号复制操作 深拷贝&#xff1a;自己手动重写一个拷贝构造函数&#xff0c;重新new 浅拷贝会出现的问题&#xff1a;如果使用编译器提供的…

CSS3-背景

背景 1 背景颜色 2 背景图片 3 背景平铺 4 背景位置 5 背景相关属性连写 6&#xff08;拓展&#xff09;img标签和背景图片的区别 1 背景颜色 属性名&#xff1a;background-color 取值&#xff1b;关键字、rgb表示法、rgba表示法、十六进制 注意&#xff1a; 1 背景颜色默认值…

基于Java中小企业人力资源管理系统设计实现(源码+lw+部署文档+讲解等)

博主介绍&#xff1a; ✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战 ✌ &#x1f345; 文末获取源码联系 &#x1f345; &#x1f447;&#x1f3fb; 精…

CSS查缺补漏之《常用文本属性、列表属性、表格属性、鼠标属性》

文本属性 letter-spacing&#xff1a; 表示字母或汉字间距&#xff1b; word-spacing&#xff1a;表示单词之间或汉字之间空格的间距 <div>Loremip sumdolors itametconsecteturadipisicingelit.Voluptas.</div> <div>这是一首简单的小情歌 唱着我们心肠的曲…

chatgpt赋能python:Python数据归一化:什么是数据归一化及其作用

Python数据归一化&#xff1a;什么是数据归一化及其作用 数据归一化是一个在数据分析中经常出现的术语。其目的是将数据缩放到相同的比例&#xff0c;从而进行更加准确和可靠的分析。在本文中&#xff0c;我们将介绍什么是数据归一化&#xff0c;为什么我们需要它以及如何在Py…

Element-ui 滚动条美化

目录 1、缘起 2、实际示例 3、美化滚动条 4、Element-plus中的滚动条 5、关于实现方式的思考 1、缘起 之前在做项目时&#xff0c;发现一个项目中&#xff0c;各个子应用项目的UI表现不一致&#xff0c;看了下式Vue项目滚动条和其他的子应用项目表现明显不一致。 有时候…