46、基于自组织映射神经网络的鸢尾花聚类(matlab)

news2024/11/27 2:22:09

1、自组织映射神经网络的鸢尾花聚类的原理及流程

自组织映射神经网络(Self-Organizing Map, SOM)是一种用于聚类和数据可视化的人工神经网络模型。在鸢尾花聚类中,SOM 可以用来将鸢尾花数据集分成不同的类别,同时保留数据间的拓扑关系。

SOM的原理是通过竞争学习和自组织的过程,将高维输入空间映射到低维的神经网络结构上。在鸢尾花聚类中,SOM会根据鸢尾花的特征(如花萼长度和宽度,花瓣长度和宽度)将其映射到一个二维的网络中,使得相似的鸢尾花样本被映射到相邻的神经元上。

流程如下:

  1. 初始化 SOM 神经网络:确定神经网络的结构,设定神经元的初始权重。
  2. 随机选取一个鸢尾花样本作为输入,并计算该样本与神经元之间的距离。
  3. 竞争学习:选取距离最近的神经元为胜者,同时调整周围神经元的权重,使得它们也向该样本靠拢。
  4. 更新权重:根据竞争学习的结果,调整神经元的权重。
  5. 重复步骤 2-4 直至达到收敛条件。

经过上述流程,SOM会将鸢尾花样本映射到不同的神经元上,形成了聚类结果。同时,SOM的拓扑结构也能够让我们在二维空间中直观地看到各个类别的分布情况,从而实现了数据的可视化。

2、 基于自组织映射神经网络的鸢尾花聚类说明

1)问题说明

自组织映射神经网络以拓扑方式将鸢尾花聚类为各个类,提供对花类型的深入了解以及用于进一步分析的实用工具。

2)输入参数

每朵鸢尾花都用四个特征进行描述:萼片长度 (cm)/萼片宽度 (cm)/花瓣长度 (cm)/花瓣宽度 (cm)

 3)方案

构建一个将鸢尾花聚类成多个自然类的神经网络,以使相似的类分组在一起。

4)自组织映射特点

自组织映射 (SOM) 非常擅长创建分类。分类保留了关于哪些类与其他类最相似的拓扑信息。自组织映射可以创建为任何所需的详细程度级别。它们特别适合对存在于多个维度且具有复杂形状的相连特征空间的数据进行聚类。 (SOM) 非常擅长创建分类。分类保留了关于哪些类与其他类最相似的拓扑信息。自组织映射可以创建为任何所需的详细程度级别。它们特别适合对存在于多个维度且具有复杂形状的相连特征空间的数据进行聚类。

3、实验数据集

1)说明

将数据组织成输入矩阵 X,为 SOM 设置聚类问题数据
输入矩阵的每个第 i 列具有四个元素,表示在一朵花上获取的四个测量值。

加载数据集代码

x = iris_dataset;
size(x)

ans =

     4   150

 4、使用神经网络进行聚类

1)使用神经网络进行聚类

说明:使用 selforgmap 创建自组织映射,通过选择每个层维度中的神经元数量来对样本进行所需详细程度的分类。
尝试具有以 8×8 六边形网格排列的 64 个神经元的二维层。使用更多神经元可以获得更多细节,而使用更多维度则可对更复杂特征空间的拓扑进行建模。

代码

net = selforgmap([8 8]);
view(net)

视图效果

 2)使用 train 优化网络

说明:神经网络训练工具显示正在接受训练的网络和用于训练该网络的算法。

代码

[net,tr] = train(net,x);

试图效果

 3)使用自组织映射计算每个训练输入的类向量

说明:这些分类涵盖了已知花朵所填充的特征空间,它们现在可用于对新花朵进行相应分类。网络输出将是一个 64×150 矩阵,其中每个第 i 列表示第 i 个输入向量(其第 j 个元素为 1)的第 j 个聚类。
函数 vec2ind 针对每个向量返回输出为 1 的神经元的索引。对于由 64 个神经元表示的 64 个聚类,索引值范围在 1 到 64 之间。

代码

y = net(x);
cluster_index = vec2ind(y);

5、结果显示

1)自组织映射拓扑

说明:使用 plotsomtop 绘制位于 8×8 六边形网格中的 64 个神经元的自组织映射拓扑。
每个神经元都已经过学习,可代表不同的花类,相邻的神经元通常代表相似的类。

代码

figure(1)
plotsomtop(net)
title('自组织映射拓扑')

视图效果

2) 每个类中的花朵数量

说明:使用 plotsomhits 计算每朵花的类,并显示每个类中的花朵数量。
具有大量命中的神经元区域所表示的类代表相似的填充度高的特征空间区域。而命中较少的区域表示填充稀疏的特征空间区域。

