54、一维和二维自组织映射(matlab)

1、一维和二维自组织映射原理

一维和二维自组织映射(Self-Organizing Maps, SOM)是一种无监督的机器学习算法,通过学习输入数据的拓扑结构,将高维输入数据映射到低维的网格结构中,使得相似的输入数据点在映射空间中也会彼此靠近。一维和二维SOM算法的原理如下:

  1. 初始化网络:首先,随机初始化一个具有一定结构的网络,通常为一维或二维的网格结构,每个节点都代表一个权重向量。

  2. 训练网络:通过迭代的方式,将输入数据通过与网络中的节点计算距离,将最接近的节点称为获胜节点(winner node),并更新获胜节点及其邻近节点的权重向量,使得它们更好地表示输入数据。

  3. 衰减学习率:在训练过程中,逐渐减小学习率和邻域半径,使得网络在接近收敛时对输入数据的调整更加小步长和局部。

  4. 完成训练:当网络收敛或迭代次数达到预设值时,训练过程结束,此时网络中的节点已经学习到了输入数据的拓扑结构。

通过以上原理,一维和二维自组织映射算法可以用于降维、聚类、可视化等领域的数据分析和模式识别任务中。

2、一维自组织映射

1)说明

二维层中的神经元可学习表示输入向量在输入空间出现的不同区域。此外,邻近的神经元可学习对相似的输入进行响应,从而该层可学习所呈现的输入空间的拓扑。

2)数据集

创建了位于单位圆上的 100 个数据点。
竞争网络将用于将这些点分成若干自然类。

代码

angles = 0:0.5*pi/99:0.5*pi;
X = [sin(angles); cos(angles)];
figure(1)
plot(X(1,:),X(2,:),'+r')

视图效果

048a36de309549169ca1febe6a8ef517.png

3)映射将是由 10 个神经元组成的一维层。

 代码

net = selforgmap(10);

 4)网络训练

说明:指定网络将接受 10 轮训练,并使用 train 基于输入数据对网络进行训练。

代码

net.trainParam.epochs = 10;
net = train(net,X);

视图效果

aed7be8acc114d8f9459e75fcd4b483a.png

 5)使用 plotsompos 绘制经过训练的网络的权重位置。

说明:红点是神经元的权重向量,蓝线连接在距离 1 内的每对红点。

代码

figure(2)
plotsompos(net)

试图效果

41525c28decc489eb8275f36ec41a873.png

6) 对输入进行分类

说明:映射可用于对输入进行分类,例如 [1; 0]。神经元 1 或 10 的输出应该为 1,因为上述输入向量位于所呈现的输入空间的一端。第一对数字表示神经元,单个数字表示其输出。

代码

x = [1;0];
a = net(x)a =000000000000000000000000010000

3、 二维自组织映射

1)说明

自组织映射将学习表示输入向量在输入空间中出现的不同区域
神经元会形成二维网格,对一个矩形中的 1000 个二元素向量进行分类

2)输入数据

代码

X = rands(2,1000);
figure(3)
plot(X(1,:),X(2,:),'+r')

视图效果

a262409ff9cc410b9fbde9d5859f100b.png

3) 使用 5×6 神经元层对上述向量进行分类

说明:每个神经元对矩形的不同区域作出响应,相邻神经元对相邻区域作出响应。将网络配置为匹配输入的维度

代码

net = selforgmap([5 6]);
net = configure(net,X);

4) 使用 plotsompos 可视化创建的网络。

说明:每个神经元在其两个权重的位置用红点表示。最初,所有神经元的权重相同,位于向量的中间,因此只出现一个点。

代码

figure(4)
plotsompos(net)

视图效果

a997acdd817141b08fd8f6d1411e1258.png

5) 训练网络

说明:训练后,神经元层已开始自组织,每个神经元现在界定输入空间的不同区域,并且相邻(连接的)神经元对相邻区域作出响应。

代码

