【MATLAB数据处理实用案例详解(21)】——利用SOM自组织映射网络实现癌症样本数据分类和利用SOM自组织映射网络实现柴油机故障分类详解

news2024/11/26 15:29:36

目录

    • 一、SOM原理分析
    • 二、SOM拓扑结构分析
    • 三、三种SOM拓扑结构
      • 3.1 Gridtop()网格拓扑结构
      • 3.2 Hextop()六角形拓扑结构
      • 3.3 Randtop()随机拓扑结构
    • 四、利用SOM自组织映射网络实现癌症样本数据分类
      • 4.1 问题描述
      • 4.2 输入数据
      • 4.3 网络建立和训练
      • 4.4 验证
      • 4.5 预测
      • 4.6 运行结果
    • 五、利用SOM自组织映射网络实现柴油机故障分类
      • 5.1 问题描述
      • 5.2 输入数据
      • 5.3 网络建立和训练
      • 5.4 分类预测
      • 5.5 查看神经元分布情况
      • 5.6 运行结果
      • 5.7 结果分析
    • 六、完整程序

一、SOM原理分析

在网络结构上,自组织竞争网络一般是有输入和竞争层构成的单层网络,网络没有掩藏层,输入和竞争层之间的神经元实现双向链接,同时竞争层各神经元之间还存在横向连接。

自组织竞争网络的基本思想是网络竞争层各个神经元竞争对输入模式的响应机会,最后仅一个神经元成为竞争的胜者,并对那些与获胜神经元有关的各连接权值朝向更有利于竞争的方向调整。获胜神经元表示输入模式的分类。

除了竞争方法外,还有通过抑制方法获胜的,即网络竞争层各层神经元都能抑制所有其他神经元对输入模式的响应机会,从而使自己成为胜利者。

此外,还有一种抑制的方法,即每个神经元只抑制与自己临近的神经元,而对远离自己的神经元则不抑制。因此,自组织竞争网络自组织自适应的学习能力进一步拓宽了神经网络在模式识别分类方面的应用。

1981年芬兰Helsink大学的T.Kohonen教授提出一种自组织特征映射网,简称SOM网,又称Kohonen网。生物神经系统中,存在一种“侧抑制”现象,即一个神经细胞兴奋后,通过它的分支会对周围其他神经细胞产生抑制。由于侧抑制的作用,各细胞之间相互竞争的最终结果是:兴奋作用最强的神经细胞所产生的抑制作用战胜了周围所有其他细胞的抑制作用而“赢”了,其周围的其他神经细胞则全“输”了。

Kohonen认为:一个神经网络接受外界输入模式时,将会分为不同的对应区域,各区域对输入模式具有不同的响应特征,而且这个过程是自动完成的。

自组织竞争人工神经网络正是基于上述生物系统结构和现象形成的。它是一种以无导师学习学习方式进行网络,具有自组织功能的神经网络。网络通过自身训练,自动对输入模式进行分类。

二、SOM拓扑结构分析

自组织特征映射神经网络(Self-organizing Feature Maps)简称SOFM或者SOM,也是一种无导师学习的网络,主要用于对输入向量进行区域分类。和自组织竞争网络不同的是,它不但识别输入区域临近的区域,还研究输入向量的分布特性和拓扑特性结构。

SOM网络模拟大脑神经系统自组织特征映射的功能,是一种竞争型网络,并在学习中能无导师进行自组织学习。脑神经学研究结果表明:神经元之间的信息交互具有的共同特征是:最近邻的两个神经元互相激励,较远的神经元互相抑制,更远的则又具有较弱的激励作用。SOM网络模型层结构图如下:
在这里插入图片描述
由于SOM算法是一种无导师的聚类法,它能将任意维输入模式在输出层映射成一维或者二维离散图形,并保持其拓扑结构不变,即在无导师的情况下,通过对输入模式的自组织学习,在竞争层将分类结果表示出来,此外,网络通过对输入模式的反复学习,可以使连接权值空间分布密度与输入模式的概率分布趋于一致,即链接权向量分布能反映输入模式的统计特征。

