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

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

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

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

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

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

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

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

2、一维自组织映射

1)说明

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

2)数据集

创建了位于单位圆上的 100 个数据点。

竞争网络将用于将这些点分成若干自然类。

代码

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

视图效果

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

代码

Matlab 复制代码
net = selforgmap(10);

4)网络训练

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

代码

Matlab 复制代码
net.trainParam.epochs = 10;
net = train(net,X);

视图效果

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

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

代码

Matlab 复制代码
figure(2)
plotsompos(net)

试图效果

6) 对输入进行分类

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

代码

Matlab 复制代码
x = [1;0];
a = net(x)

a =

     0
     0
     0
     0
     0
     0
     0
     0
     0
     0
     0
     0
     0
     0
     0
     0
     0
     0
     0
     0
     0
     0
     0
     0
     0
     1
     0
     0
     0
     0

3、 二维自组织映射

1)说明

自组织映射将学习表示输入向量在输入空间中出现的不同区域

神经元会形成二维网格,对一个矩形中的 1000 个二元素向量进行分类

2)输入数据

代码

Matlab 复制代码
X = rands(2,1000);
figure(3)
plot(X(1,:),X(2,:),'+r')

视图效果

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

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

代码

Matlab 复制代码
net = selforgmap([5 6]);
net = configure(net,X);

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

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

代码

Matlab 复制代码
figure(4)
plotsompos(net)

视图效果

5) 训练网络

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

代码

Matlab 复制代码
figure(5)
net.trainParam.epochs = 1;
net = train(net,X);
plotsompos(net)

视图效果

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

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

代码

Matlab 复制代码
x = [0.5;0.3];
y = net(x)

4、总结

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

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

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

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

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

Matlab 复制代码
[net, tr] = train(som, data);

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

Matlab 复制代码
plotsomhits(som, data);

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

Matlab 复制代码
output = sim(som, new_data);

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

5、源代码

代码

Matlab 复制代码
%% 一维自组织映射
%二维层中的神经元可学习表示输入向量在输入空间出现的不同区域。此外,邻近的神经元可学习对相似的输入进行响应,从而该层可学习所呈现的输入空间的拓扑。
%% 数据集
%创建了位于单位圆上的 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)
相关推荐
2401_857439691 小时前
SSM 架构下 Vue 电脑测评系统:为电脑性能评估赋能
开发语言·php
孤亭远见2 小时前
COMSOL with Matlab
matlab
SoraLuna2 小时前
「Mac畅玩鸿蒙与硬件47」UI互动应用篇24 - 虚拟音乐控制台
开发语言·macos·ui·华为·harmonyos
xlsw_2 小时前
java全栈day20--Web后端实战(Mybatis基础2)
java·开发语言·mybatis
靴子学长2 小时前
基于字节大模型的论文翻译(含免费源码)
人工智能·深度学习·nlp
Dream_Snowar3 小时前
速通Python 第三节
开发语言·python
海棠AI实验室3 小时前
AI的进阶之路:从机器学习到深度学习的演变(一)
人工智能·深度学习·机器学习
图南楠4 小时前
simulink离散传递函数得到差分方程并用C语言实现
matlab
高山我梦口香糖4 小时前
[react]searchParams转普通对象
开发语言·前端·javascript
落魄君子4 小时前
ELM分类-单隐藏层前馈神经网络(Single Hidden Layer Feedforward Neural Network, SLFN)
神经网络·分类·数据挖掘