figure(5)
net.trainParam.epochs = 1;
net = train(net,X);
plotsompos(net)

视图效果

79e02d27098c44a191674d6ab54c1e95.png

6) 向量输入网络并观察哪个神经元有响应来对向量进行分类

说明:由“1”表示的神经元有响应,因此 x 属于该类。

代码

x = [0.5;0.3];
y = net(x)

4、总结

使用MATLAB实现一维和二维自组织映射(SOM)可以通过使用MATLAB的 Neural Network Toolbox 来实现。以下是一维和二维自组织映射的主要步骤和示例代码:

1数据准备:首先,准备输入数据集并进行必要的预处理。

2创建SOM网络:使用 MATLAB 的 selforgmap 函数来创建一维或二维自组织映射网络。例如:

som = selforgmap([8 8]); % 创建一个 8x8 的二维SOM网络

3训练网络:使用 train 函数来训练SOM网络。例如:

[net, tr] = train(som, data);

4可视化结果:可以使用 plotsomhits 函数来可视化SOM网络的节点之间的距离。例如:

plotsomhits(som, data);

5使用SOM网络进行预测:使用 MATLAB 的 sim 函数来使用训练好的SOM网络进行数据映射。例如:

output = sim(som, new_data);

总的来说,使用 MATLAB 实现一维和二维自组织映射是比较简单和直观的,只需要利用 Neural Network Toolbox 提供的函数和工具即可轻松完成。通过训练SOM网络,可以实现数据降维、可视化、聚类等应用。

5、源代码

代码

%% 一维自组织映射
%二维层中的神经元可学习表示输入向量在输入空间出现的不同区域。此外,邻近的神经元可学习对相似的输入进行响应,从而该层可学习所呈现的输入空间的拓扑。
%% 数据集
%创建了位于单位圆上的 100 个数据点。
%竞争网络将用于将这些点分成若干自然类。
angles = 0:0.5*pi/99:0.5*pi;
X = [sin(angles); cos(angles)];
figure(1)
plot(X(1,:),X(2,:),'+r')
%映射将是由 10 个神经元组成的一维层。
net = selforgmap(10);
%网络训练
%指定网络将接受 10 轮训练,并使用 train 基于输入数据对网络进行训练。
net.trainParam.epochs = 10;
net = train(net,X);
%使用 plotsompos 绘制经过训练的网络的权重位置。
%红点是神经元的权重向量,蓝线连接在距离 1 内的每对红点。
figure(2)
plotsompos(net)
%对输入进行分类
%映射可用于对输入进行分类,例如 [1; 0]。神经元 1 或 10 的输出应该为 1,因为上述输入向量位于所呈现的输入空间的一端。第一对数字表示神经元,单个数字表示其输出。
x = [1;0];
a = net(x)
%% 二维自组织映射
%自组织映射将学习表示输入向量在输入空间中出现的不同区域
%神经元会形成二维网格,对一个矩形中的 1000 个二元素向量进行分类
%输入数据
X = rands(2,1000);
figure(3)
plot(X(1,:),X(2,:),'+r')
%使用 5×6 神经元层对上述向量进行分类
%每个神经元对矩形的不同区域作出响应,相邻神经元对相邻区域作出响应。将网络配置为匹配输入的维度
net = selforgmap([5 6]);
net = configure(net,X);
%使用 plotsompos 可视化创建的网络。
%每个神经元在其两个权重的位置用红点表示。最初,所有神经元的权重相同,位于向量的中间,因此只出现一个点。
figure(4)
plotsompos(net)
%训练网络
%训练后,神经元层已开始自组织,每个神经元现在界定输入空间的不同区域,并且相邻(连接的)神经元对相邻区域作出响应。
figure(5)
net.trainParam.epochs = 1;
net = train(net,X);
plotsompos(net)
%向量输入网络并观察哪个神经元有响应来对向量进行分类
%由“1”表示的神经元有响应,因此 x 属于该类。
x = [0.5;0.3];
y = net(x)

 

 

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

阿尔泰科技与西安交通大学陕西省某技术重点实验室共谋未来!

近日,阿尔泰科技的电子工程师(熊工)应邀前往西安交通大学陕西省某技术重点实验室,参与课题组项目的测试与调试工作。此次合作不仅成功推动了项目的进展,还为未来的深入合作奠定了坚实基础。 阿尔泰科技作为领先的测控技…

刷题之删除有序数组中的重复项(leetcode)

删除有序数组中的重复项 这题简单题&#xff0c;双指针&#xff0c;一个指针记录未重复的数的个数&#xff0c;另一个记录遍历的位置。 以下是简单模拟&#xff0c;可以优化&#xff1a; class Solution { public:int removeDuplicates(vector<int>& nums) {int l0…

Debezium报错处理系列之第114篇:No TableMapEventData has been found for table id:256.

Debezium报错处理系列之第114篇:Caused by: com.github.shyiko.mysql.binlog.event.deserialization.MissingTableMapEventException: No TableMapEventData has been found for table id:256. Usually that means that you have started reading binary log within the logic…

博美犬插画:成都亚恒丰创教育科技有限公司

​博美犬插画&#xff1a;萌动心灵的细腻笔触 在浩瀚的艺术海洋中&#xff0c;有一种艺术形式总能以它独有的温柔与细腻&#xff0c;触动人心最柔软的部分——那便是插画。而当插画遇上博美犬这一萌宠界的明星&#xff0c;便诞生了一幅幅令人爱不释手的作品&#xff0c;成都亚…

代码随想录打卡第十八天

代码随想录–二叉树部分 day 17 休息日 day 18 二叉树第五天 文章目录 代码随想录--二叉树部分一、力扣654--最大二叉树二、力扣617--合并二叉树三、力扣700--二乘树中的搜素四、力扣98--验证二叉搜索树 一、力扣654–最大二叉树 代码随想录题目链接&#xff1a;代码随想录 给…

美容师有什么话术技巧?美业人如何提升自己的销售技巧?博弈美业门店管理系统分享经验

作为一名美容师&#xff0c;有一些话术和销售技巧可以帮助你提升服务质量和销售业绩。以下是博弈美业收银系统分享的一些建议&#xff1a; 1.建立信任&#xff1a; 在与客户交流时&#xff0c;表现出真诚、友好和专业的态度。倾听客户的需求&#xff0c;并给予针对性的建议&a…

随笔(一)

1.即时通信软件原理&#xff08;发展&#xff09; 即时通信软件实现原理_即时通讯原理-CSDN博客 笔记&#xff1a; 2.泛洪算法&#xff1a; 算法介绍 | 泛洪算法&#xff08;Flood fill Algorithm&#xff09;-CSDN博客 漫水填充算法实现最常见有四邻域像素填充法&#xf…

Redis代替Session实现共享

集群的session共享问题 session共享问题&#xff1a;多台tomcat并不共享session存储空间&#xff0c;当请求切换到不同的tomcat服务时导致数据丢失的问题。 session的替代方案&#xff1a; 数据共享内存存储key、value结构 将redis替换session可以解决session共享问题

Day65 代码随想录打卡|回溯算法篇---组合总和II

题目&#xff08;leecode T40&#xff09;&#xff1a; 给定一个候选人编号的集合 candidates 和一个目标数 target &#xff0c;找出 candidates 中所有可以使数字和为 target 的组合。 candidates 中的每个数字在每个组合中只能使用 一次 。 注意&#xff1a;解集不能包含…

第十八节 LLaVA如何按需构建LORA训练(视觉、语言、映射多个组合训练)

文章目录 前言一、基于llava源码构建新的参数1、添加lora_vit参数2、训练命令脚本设置二、修改源码,构建lora训练1、修改源码-lora训练2、LLM模型lora加载3、VIT模型加载4、权重冻结操作5、结果显示三、实验结果前言 如果看了我前面文章,想必你基本对整个代码有了更深认识。…