和自组织竞争网络一样,SOM网络可以用来识别获胜神经元 ,不同的是,自组织竞争网络只修正获胜神经元,而SOM网络依据Kohonen学习规则,要同时修正获胜神经元附近区域Ni(d)内所有神经元。
i w ( q ) = i w ( q − 1 ) + a ( p ( q ) − i w ( q − 1 ) ) {i^{w\left( q \right)}} = {i^{w\left( {q - 1} \right)}} + a\left( {p\left( q \right) - {i^{w\left( {q - 1} \right)}}} \right) iw(q)=iw(q1)+a(p(q)iw(q1))
i w ( q ) = ( 1 − a ) i w ( q − 1 ) + a p ( q ) {i^{w\left( q \right)}} = \left( {1 - a} \right){i^{w\left( {q - 1} \right)}} + ap\left( q \right) iw(q)=(1a)iw(q1)+ap(q)

对于输入向量 p ,一旦获胜神经元以及临近神经元的权值被修正后接近p ,多次循环后,临近神经元会彼此接近。SOM神经元竞争二维临域示意图下图所示。
在这里插入图片描述
在这里插入图片描述
临域可以用集合表示:
N 13 ( 1 ) = { 8 , 12 , 13 , 14 , 18 } {N_{13}}\left( 1 \right) = \left\{ {8,12,13,14,18} \right\} N13(1)={8,12,13,14,18}
N 13 ( 2 ) = { 3 , 7 , 8 , 9 , 11 , 12 , 13 , 14 , 15 , 17 , 18 , 19 , 23 } {N_{13}}\left( 2 \right) = \left\{ {3,7,8,9,11,12,13,14,15,17,18,19,23} \right\} N13(2)={3,7,8,9,11,12,13,14,15,17,18,19,23}

三、三种SOM拓扑结构

3.1 Gridtop()网格拓扑结构

代码如下:

%% gridtop()网络拓扑结构
pos = gridtop(2,3)
figure,plotsom(pos)

网络结构:
在这里插入图片描述

3.2 Hextop()六角形拓扑结构

代码如下:

pos = hextop(2,3)
figure,plotsom(pos)

网络结构:
在这里插入图片描述
Hextop()六角形拓扑结构8*10 神经元
代码如下:

pos = hextop(8,10)
figure,plotsom(pos)

网络结构:
在这里插入图片描述

3.3 Randtop()随机拓扑结构

代码如下:

pos = randtop(2,3)
figure,plotsom(pos)

网络结构:
在这里插入图片描述
Randtop()随机拓扑结构8*10 神经元
代码如下:

pos = randtop(8,10)
figure,plotsom(pos)

网络结构:
在这里插入图片描述

四、利用SOM自组织映射网络实现癌症样本数据分类

4.1 问题描述

SOM是一类采用无教师学习方式的神经网络模型,它无须期望输出,只是根据数据样本进行学习,并调整自身的权重以达到学习的目的。自组织神经网络的学习规则大都采用竞争型的学习规则。
竞争型神经网络的基本思想是网络竞争层的各神经元通过竞争来获取对输入模式的响应机会,最后仅由一个神经元成为胜利者,并将与获胜神经元有关的各连接权值朝向这更有利于的方向调整。

4.2 输入数据

对于gene.mat样本数据集进行分析,该数据集包含60个人的114种基因表达水平,其中前20个是癌症病人的基因表达水平的样本(其中可能有子类),其后的是20个正常人的基因表达信息样本,其余的20个是待检测的样本(未知他们是否正常)。目标是预测检测样本是癌症还是正常样本:

%% 录入输入数据
% 载入数据并将数据分成训练和预测两类
load gene.mat;
data=gene;
P=data(1:40,:); % 前20个是癌症,后20个是正常样本
T=data(41:60,:); % 待检测样本

% 转置后符合神经网络的输入格式
P=P';
T=T';
% 取输入元素的最大值和最小值Q:
Q=minmax(P);

4.3 网络建立和训练

利用newc( )命令建立竞争网络,Q为训练数据最大最小值,2代表竞争层的神经元个数,也就是要分类的个数,0.1代表学习速率:

net=newc(Q,2,0.1)

% 初始化网络及设定网络参数:
net=init(net); 
% 训练迭代次数
net.trainparam.epochs=20;
% 训练网络:
net=train(net,P);

4.4 验证

a=sim(net,P);
ac=vec2ind(a) % 分类标记

4.5 预测

下面将后20个数据带入神经网络模型中,观察网络输出:

Y=sim(net,T)
% 得到预测的可能性结果
yc=vec2ind(Y)

4.6 运行结果

程序运行结果如下:
在这里插入图片描述

五、利用SOM自组织映射网络实现柴油机故障分类

5.1 问题描述