代码

figure(2)
plotsomhits(net,x)
title('花数量')

视图效果

 3)邻点通常用于对相似样本进行分类

说明:使用 plotsomnc 显示神经元邻点连接。邻点通常用于对相似样本进行分类。

代码

figure(3)
plotsomnc(net)
title('神经元邻点连接')

视图效果

4) 显示每个神经元的类与其邻点的距离

说明:plotsomnd 显示每个神经元的类与其邻点的距离(以欧几里德距离表示)。
浅色连接表示输入空间的高度连接区域。而深色连接表示的类代表相距很远且相互之间很少或没有花朵的特征空间区域。

代码

figure(4)
plotsomnd(net)
title('神经元类与邻点距离')

视图效果

5) 显示四个输入特征中每个特征的权重平面

说明:使用 plotsomplanes 显示四个输入特征中每个特征的权重平面。
权重可视化,这些权重将每个输入连接到以 8×8 六边形网格排列的 64 个神经元中的每一个。深色代表较大权重。如果两个输入具有相似的权重平面(它们的颜色梯度可能相同或相反),则表明它们高度相关。

代码

figure(5)
plotsomplanes(net)
title('权重平面')

视图效果

6、总结 

在 MATLAB 中实现基于自组织映射神经网络的鸢尾花聚类可以按照如下步骤进行:

  1. 准备数据:加载鸢尾花数据集,并对数据进行标准化处理。

  2. 初始化 SOM 神经网络:确定神经网络的结构,包括输入层和输出层的神经元数量,以及神经元的初始权重。

  3. 竞争学习:随机选取一个鸢尾花样本作为输入,并计算该样本与输出层神经元之间的距离,找到距离最近的胜者神经元。

  4. 更新权重:根据胜者神经元和其邻近神经元的位置关系,调整神经元的权重。

  5. 重复步骤 3 和 4 直至达到收敛条件,即神经网络的权重不再发生显著变化。

  6. 聚类结果展示:根据训练好的神经网络,将鸢尾花数据样本映射到相应的神经元上,从而得到聚类结果。

具体实现中,可以使用 MATLAB 的神经网络工具箱中的 selforgmaptrain 和 sim 等函数来构建和训练自组织映射神经网络。最后,利用可视化工具如散点图或热力图等方法,展示不同类别鸢尾花在自组织映射网络上的分布情况,进一步分析聚类结果。

7、源代码

代码

%% 基于自组织映射神经网络的鸢尾花聚类
%说明:自组织映射神经网络以拓扑方式将鸢尾花聚类为各个类,提供对花类型的深入了解以及用于进一步分析的实用工具。
%每朵鸢尾花都用四个特征进行描述:萼片长度 (cm)/萼片宽度 (cm)/花瓣长度 (cm)/花瓣宽度 (cm)
%试构建一个将鸢尾花聚类成多个自然类的神经网络,以使相似的类分组在一起。
%自组织映射 (SOM) 非常擅长创建分类。分类保留了关于哪些类与其他类最相似的拓扑信息。自组织映射可以创建为任何所需的详细程度级别。它们特别适合对存在于多个维度且具有复杂形状的相连特征空间的数据进行聚类。
%% 数据集
%将数据组织成输入矩阵 X,为 SOM 设置聚类问题数据
%输入矩阵的每个第 i 列具有四个元素,表示在一朵花上获取的四个测量值。
%加载数据集
x = iris_dataset;
size(x)
%% 使用神经网络进行聚类
%使用神经网络进行聚类
%使用 selforgmap 创建自组织映射,通过选择每个层维度中的神经元数量来对样本进行所需详细程度的分类。
%尝试具有以 8×8 六边形网格排列的 64 个神经元的二维层。使用更多神经元可以获得更多细节,而使用更多维度则可对更复杂特征空间的拓扑进行建模。
net = selforgmap([8 8]);
view(net)
%使用 train 优化网络
%神经网络训练工具显示正在接受训练的网络和用于训练该网络的算法。
[net,tr] = train(net,x);
%使用自组织映射计算每个训练输入的类向量。
%这些分类涵盖了已知花朵所填充的特征空间,它们现在可用于对新花朵进行相应分类。网络输出将是一个 64×150 矩阵,其中每个第 i 列表示第 i 个输入向量(其第 j 个元素为 1)的第 j 个聚类。
%函数 vec2ind 针对每个向量返回输出为 1 的神经元的索引。对于由 64 个神经元表示的 64 个聚类,索引值范围在 1 到 64 之间。
y = net(x);
cluster_index = vec2ind(y);
%使用 plotsomtop 绘制位于 8×8 六边形网格中的 64 个神经元的自组织映射拓扑。
%每个神经元都已经过学习,可代表不同的花类,相邻的神经元通常代表相似的类。
figure(1)
plotsomtop(net)
title('自组织映射拓扑')
%使用 plotsomhits 计算每朵花的类,并显示每个类中的花朵数量。
%具有大量命中的神经元区域所表示的类代表相似的填充度高的特征空间区域。而命中较少的区域表示填充稀疏的特征空间区域。
figure(2)
plotsomhits(net,x)
title('花数量')
%使用 plotsomnc 显示神经元邻点连接。邻点通常用于对相似样本进行分类。
figure(3)
plotsomnc(net)
title('神经元邻点连接')
%plotsomnd 显示每个神经元的类与其邻点的距离(以欧几里德距离表示)。
%浅色连接表示输入空间的高度连接区域。而深色连接表示的类代表相距很远且相互之间很少或没有花朵的特征空间区域。
figure(4)
plotsomnd(net)
title('神经元类与邻点距离')
%使用 plotsomplanes 显示四个输入特征中每个特征的权重平面。
%权重可视化,这些权重将每个输入连接到以 8×8 六边形网格排列的 64 个神经元中的每一个。深色代表较大权重。如果两个输入具有相似的权重平面(它们的颜色梯度可能相同或相反),则表明它们高度相关。
figure(5)
plotsomplanes(net)
title('权重平面')

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

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

