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)
相关推荐
Ajiang28247353042 小时前
对于C++中stack和queue的认识以及priority_queue的模拟实现
开发语言·c++
幽兰的天空2 小时前
Python 中的模式匹配:深入了解 match 语句
开发语言·python
HPC_fac130520678163 小时前
以科学计算为切入点:剖析英伟达服务器过热难题
服务器·人工智能·深度学习·机器学习·计算机视觉·数据挖掘·gpu算力
Theodore_10225 小时前
4 设计模式原则之接口隔离原则
java·开发语言·设计模式·java-ee·接口隔离原则·javaee
----云烟----7 小时前
QT中QString类的各种使用
开发语言·qt
lsx2024067 小时前
SQL SELECT 语句:基础与进阶应用
开发语言
开心工作室_kaic7 小时前
ssm161基于web的资源共享平台的共享与开发+jsp(论文+源码)_kaic
java·开发语言·前端
向宇it7 小时前
【unity小技巧】unity 什么是反射?反射的作用?反射的使用场景?反射的缺点?常用的反射操作?反射常见示例
开发语言·游戏·unity·c#·游戏引擎
武子康7 小时前
Java-06 深入浅出 MyBatis - 一对一模型 SqlMapConfig 与 Mapper 详细讲解测试
java·开发语言·数据仓库·sql·mybatis·springboot·springcloud
转世成为计算机大神8 小时前
易考八股文之Java中的设计模式?
java·开发语言·设计模式