写在前面

近期看到一篇论文,其中有一个无监督聚类方法叫做SOM(self-organizing maps,自组织映射),这就来学习一下

正餐开始

SOM,自组织映射(当然也有人将其称为自组织神经网络的,也有人称为自组织竞争网络的),和通常意义上的神经网络略有不同,在应用的过程中更倾向于K-means算法。其训练过程有点像K-means中寻找聚类中心的过程。

som聚类算法 matlab代码 som聚类分析_som聚类算法 matlab代码


整个模型的主要作用:降维+演示(即可视化展示数据的分布特性)

主要的功能还是数据可视化,后面的聚类分类等精度要差一些

点之间距离越近,两者关系越近,反之越远

训练目的:

一个输入(下面的所有输入层)映射到一个节点上(如X1,X2)

我们希望的就是想让我们学习到的权重W,在映射的时候能够满足这种效果:让相近的如X1、X2隔得较近,那么映射节点也相应的隔得近(或是映射到同一节点上)

som聚类算法 matlab代码 som聚类分析_权重_02


ij用来表示节点的位置,Wij是一个D维的矢量特征(即与下面节点数相对应)

模型训练过程

som聚类算法 matlab代码 som聚类分析_聚类_03


权重初始化:

输出层的每一个节点用D维的矢量来进行表征,总共有X × Y个节点,每个节点是D维,所以最终W的维度为X × Y × D竞争:

找到激活点后,开始进行周边点权重的计算

som聚类算法 matlab代码 som聚类分析_聚类_04


权重更新:

目的是为了让激活点和输入的点进行逼近,结合前述权重计算, 激活点与输入点进行逼近,激活点临近点也要和输入点进行逼近。

具体细节

som聚类算法 matlab代码 som聚类分析_权重_05


节点权重有2种方法,一种是高斯的方法,其图像是一个钟形结构(大概就像这样),距离越大,权重越小

som聚类算法 matlab代码 som聚类分析_数据分析_06


第二种是硬阈值的方法,方块之内(如围着激活点的田字格)都是1,其余地方都是0。

总结

这就是SMO的理论部分,接下来看看能否进行代码实现。

220416补充

今天在工作室的一本书上看到了关于SOM的介绍,还比较全面,拍照下来便于以后参阅:

som聚类算法 matlab代码 som聚类分析_python_07


som聚类算法 matlab代码 som聚类分析_python_08


som聚类算法 matlab代码 som聚类分析_数据分析_09


som聚类算法 matlab代码 som聚类分析_python_10