随着科学与生产技术的发展,现代设备大多数集机电液于一体,结构越来越复杂,自动化成都越来越高。在工作过程中,故障发生的概率相对提高,出现故障后不仅会造成经济损失甚至会导致整个设备遭受灾难性的毁坏。 柴油机由于其本身的结构异常复杂,加
之系统的输入输出不明显,难以用比较完备准确的模型对其机构、功能以及状态等进行有效的描述, 因而给故障诊断带来了很大麻烦。近年来,随着模式识别和神经网络理论的引入,柴油机故障诊断技术有了较快发展。 神经网络技术的出现,为故障诊断问题提供了一种新的解决途径,特别是对于柴油机这类复杂系统。神经网络的输入输出非线性映射特性、信息的分布存储、并行处理和全局集体应用,特别是其高度的白组织和自学习能力,使其成为故障诊断的一种有效方法和手段。下表所示为8种柴油机常见故障集(数据已归一化)。
在这里插入图片描述

5.2 输入数据

% 载入数据
load p;
%转置后符合神经网络的输入格式
P=P';

5.3 网络建立和训练

newsom()用于创建一个自组织特征映射.其调用格式为:
net = newsom(PR,[d1,d2,d3,…],tfcn,dfcd,olr,osteps,tlr,tns)

若输出神经元在输出层的位置与某标准故障样本的位置相同,说明待检样本发生了相应的故障;若输出神经元在输出层的位置介于很多标准故障之间,说明这儿种标准故障都有可能发生,且各故障的程度由该位置与相应标准故障样本位置的欧氏距离确定。
代码如下:

net=newsom(minmax(P),[6 6]);
plotsom(net.layers{1}.positions)
% 5次训练的步数
a=[10 30 50 100 200 500 1000];
% 随机初始化一个1*10向量。
yc=rands(7,8);
% 训练次数为10次
net.trainparam.epochs=a(1);
% 训练网络和查看分类
net=train(net,P);
y=sim(net,P);
yc(1,:)=vec2ind(y);
plotsom(net.IW{1,1},net.layers{1}.distances)

% 训练次数为30次
net.trainparam.epochs=a(2);
% 训练网络和查看分类
net=train(net,P);
y=sim(net,P);
yc(2,:)=vec2ind(y);
plotsom(net.IW{1,1},net.layers{1}.distances)

% 训练次数为50次
net.trainparam.epochs=a(3);
% 训练网络和查看分类
net=train(net,P);
y=sim(net,P);
yc(3,:)=vec2ind(y);
plotsom(net.IW{1,1},net.layers{1}.distances)


% 训练次数为100次
net.trainparam.epochs=a(4);
% 训练网络和查看分类
net=train(net,P);
y=sim(net,P);
yc(4,:)=vec2ind(y);
plotsom(net.IW{1,1},net.layers{1}.distances)


% 训练次数为200次
net.trainparam.epochs=a(5);
% 训练网络和查看分类
net=train(net,P);
y=sim(net,P);
yc(5,:)=vec2ind(y);
plotsom(net.IW{1,1},net.layers{1}.distances)

% 训练次数为500次
net.trainparam.epochs=a(6);
% 训练网络和查看分类
net=train(net,P);
y=sim(net,P);
yc(6,:)=vec2ind(y);
plotsom(net.IW{1,1},net.layers{1}.distances)

% 训练次数为1000次
net.trainparam.epochs=a(7);
% 训练网络和查看分类
net=train(net,P);
y=sim(net,P);
yc(7,:)=vec2ind(y);
plotsom(net.IW{1,1},net.layers{1}.distances)
yc

5.4 分类预测

代码如下:

% 测试样本输入
t=[0.9512 1.0000 0.9458 -0.4215 0.4218 0.9511 0.9645 0.8941]';
% sim( )来做网络仿真
r=sim(net,t);
% 变换函数 将单值向量转变成下标向量。
rr=vec2ind(r)

5.5 查看神经元分布情况

代码如下:

% 查看网络拓扑学结构
figure(1),plotsomtop(net)
% 查看临近神经元直接的距离情况
figure(2),plotsomnd(net)
% 查看每个神经元的分类情况
figure(3),plotsomhits(net,P)

5.6 运行结果

程序输出结果如下:
在这里插入图片描述
SOM网络拓扑结构如下图所示:
在这里插入图片描述

临近神经元之间的距离情况如下图所示:
在这里插入图片描述

每个神经元的分类情况如下图所示:
在这里插入图片描述

5.7 结果分析

由程序输出聚类的结果yc可知,当训练步数为10时,故障原因1、3分为一类,2、7
为一类,4、6为分类,5、8单独一类。可见,网络已经对样本进行了初步的分类,这种分类不够精确。
当训练步数为200时,每个样本都被划分为一类, 这种分类结果更加细化。当训练步数为50或者1000时,同样是每个样本都被划分为一类。 这时如果再提高训练步数,已经没有实际意义了。
由图SOM Topology可知,竞争层神经元有6X6=36个;在图SOM Neighbor中,蓝色代表神经元,红色线代表神经元直接的连接,每个菱形中的颜色表示神经元之间距离的远近,从黄色到黑色,颜色越深说明神经元之间的距离越远;在图Hits中, 蓝色神经元表示竞争胜利的神经元。

六、完整程序

由于文章限制,数据集和本文的完整程序请移步:https://download.csdn.net/download/didi_ya/87741832。


ok,以上便是本文的全部内容了,制作不易,如果对你有所帮助,记得点个赞哟~

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

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

相关文章

wait/waitpid(重点)介绍

谢谢你的阅读,如有错误请大佬留言 目录 引子: waitpid 返回值介绍 参数介绍 pid status options: 引子: 当一个进程创建子进程后,如果子进程工作结束后会进入僵尸状态,等待父进程回收子进程资源(退…

烟花智能直播助手,直播带货必备爆单工具【直播助手脚本+技术教程】

烟花智能直播助手软件教程介绍: 1.账号管理:可以登陆多个账号,一键切换 2.商品批量管理:可一键删除/添加直播商品,一键设置商品卖点 3.自动弹讲解:可设置指定,单个,列表循环自动弹商品讲解 4.智能文字客服:可设置指定关键词对公屏信息进行回复,不限添加条…

【C语言】C语言总结

声明&#xff0c;本文来自中国mooc中的翁凯C语言总结 第一章介绍 变量定义 变量定义的一般形式为&#xff1a;<类型名称><变量名称>变量需要一个名字&#xff0c;变量的名字是一种表示符&#xff0c;意思是用来识别不同的标识符标识符的基本构造规则为&#xff…

近世代数 笔记与题型连载 第十一章(正规子群与商群)

文章目录 基本概念1.正规子群2.商群 常见题型1.正规子群的判定和证明2.给定群和正规子群&#xff0c;求商群 基本概念 1.正规子群 正规子群的定义&#xff1a;设<G,※>是群&#xff0c;H是G的子群。如果对于G中的任意元素g&#xff0c;都有gHHg&#xff0c;则称H是G的正…

org.apache.poi 设置 Excel 单元格颜色 RGB

一、背景说明 在使用 org.apache.poi 导出 Excel 时&#xff0c;需要设置部分单元格的颜色。 可以使用方法&#xff1a;org.apache.poi.ss.usermodel.CellStyle.setFillForegroundColor() 和 org.apache.poi.ss.usermodel.CellStyle.setFillPattern() 来设置单元格的颜色和填…

代码随想录 LeetCode数组篇 二分查找

文章目录 &#xff08;简单&#xff09;35. 搜索插入位置&#xff08;*中等&#xff09;34. 在排序数组中查找元素的第一个和最后一个位置&#xff08;简单&#xff0c;常见面试题&#xff09;69. x的平方根&#xff08;简单&#xff09; 367. 有效的完全平方数 # &#xff08;…

三款自研AI应用引领未来,重塑行业新风尚

在这个科技日新月异的时代&#xff0c;AI技术已经渗透到我们生活的方方面面。今天&#xff0c;我们将向您推荐三款领域独具特色的AI应用&#xff0c;它们分别是AI律师、AI小红书文案提示词、以及AI Midjourney提示词。这些应用都具有独特的内涵&#xff0c;让我们一起走进这些智…

linux--进程程序替换

目录 一、什么是进程程序替换 二、原理&#xff1a; 三、为什么要进行程序替换 四、六种替换函数 命名理解 (1)函数execl (2)函数execv (3)execlp (4)execvp (5)execle (6)execve 一、什么是进程程序替换 所谓进程程序替换&#xff0c;顾名思义&#xff0c;就是使用一个…

‘cnpm‘ 不是内部或外部命令,也不是可运行的程序 或批处理文件

文章目录 1.0 问题描述2.0 检查环境&#xff1a;2.0.1查看node 环境2.0.2 cnpm 要安装好 3.0 查看原因4.0 问题解决【配置环境变量】4.0.1 方式一4.0.2 方式二 5.0 测试成功 1.0 问题描述 ‘cnpm’ 不是内部或外部命令&#xff0c;也不是可运行的程序 或批处理文件。 2.0 检…

手动开发--简单的 Spring 基于注解配置的程序

目录 手动开发--简单的 Spring 基于注解配置的程序 需求说明 思路分析程序结构 2) 程序框架图 ● 应用实例 创建ComponentScan.java注解 创建WyxSpringConfig 创建WyxSpringApplicationContext 作用 注意 获取全类名的步骤 Class.forName和Class.loadClass的区别 手…

