写在前面
近期看到一篇论文,其中有一个无监督聚类方法叫做SOM(self-organizing maps,自组织映射),这就来学习一下
正餐开始
SOM,自组织映射(当然也有人将其称为自组织神经网络的,也有人称为自组织竞争网络的),和通常意义上的神经网络略有不同,在应用的过程中更倾向于K-means算法。其训练过程有点像K-means中寻找聚类中心的过程。
整个模型的主要作用:降维+演示(即可视化展示数据的分布特性)
主要的功能还是数据可视化,后面的聚类分类等精度要差一些
点之间距离越近,两者关系越近,反之越远
训练目的:
一个输入(下面的所有输入层)映射到一个节点上(如X1,X2)
我们希望的就是想让我们学习到的权重W,在映射的时候能够满足这种效果:让相近的如X1、X2隔得较近,那么映射节点也相应的隔得近(或是映射到同一节点上)
ij用来表示节点的位置,Wij是一个D维的矢量特征(即与下面节点数相对应)
模型训练过程
权重初始化:
输出层的每一个节点用D维的矢量来进行表征,总共有X × Y个节点,每个节点是D维,所以最终W的维度为X × Y × D竞争:
找到激活点后,开始进行周边点权重的计算
权重更新:
目的是为了让激活点和输入的点进行逼近,结合前述权重计算, 激活点与输入点进行逼近,激活点临近点也要和输入点进行逼近。
具体细节
节点权重有2种方法,一种是高斯的方法,其图像是一个钟形结构(大概就像这样),距离越大,权重越小
第二种是硬阈值的方法,方块之内(如围着激活点的田字格)都是1,其余地方都是0。
总结
这就是SMO的理论部分,接下来看看能否进行代码实现。
220416补充
今天在工作室的一本书上看到了关于SOM的介绍,还比较全面,拍照下来便于以后参阅: