实验---采用SOM网络进行聚类

2023-11-12

1.SOM网络简介

自组织特征映射网络SOFM又称自组织映射网络SOM,是一种自组织竞争神经网络,一个神经网络接受外界输入模式时,将会分为不同的对应区域,各区域对输入模式具有不同的响应特征,而且这个过程是自动完成的。其特点与人脑的自组织特性相类似。

其主要思想是在学习过程中逐步缩小神经元之间的作用邻域,并依据相关的学习规则增强中心神经元的激活程度,从而去掉各神经元之间的侧向连接,以达到模拟真实大脑神经系统“近兴奋远抑制”的效果。

2.SOM实现聚类实验

(1)导入数据 选用MATLAB自带的数据simplecluster_dataset,该数据包含输入变量simpleclusterInputs,有1000组数据,每组数据为二维向量;目标输出变量simpleclusterTargets,有1000组数据,每组数据为四维向量,表示其类别。

 代码如下:

%加载MATLAB自带数据simplecluster_dataset;

load simplecluster_dataset;

%将simpleclusterInputs和simpleclusterTargets分别赋值给x和t

[x,t] = simplecluster_dataset;

%绘制数据分析图

plot(x(1,:),x(2,:),'+')

执行结果如下:

图1.数据分析图

 (2)创建SOM网络 采用函数selforgmap创建SOM网络,该函数定义在两个学习阶段中使用的变量:

排序阶段学习率、排序阶段步骤、调整阶段学习率、调整阶段邻域距离,这些值用于训练和自适应。

创建网络需要指定映射大小,这对应于网格中的行数和列数。对于此示例,可以将映射大小值设置为 10,这对应于 10 行 10 列的网格。神经元的总数等于网格中的点数,在此例中,映射有 100 个神经元。可以在网络窗格中看到网络架构

代码如下:

dimension1=10;

dimension2=10;

%net为一个SOM网络

net = selforgmap([dimension1 dimension2]);

若设计为一维线阵,只写一个参数即可。例如selforgmap([dimension1])

也可以使用以下代码配置网络以输入数据并绘制所有这些数据

net = configure(net,x);

plotsompos(net,x);%绘制未训练前的权值位置

执行结果如下:

绿点是训练向量。selforgmap 的初始化将初始权重分布到整个输入空间。它们最初离训练向量有一定距离。

(3)训练网络

首先,网络为每个输入向量确定获胜神经元。随后将每个权重向量移至特定位置,即它作为获胜神经元或位于获胜神经元的临域时的所有对应输入向量的平均位置。定义邻域大小的距离在训练过程中的两个阶段会更改。

排序阶段

该阶段持续给定的步数。邻域距离从给定的初始距离开始,并减小到调整邻域距离 (1.0)。随着邻域距离在此阶段逐步减小,网络的神经元通常在输入空间中以与它们自己的物理排序相同的拓扑进行排序。

调整阶段

此阶段持续训练或自适应阶段的其余部分。邻域大小已降至 1 以下,因此只有获胜神经元对每个样本进行学习。

可以使用以下代码对网络进行训练

%net.trainParam.epochs = 1000; %对网络进行1000轮数的训练,也可以不设置系统默认为200轮

net = train(net,x);%查看网络训练界面

plotsompos(net,x);%绘制训练后的权值位置

view(net); 查看网络结构及数据分类结果

执行结果如下:

由上下两个图对比可以看到神经元已开始向不同训练组移动。直到训练到指定轮数。

在神经元更新其权重方面,自组织映射不同于传统的竞争学习。特征图不是只更新获胜神经元,而是更新获胜神经元及其邻点的权重。结果是相邻的神经元倾向于具有相似的权重向量,并对相似的输入向量作出响应。

(4)结果分析

训练结果如上图所示是一个【Neural Network Training】的窗口。

在【Neural Network】图框下可以查看网络结构及数据分类结果,也可以用view(net);命令查看

在【Algorithms】图框中可以看到自组织特征映射中的默认学习在批量模式 (trainbu) 下进行,是以平均平方误差来表现的以及是运用MATLAB来计算的。

在【Progress】图框中显示了网络训练的次数200次以及运行的时间。

在【Plots】图框中显示六个按钮分别可以观察网络的拓扑结构(SOM Topology)、权值连接情况(SOM Neighbor Connections)、领域间的距离(SOM Neighbor Distance)、与输入连接的权值分布情况(SOM Input Planes)、输入激活神经元的情况(SOM Sample Hits)、权值的位置(SOM Weight Positions)。

点击【SOM Topology】按钮或者输入plotsomtop(net)(这里的net为用selforgmap设置的SOM网络,没有数据集中的数据训练)命令可以查看SOM的网络的拓扑结构,如下图所示。每一个蓝色的六边形是一个神经元,在二维平面上排布为10×10的方阵,每一个神经元与其他六个神经元相连(默认为六边形结构,也可以设置为其他结构,边缘神经元除外)

接着点击【SOM Neighbor Connections】按钮或者输入plotsomtop(net)(这里的net为运用数据集simplecluster_dataset 中的输入变量simpleclusterInputs训练后的,以后输入的net都是)如下图所示。可以看到权值连接情况:红色的线表示两个神经元之间存在连接。

接着点击【SOM Neighbor Distance】按钮或者输入plotsomnd(net)。如下图所示。可以看到神经元之间的连接强度,也就是神经元之间的距离。颜色越深表示神经元的距离越远,可以比较明显地看出在图中形成了两条交叉的分界线,把区域分成四部分,而每一部分恰好与样本的分布区吻合。

接着点击【SOM Input Planes】按钮或者输入plotsomplanes(net)。如下图所示。可以看出输入特征的每个元素的权重平面(此例中有两个),该图显示将每个输入连接到每个神经元的权重,颜色越暗,表示权重越大。如果两个特征的连接模式非常相似,则可以假设这两个特征高度相关。此例中输入1与输入2的连接模式非常不同。

 接着点击【SOM Sample Hits】按钮或者输入plotsomhits(net,x)。如下图所示。该拓扑是一个 10×10 网格,因此有 100 个神经元。可以看出拓扑中的神经元位置,并指示每个神经元(簇中心)有多少观测值相关联。此图中数字最大的是29,位于第八行第二列(左下角为原点)表示神经元成为28个输入样本的聚类中心。没有数字的表示该神经元没有被激活。

最后点击【SOM Weight Positions】按钮与上述输入plotsompos(net,x);命令结果一致都是显示此例中的二维权值向量的位置。每一个深色的点表示神经元对应权值的位置,红线表示拓扑连接,可以看出,尽管网络的拓扑结构发生了变形,但任然保持一定的规律,即相邻神经元的权值位置也比较接近。

(5)测试网络 网络训练完成后,如果要确定输入向量究竟属于哪一个类别可以输入以下命令:

y = net(x);%根据输入x得到网络的输出

y为100×1000的矩阵,列号表示输入向量的编号,如下图所示。行中的1表示该位置的神经元被激活,0表示未被激活。很明显这是一个稀疏矩阵,不易观察,因此使用以下命令:

classes = vec2ind(y);%vec2ind将单值向量组转换成下标向量组

此时这里的classes为1×1000的向量,也就是每个样本激活函数的神经元的编号。如下图所示。

(6)如果对网络性能不满意,可以执行以下操作之一:

①重新训练网络。每次训练都会采用不同网络初始权重和偏置,并且在重新训练后可以产生改进的网络。

②通过增大映射大小来增大神经元的数量。

③使用更大的训练数据集。

还可以评估基于附加测试集的网络性能需要加载附加测试数据来评估网络。

3.实验结果及分析(或实验体会)

本次实验测试了运用SOM网络对数据集进行聚类,自组织映射神经网络, 即Self Organizing Maps (SOM), 可以对数据进行无监督学习聚类。它的思想很简单,本质上是一种只有输入层--隐藏层的神经网络。隐藏层中的一个节点代表一个需要聚成的类。训练时采用“竞争学习”的方式,每个输入的样例在隐藏层中找到一个和它最匹配的节点,称为它的激活节点,也叫“winning neuron”。 紧接着用随机梯度下降法更新激活节点的参数。同时,和激活节点临近的点也根据它们距离激活节点的远近而适当地更新参数。

实验只需要运用简单几个命令即可完成,没有出现错误,但对于用MATLAB绘制SOM网络结构图及训练过程需要完全理掌握。只有理解具体过程才能真正理解SOM网络及运用网络实现各种应用。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

