【教程】如何一步一步训练一个SOM神经网络-自组织竞争神经网络(Self-organizing Feature Map)

本文来自《老饼讲解-BP神经网络》https://www.bbbdata.com/

目录

SOM神经网络全称为自组织竞争神经网络(Self-organizing Feature Map),它是Kohonen在1981年提出的一种用于聚类的神经网络,本文讲解如何一步一步训练一个SOM神经网络。

一、什么是SOM神经网络

1.1.SOM神经网络有什么用

SOM神经网络主要用来解决聚类问题,聚类问题是一种无监督学习,就是对样本进行分类,

通过算法,找出N个聚类中心,样本离哪个聚类中心最近,就将样本判为哪一个类别。

如上示所,经过聚类算法后,将样本划分为不同的类别。

1.2.SOM神经网络是如何聚类的

SOM按一个固定的拓扑初始化聚类中心,如下所示就是SOM常用的六边形拓扑结构

进一步地,根据Kohonen规则更新聚类中心,SOM与Kohonen的不同是,SOM会把邻近的聚类中心一起更新(这就是为什么SOM会引入拓扑结构来连结各个聚类中心了)。

以神经网络的拓扑图来展示SOM神经网络时,则如下:

输入是样本,隐层的各个隐节点就是各个聚类中心,最终样本离哪个聚类中心最近,就判断样本属于哪个类别。

二、如何训练一个SOM神经网络

2.1. 训练一个SOM神经网络的代码示例

在matlab中可以使用selforgmap来训练一个SOM神经网络,示例代码如下:

matlab 复制代码
% 本demo展示用matlab工具箱训练一个SOM神经网络
% 生成用于聚类的数据
rand('seed',70);                                   % 随机种子,设定随机种子是为了每次的结果一样
dataC = [2.5,2.5;7.5,2.5;2.5,7.5;7.5,7.5]';        % 生成四个样本中心
sn = 80;                                           % 样本个数
X = rand(2,sn)+dataC(:,mod(1:sn,4)+1);             % 随机生成样本点
											       
% 调用工具箱训练一个SOM网络                        
net = selforgmap([3 5]);                           % 建立一个SOM神经网络
net = train(net,X);                                % 训练网络
W   = net.IW{1};                                   % 网络的权重,也即各个聚类中心的位置
y   = net(X);                                      % 用训练好的网络进行预测
classes = vec2ind(y);                              % 将预测结果由one-hot格式转为类别索引

% 绘图
plot(X(1,:),X(2,:),'*');                           % 原始样本
hold on 
plot(W(:,1),W(:,2),'or','MarkerFaceColor','g');    % 网络训练好的聚类中心

运行结果如下

绿色的隐神经元(聚类中心),红色的是样本,可见SOM神经网络已经基本较为合理地将样本进行聚类了。

2.2. 如何查看SOM神经网络的聚类中心

SOM神经网络的权重W就是各个聚类中心,只需要使用用net.IW{1}就可以提取出来,如下所示:

上面就是我们训练得到的15个聚类中心的位置了。


相关链接:

《老饼讲解-机器学习》:老饼讲解-机器学习教程-通俗易懂

《老饼讲解-神经网络》:老饼讲解-matlab神经网络-通俗易懂

《老饼讲解-神经网络》:老饼讲解-深度学习-通俗易懂

相关推荐
lambo mercy4 分钟前
什么是LangGraph?
人工智能
用户6147767378813 分钟前
从零搭出能回答"自己文档"的 RAG:179 行代码,成本不到 1 毛
人工智能
紧跟先前的步伐17 分钟前
Go AI Agent 实战 11|请求结构、响应结构与 JSON 解析
人工智能·ai·golang·json
用户0081283740217 分钟前
从零写一个扫雷:两个数组、一个坑,和三个后来加的功能
人工智能
zybsjn20 分钟前
Chrome 10 月 27 日剔除 eMudhra 根:3 万张证书的排查命令与迁移清单
人工智能·大模型
居里先生75224 分钟前
PDF 去水印开发实录:Form XObject、Identity-H 字体与 6 个对象层深坑
人工智能
零基础12326 分钟前
自进化(Self-evolving / RSI):让 AI 系统自己变强的机制与边界
人工智能
ZhengEnCi28 分钟前
ROS2 为啥要拆成二三十个节点?一台小车背后的真实结构
人工智能·机器人·自动驾驶
梯度下降的咖啡师31 分钟前
把上一篇的 Function Calling 套个 while,就是你的第一个 Agent
人工智能
爱新觉罗胜利34 分钟前
500M 激活逼近 3.3B:VLA 的容量到底该加在哪一层
人工智能