相关文章

centos7系统上安装MySQL8.4图文教程

本章教程,主要记录如何在CentOS7系统上安装MySQL8.4的详细步骤。 一、查看当前系统版本 cat /etc/centos-release二、安装步骤 1、创建mysql目录 cd /usr/local && mkdir mysql && cd mysql2、安装rpm包 yum install https://repo.mysql.com//m…

[FreeRTOS 基础知识] 互斥访问与回环队列 概念

文章目录 为什么需要互斥访问?使用队列实现互斥访问休眠和唤醒机制环形缓冲区 为什么需要互斥访问? 在裸机中,假设有两个函数(func_A, func_B)都要修改a的值(a),那么将a定义为全局变…

Django数据驾驶舱

Django数据驾驶舱 1.项目介绍2.项目结构3.库表结构3.1 appcsdn的models3.2 appssq的models3.3 appweather的models3.4 appweibo的models 4.功能展示5.解决问题5.1 路由配置5.2 后端数据与前端echarts展示5.3 长图表丝滑滚动条 6.遗留问题7.资源分享 1.项目介绍 这里介绍本人最…

STM32读写备份寄存器和实时时钟

文章目录 1. 硬件电路 2. RTC操作注意事项 操作步骤 3. 代码实现 3.1 读写备份寄存器 3.1.1 main.c 3.2 实时时钟 3.2.1 MyRTC.c 3.2.2 MyRTC.h 3.2.3 main.c 1. 硬件电路 对于BKP备份寄存器和RTC实时时钟的详细解析可以看下面这篇文章: STM32单片机BKP备…

水果销售系统

摘 要 随着电子商务的快速发展,传统的实体销售模式面临着越来越多的挑战。在这个数字化的时代,消费者的购物习惯发生了翻天覆地的变化,消费者更倾向于在家中通过网络平台浏览并购买商品,这无疑给传统水果销售带来了极大的挑战。为…

【动态规划】1130. 叶值的最小代价生成树

1130. 叶值的最小代价生成树 难度:中等 力扣地址:https://leetcode.cn/problems/minimum-cost-tree-from-leaf-values/description/ 题目内容 给你一个正整数数组 arr,考虑所有满足以下条件的二叉树: 每个节点都有 0 个或是 2 个…

算法04 模拟算法之一维数组相关内容详解【C++实现】

大家好,我是bigbigli,模拟算法我们将分为几个章节来讲,今天我们只看一维数组相关的题目 目录 模拟的概念 训练:开关灯 解析 参考代码 训练:数组变化 解析 参考代码 训练:折叠游戏 解析 参考代码 …

韩顺平0基础学java——第29天

p592-599 线程 用户线程和守护线程 1.用户线程:也叫工作线程,当线程的任务执行完或通知方式结束 2守护线程:一般是为工作线程服务的,当所有的用户线选束,守护线程自动结束 3.常见的守护线程:垃圾回收机制 当我们希望当main线程结束后&…

C# Onnx Yolov5 水果识别,人员识别,物品识别 人工智能