实验---采用SOM网络进行聚类 的相关文章

  • 电商数据接口API深度解析

    随着电子商务的快速发展 电商平台之间的竞争也日益激烈 为了在市场中保持领先地位 电商平台需要不断地优化用户体验 提供个性化的服务和精准的推荐 而这一切都离不开数据 电商数据接口API作为一种高效 便捷的数据交互方式 被广泛应用于电商领域 本
  • ‘DR-GAN: Automatic Radial Distortion RectificationUsing Conditional GAN in Real-Time‘条件GAN实时径向畸变自动矫正

    这篇文章在2020年发表在IEEE Transactions on Circuits and Systems for Video Technology上
  • S281 LoRa网关在智能电力监测系统中的应用

    随着能源消耗的增加和环境保护的要求 智能电力监测系统在电力行业得到了广泛的应用 作为一家领先的科技公司 钡铼技术有限公司推出的S281 LoRa网关为智能电力监测系统提供了强大的支持和解决方案 本文将重点介绍S281 LoRa网关在智能电力
  • 八路视频光端机技术导论:多通道视频传输的高效解决方案

    随着光通信技术的快速发展 八路视频光端机 已成为多通道视频传输的有效解决方案 本文将探讨该技术的原理 优势及应用前景 为光通信行业的技术人员和研究学者提供参考 技术原理 八路视频光端机基于 波分复用 WDM 技术 通过一个光纤同时传输多路视
  • 网络安全现状:揭秘白帽黑客的真实收入

    前言 作为一个网络安全行业五年打工仔 今天就来看看黑客的收入和方向怎么样 一个黑客年薪是多少呢 外界普遍认为黑客是高收入群体 那么你想过黑客是怎么获得收入的吗 黑客分为白帽黑客和黑帽黑客 处于黑白两道的黑客会的技术都有些相似 但是却是对立的
  • 一个网工(网络工程师)七年的职业血泪史....

    前言 一个工作了七年的老网工 上家公司待了五年 现在这家公司也快三年了 分享一些我自己学习网络安全路上的一些经历 也算是帮大家少走些弯路 一 如何学习网络安全 1 不要试图以编程为基础去学习网络安全 不要以编程为基础再开始学习网络安全 一般
  • 如何使用内网穿透实现iStoreOS软路由公网远程访问局域网电脑桌面

    文章目录 简介 一 配置远程桌面公网地址 二 家中使用永久固定地址 访问公司电脑 具体操作方法是 简介 软路由 是PC的硬件加上路由系统来实现路由器
  • 成为一个黑客,就按照这个路线来!

    前几天一个同学在聊天中提到毕业后想要从事网络安全方向的工作 虽然他本身也是学计算机的 但是又怕心有余而力不足 因为 从事网络安全方面的工作向来起点都比较高 大学里少有开设这类课程的 在学校能够学到的知识比较有限 网上的关于这方面课程的质量又
  • 内网穿透的应用-使用Net2FTP轻松部署本地Web网站并公网访问管理内网资源

    文章目录 1 前言 2 Net2FTP网站搭建 2 1 Net2FTP下载和安装 2 2 Net2FTP网页测试 3 cpolar内网穿透 3 1 Cpolar云端设置 3 2 Cpolar本地设置
  • 如何用GPT制作PPT和写代码?

    详情点击链接 如何用GPT制作PPT和写模型代码 一OpenAI 1 最新大模型GPT 4 Turbo 2 最新发布的高级数据分析 AI画图 图像识别 文档API 3 GPT Store 4 从0到1创建自己的GPT应用 5 模型Gemin
  • 5个步骤,教你瞬间明白线程和线程安全

    记得今年3月份刚来杭州面试的时候 有一家公司的技术总监问了我这样一个问题 你来说说有哪些线程安全的类 我心里一想 这我早都背好了 稀里哗啦说了一大堆 他又接着问 那你再来说说什么是线程安全 然后我就GG了 说真的 我们整天说线程安全 但是对
  • 线程安全(中)--彻底搞懂synchronized(从偏向锁到重量级锁)

    接触过线程安全的同学想必都使用过synchronized这个关键字 在java同步代码快中 synchronized的使用方式无非有两个 通过对一个对象进行加锁来实现同步 如下面代码 synchronized lockObject 代码 对
  • socket网络编程几大模型?看看CHAT是如何回复的?

    CHAT回复 网络编程中常见的有以下几种模型 1 阻塞I O模型 Blocking I O 传统的同步I O模型 一次只处理一个请求 2 非阻塞I O模型 Non blocking I O 应用程序轮询调用socket相关函数检查请求 不需
  • 网络安全(黑客)自学启蒙

    一 什么是网络安全 网络安全是一种综合性的概念 涵盖了保护计算机系统 网络基础设施和数据免受未经授权的访问 攻击 损害或盗窃的一系列措施和技术 经常听到的 红队 渗透测试 等就是研究攻击技术 而 蓝队 安全运营 安全运维 则研究防御技术 作
  • 【毕业设计选题】复杂背景下的无人机(UVA)夜间目标检测系统 python 人工智能 深度学习

    前言 大四是整个大学期间最忙碌的时光 一边要忙着备考或实习为毕业后面临的就业升学做准备 一边要为毕业设计耗费大量精力 近几年各个学校要求的毕设项目越来越难 有不少课题是研究生级别难度的 对本科同学来说是充满挑战 为帮助大家顺利通过和节省时间
  • 国外拨号VPS指南:开启你的全球网络之旅

    在当今数字化时代 互联网已经成为了我们生活的一部分 而要在全球范围内畅通无阻地访问互联网 拥有一个可靠的国外拨号VPS是非常重要的 无论您是为了工作 学习还是娱乐 国外拨号VPS都可以为您提供更广泛的网络体验 本文将为您提供国外拨号VPS的
  • 3D点云检测神技 | UFO来了!让PointPillars、PV-RCNN统统涨点!

    作者 AI驾驶员 编辑 智驾实验室 点击下方 卡片 关注 自动驾驶之心 公众号 ADAS巨卷干货 即可获取 点击进入 自动驾驶之心 3D目标检测 技术交流群 本文只做学术分享 如有侵权 联系删文 在这篇论文中提出了一个关于在3D点云中检测未
  • 【GRNN-RBFNN-ILC算法】【轨迹跟踪】基于神经网络的迭代学习控制用于未知SISO非线性系统的轨迹跟踪(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 2 1 第1部分 2 2 第2部分
  • 为什么我强烈推荐大学生打CTF!

    前言 写这个文章是因为我很多粉丝都是学生 经常有人问 感觉大一第一个学期忙忙碌碌的过去了 啥都会一点 但是自己很难系统的学习到整个知识体系 很迷茫 想知道要如何高效学习 这篇文章我主要就围绕两点 减少那些罗里吧嗦的废话 直接上干货 CTF如
  • 网络安全行业热门认证证书合集

    网络安全认证证书 就和学历一样是敲门砖 拿到了可以用不到 但不能没有 技术大牛可以没有证书 但普通人不能没有 1 初级入门 就像学历在职场上展示一个人的基本素养一样 网络安全认证证书可以展示一个人在网络安全领域具备的基本知识和技能 它为初学

随机推荐

  • java pc计数器_java虚拟机-程序计数器PC Register

    什么是程序计数器 程序计数器是一块 较小 的内存空间 它可以看做是当前线程所执行的字节码的 行号指示器 在虚拟机的概念模型里 仅仅是概念模型 各种虚拟机可能会通过一些更高效的方式去实现 字节码解释器工作时 就是通过改变这个计数器的值来选取下
  • 护网面试总结

    怎么确定一个网站是不是站库分离 1 查询web服务器名 LENOVO GH select servername 2 查询数据库服务器名 DESKTOP 1HV select host name 对比两个查询结果 即可判断 相同则同站同库 不
  • 【杂谈】如果你也23岁

    23岁的时候 你是什么状态 匿名用户 23岁那年 就是去年 在22岁的时候我毕业 同时第二年准备考研 结果因为压力太大 期望太高 又失利了 但是我依然满怀信心和憧憬 在我23岁那年四月 当我深爱的女孩 在这之前我追了她四年 说她要去北京时
  • APP常见崩溃原因和测试方法整理

    APP常见崩溃原因和测试方法整理 测试过APP的人都应该发现 app崩溃是一类非常常见的问题 很多时候还是致命性的 这就要求我们测试人员要尽最大可能去找出软件当中的缺陷 减少app崩溃出现的概率 这里我将收集到的关于针对APP崩溃测试的资料
  • C++实现算法题之奇偶链表

    题目 给定一个单链表 把所有的奇数节点和偶数节点分别排在一起 请注意 这里的奇数节点和偶数节点指的是节点编号的奇偶性 而不是节点的值的奇偶性 示例 1 输入 1 gt 2 gt 3 gt 4 gt 5 gt NULL 输出 1 gt 3 g
  • 6、如何将 Flink 中的数据写入到外部系统(文件、MySQL、Kafka)

    目录 1 如何查询官网 2 Flink数据写入到文件 3 Flink数据写入到Kafka 4 Flink数据写入到MySQL 1 如何查询官网 官网链接 官网 2 Flink数据写入到文件 传送门 Flink数据写入到文件 3 Flink数
  • 黑苹果网站大全

    原文地址 http www cnblogs com wangbin archive 2011 09 17 2179461 html Kexts com 黑苹果驱动大全 InsanelyMac 黑苹果专业网站 netkas org 黑苹果专业
  • QNX驱动开发—进程调度和进程通信

    锋影 e mail 174176320 qq com QNX进程间调度和进程通信切换任务 一 进程调度方法 1 FIFO 先进先出队列法 一个最高优先级的线程可以一直执行到结束或是主动放弃CPU 高优先级的线程可以随时中断低优先级的线程 获
  • unity中UI界面的一些动画实现总结

    在做unity的ui界面的时候 美术通常会实现一些动画效果 这里列举几个 1 位置的变化 2 旋转的变化 3 缩放的变化 4 alpha的变化 5 颜色的变化 我们举一个例子 位置的变化 1 target为作用的对象 2 curve为曲线变
  • 【Java】高并发-线程中断的几种方式

    线程中断的几种方式 1 通过一个变量控制线程中断 代码中启动了一个线程 线程的run方法中有个死循环 内部通过exit变量的值来控制是否退出 TimeUnit SECONDS sleep 3 让主线程休眠3秒 此处为什么使用TimeUnit
  • ubuntu software center have problems,it cannot run.

    When I update my ubuntu 11 10 I meet this problem like following Items cannot be installed or removed until the package
  • spring使用xml进行声明式事务管理

  • 最全讲解磁珠

    1 磁珠的定义 磁珠是一种被动组件 用来抑制电路中的高频噪声 磁珠是一种特别的扼流圈 其成分多半为铁氧体 利用其高频电流产生的热耗散来抑制高频噪声 磁珠有时也称为磁环 EMI滤波器 铁芯等 维基百科 磁珠是滤波常用的器件 铁 镍 锌氧化物混
  • 线程池ThreadPoolExecutor之阻塞队列

    在近期的性能优化中 使用了线程池 线程池的定义如下 ExecutorService executorService new ThreadPoolExecutor threadPoolSize threadPoolMaxSize timeou
  • get请求、post请求区别

    991 GET请求一般用去请求获取数据 是无副作用的 是幂等的 POST一般作为提交数据到后台时使用 有副作用 非幂等 2 GET请求也可传参到后台 但是其参数在浏览器的地址栏的url中可见 所以隐私性安全性较差 且参数长度也是有限制的 P
  • C++(day7)

    思维导图 Vector include
  • 关于Jquery的Validate插件------rules规则说明

    Query Validate 插件为表单提供了强大的验证功能 让客户端表单验证变得更简单 同时提供了大量的定制选项 满足应用程序各种需求 该插件捆绑了一套有用的验证方法 包括 URL 和电子邮件验证 同时提供了一个用来编写用户自定义方法的
  • DevOPs介绍,这一篇就足够了

    一 什么是DevOps DevOps是一种将软件开发和IT运维进行整合的文化和运动 它的目标是通过加强软件开发 测试和运维之间的协作和沟通 使整个软件开发和交付过程更加高效 快速 安全和可靠 DevOps涵盖了从计划和设计到开发 测试 交付
  • C语言动态内存管理

    目录 1 函数栈空间 1 1栈上的内存分配 2堆上的内存分配 2 1堆区分配内存的特点 2 2申请空间的操作 2 2 1malloc 2 2 2calloc 2 2 3realloc 2 3申请空间操作的技巧 1 函数栈空间 首先我们需要清
  • 实验---采用SOM网络进行聚类

    1 SOM网络简介 自组织特征映射网络SOFM又称自组织映射网络SOM 是一种自组织竞争神经网络 一个神经网络接受外界输入模式时 将会分为不同的对应区域 各区域对输入模式具有不同的响应特征 而且这个过程是自动完成的 其特点与人脑的自组织特性