DevOps实战:使用GitLab+Jenkins+Kubernetes(k8s)建立CI_CD解决方案

一.系统环境 本文主要基于Kubernetes1.21.9和Linux操作系统CentOS7.4。 服务器版本docker软件版本Kubernetes(k8s)集群版本CPU架构CentOS Linux release 7.4.1708 (Core)Docker version 20.10.12v1.21.9x86_64CI/CD解决方案架构图:CI/CD解决方案架构图描述:程序员写好代码之…

学习数据库2

在数据库中创建一个表student&#xff0c;用于存储学生信息 查看建表结果 向student表中添加一条新记录 记录中id字段的值为1&#xff0c;name字段的值为"monkey"&#xff0c;grade字段的值为98.5 并查看结果 向student表中添加多条新记录 2,"bob"…

算法之工程化内容(2)—— Git常用命令

目录 1. git初始化配置 2. 新建仓库 3. 工作区——>暂存区——>本地仓库 4. git reset回退版本 5. 查看差异 git diff 6. 删除文件git rm 7. .gitignore 8. vscode操作git 9. git分支、合并和删除 10. 解决合并冲突 11. 回退和rebase 12. 添加远程仓库 参考链接&#xff…

用于视频生成的扩散模型

学习自https://lilianweng.github.io/posts/2024-04-12-diffusion-video/ 文章目录 3D UNet和DiTVDMImagen VideoSora 调整图像模型生成视频Make-A-Video&#xff08;对视频数据微调&#xff09;Tune-A-VideoGen-1视频 LDMSVD稳定视频扩散 免训练Text2Video-ZeroControlVideo 参…

C++deque容器

文章目录 deque容器概念deque操作deque对象的带参数构造deque头部和末尾的添加移除操作deque的数据存取deque与迭代器deque赋值deque插入deque删除 deque容器概念 deque是双端数组&#xff0c;而vector是单端的。 deque头部和尾部添加或移除元素都非常快速, 但是在中部安插元…

一个php文件怎么实现联系表单自动发送邮件

学习PHP&#xff1a;如何编写一个自动发送邮件的联系表单处理器&#xff1f; 无论是反馈意见、业务咨询&#xff0c;还是技术支持&#xff0c;联系表单都能为用户提供便捷的交流途径。AokSend将探讨如何通过一个PHP文件实现联系表单的自动发送邮件功能。 php文件&#xff1a;…

Java实战:寻找完美数

文章目录 一、何谓完美数二、寻找完美数&#xff08;一&#xff09;编程思路&#xff08;二&#xff09;编写程序&#xff08;三&#xff09;运行程序 三、实战小结 一、何谓完美数 完美数是一种特殊的自然数&#xff0c;它等于其所有正除数&#xff08;不包括其本身&#xff…

数据结构作业/2024/7/9

2>实现双向循环链表的创建、判空、尾插、遍历、尾删、销毁 fun.c #include "head.h" //1.双向循环链表的创建 doubleloop_ptr create_list() …

数据结构——顺序表【C】

顺序表 1. 顺序表的概念以及结构1.1概念1.2静态顺序表和动态顺序表 2. 顺序表接口模拟实现接口总览2.1 初始化数据和销毁容器 2.2 顺序表的尾插和尾删2.3 头插和头删2.4 任意位置插入和删除数据2.5 查找数据 3. 顺序表的问题 &#xff1a; 1. 顺序表的概念以及结构 1.1概念 顺…

利用亚马逊云科技云原生Serverless代码托管服务开发OpenAI ChatGPT-4o应用

今天小李哥继续介绍国际上主流云计算平台亚马逊云科技AWS上的热门生成式AI应用开发架构。上次小李哥分享​了利用谷歌云serverless代码托管服务Cloud Functions构建Gemini Pro API​&#xff0c;这次我将介绍如何利用亚马逊的云原生服务Lambda调用OpenAI的最新模型ChatGPT 4o。…