目录 先上效果 来电废话,但实用 网络成功案例实践易失败的原因 万物检测涉及技术 下载合集 关键代码 全部代码 实操vs2022安装关键 YOLO V5核心库编译 编写自己识别软件 更新相关依赖 标注字库文件 测试效果 名词解释YOLO 名词解释ONNX 源码 直播教…

利用第三方服务对目标进行被动信息收集防止被发现(web安全白帽子)

利用第三方服务对目标进行被动信息收集防止被发现(web安全白帽子) 1 被动信息收集1.1 信息收集内容1.2 信息用途 2 信息收集-DNS2.1 DNS信息收集NSLOOKUP2.1.1 ping2.1.2 nslookup 2.2 DNS信息收集-DIG(此命令查到的结果更复杂些,…

Apache IoTDB vs InfluxDB 开源版,架构性能全面对比!

分布式、端边云同步、读写查询性能,Apache IoTDB 与 InfluxDB 开源版的详尽对照! 在物联网(IoT)领域,数据的采集、存储和分析是确保系统高效运行和决策准确的重要环节。随着物联网设备数量的增加和数据量的爆炸式增长&…

Golang | Leetcode Golang题解之第174题地下城游戏

题目&#xff1a; 题解&#xff1a; func calculateMinimumHP(dungeon [][]int) int {n, m : len(dungeon), len(dungeon[0])dp : make([][]int, n 1)for i : 0; i < len(dp); i {dp[i] make([]int, m 1)for j : 0; j < len(dp[i]); j {dp[i][j] math.MaxInt32}}dp[…

爬虫笔记11——网页爬取数据写入csv

数据持久化存储进文件&#xff0c;前面的文章已经讲解如何存储入Excel表格了&#xff0c;有兴趣可以看一下&#xff0c;现在来记录一下如何存储进csv文件。 csv存储 csv简述 csv就是一个普通文件&#xff0c;里面的内容是每一行中的数据用逗号分隔&#xff0c;然后文件后缀为…

Golang | Leetcode Golang题解之第179题最大数

题目&#xff1a; 题解&#xff1a; func largestNumber(nums []int) string {sort.Slice(nums, func(i, j int) bool {x, y : nums[i], nums[j]sx, sy : 10, 10for sx < x {sx * 10}for sy < y {sy * 10}return sy*xy > sx*yx})if nums[0] 0 {return "0"…

教师信息管理系统

摘要 随着互联网技术与信息时代的高速发展和应用&#xff0c;教育行业也逐渐意识到互联网技术与信息化管理的融合。在传统的教师信息管理中&#xff0c;往往需要大量的纸质档案和手工处理&#xff0c;不仅效率低下&#xff0c;而且容易出现信息丢失和错误。因此为了提高教师信…

解决vs2022无法安装扩展程序包

在工具—>NuGet包管理器—>程序包管理设置&#xff0c;把程序包源设置为https://www.nuget.org/api/v2/&#xff0c;如下图 然后就可以在管理解决方案包界面搜索下载自己需要的扩展包

安全之战,巅峰对决 | 第八届XCTF国际网络攻防联赛总决赛首日赛况公布!

XCTF联赛由清华大学蓝莲花(Blue-Lotus)战队发起&#xff0c;国家创新与发展战略研究会主办&#xff0c;赛宁网安总体承办&#xff0c;旨在探索网络安全创新能力与发展潜力。第八届XCTF国际网络攻防联赛总决赛在四川省经济和信息化厅、四川省教育厅、四川省公安厅的指导下&#…

kafka(二)安装部署(2)windows

一、前提 安装Kafka之前&#xff0c;需要安装JDK、Zookeeper、Scala, 本次安装版本选择&#xff1a; JDK&#xff1a;1.8 Zookeeper&#xff1a;3.6.4 Scala&#xff1a;2.12 Kafka&#xff1a;3.5.2 1、jdk Java Downloads | Oracle 见jdk下载安装。 2、Zookeeper 下载…

Android进程间通信 Messenger详解

//这里服务端Service是运行在单独的进程中的 android:process“:other” class MessengerService : Service() { private lateinit var mMessenger: Messenger override fun onBind(intent: Intent): IBinder { log(TAG, “onBind~”) //传入Handler实例化Messenger mMes…

Android测量

最大模式&#xff08;MeasureSpec.AT_MOST&#xff09; 这个也就是父组件&#xff0c;能够给出的最大的空间&#xff0c;当前组件的长或宽最大只能为这么大&#xff0c;当然也可以比这个小。 最高两位是11的时候表示”最大模式”。即MeasureSpec.AT_MOST未指定模式&#xff08;…