c++ 11标准模板(STL) std::vector (二)

定义于头文件 <vector> template< class T, class Allocator std::allocator<T> > class vector;(1)namespace pmr { template <class T> using vector std::vector<T, std::pmr::polymorphic_allocator<T>>; }(2)(C17…

马上五一了,带大家玩一下五子棋——C语言

五一祝福 因为这篇博文实在五一这天完成的&#xff0c;所以呢&#xff0c;在介绍五子棋之前&#xff0c;先祝各位支持小白的大佬都五一快乐&#xff01; 花了点时间下了个“五一快乐”的五子棋&#xff0c;哈哈哈哈哈哈&#xff0c;还不太熟练&#xff0c;所以写的有点丑&…

常用 Composition API【VUE3】

二、常用 Composition API 7. 计算属性与监视 7.1 computed函数 与Vue2.x中computed配置功能一致写法 <template><h1>一个人的信息</h1>姓&#xff1a;<input type"text" v-model"person.firstName"><br><br>名&a…

【ROS 开发神器 Visual Studio Code 的安装和设置】

【ROS 开发神器 Visual Studio Code 的安装和设置】 1. Visual Studio Code的安装1.1 点击deb文件下载1.2 安装VScode1.3 启动软件1.4 添加收藏夹 2. 导入工作空间2.1 熟悉Vscode基本界面2.2 添加工作空间 3. 安装简体中文语言4. 安装ROS插件5. 安装CMake插件6. 安装括号颜色插…

SpringBoot 中的加密模块

Spring Boot 是一款流行的 Java 开发框架&#xff0c;它提供了多种加密模块&#xff0c;用于保护数据的安全性。本文将介绍 Spring Boot 中的加密模块&#xff0c;包括对称加密、非对称加密和哈希加密等&#xff0c;同时还会提供相应的代码示例。 一、对称加密 对称加密是一种…

改进YOLOv8 | 即插即用篇 | 全维动态卷积 |《 OMNI-DIMENSIONAL DYNAMIC CONVOLUTION》

单个静态卷积核是现代卷积神经网络(CNNs)的常见训练范式。然而,最近的动态卷积研究表明,学习加权为其输入依赖注意力的n个卷积核的线性组合可以显著提高轻量级CNNs的准确性,同时保持高效的推理。然而,我们观察到现有的作品通过卷积核空间的一个维度(关于卷积核数量)赋予…

关于密码学的进一步答疑:SSL和TLS的区别、CA和CT的关系

《密码学&#xff1a;一文读懂常用加密技术原理及其逻辑与应用方法》一文一经发布后&#xff0c;后台收到了许多私信&#xff0c;承蒙喜爱&#xff0c;这篇文章将主要对后台收到的高频问题予以统一回应。 问题一: 在讨论加密解密的过程中&#xff0c;常常在同一语境下同时出现S…

设计模式之原型模式(深拷贝浅拷贝)

目录 1、什么是原型模式 2、前置知识&#xff08;深拷贝&浅拷贝&#xff09; 2.1 浅拷贝 2.2 深拷贝 3、代码实现 3.1 通过Object中的clone方法实现浅拷贝 3.2 通过对象流来实现深拷贝 4、原型模式总结 4.1 优缺点 4.2 使用场景 4.3 对比直接new对象有何不同 1、…

如何使用递归函数实现Excel列号转换列标

在Excel中&#xff0c;列标与列号转换是VBA开发过程中经常用到的功能&#xff0c;下面这篇博客为大家解释了多种方法。 【Excel列标与列号转换】 那么这篇博文的核心是“递归过程”&#xff0c;实现这个功能并不是必须使用递归过程&#xff0c;但是这也不失为一种实现方法&am…

【Android入门到项目实战-- 8.2】—— 使用HTTP协议访问网络

目录 一、使用HttpURLConnection 1、使用Android的HttpURLConnection步骤 1&#xff09;获取HttpURLConnection实例 2)设置HTTP请求使用的方法 3)定制HTTP请求&#xff0c;如连接超时、读取超时的毫秒数 4)调用getInputStream()方法获取返回的输入流 5)关闭HTTP连接 2、…