我最近遇到了自组织地图,我有以下疑问:
1)神经元的数量与单元(簇)的数量有什么关系?2) 如何从特定单元中提取元素?
您可以将一个单元定义为一个集群。它与 k-means 非常相似(如果你知道的话)。每个单元都是一个集群(通过忽略自定义选项)。并为每个单元找到最相似的实例。他们是该单元的集群成员。如果您了解 Python,您可以推断出我的 SOM 实现。https://github.com/erogol/RSOM
原则上,SOM 是一种基于原型的方法,其中每个神经元都与一个权重向量相关。这个权重向量的作用类似于原始 k-means 算法中的质心。主要区别在于 SOM 中的神经元通过矩阵结构相互连接。在一个简单的解释中,矩阵的每个节点对应于它自己的集群,因为它代表了许多数据点。然而,在实践中,数据空间的区域包含点云,这些点通常由多个神经元表示,它们共同形成所谓的“超级”集群。SOM 收敛后的一个常见阶段是将 SOM 单元分组为超级集群,这可以使用聚类算法(如 k-means 或分层聚类)基于神经元之间的距离来完成。输出将是神经元组,即
在这里,您可以找到关于如何使用 R 中的 SOM 生成超级集群的非常有用的教程。
https://cran.r-project.org/web/packages/SOMbrero/vignettes/doc-numericSOM.html
这些都是一样的。在 SOM 中,神经元被称为一个单元。赢得特定输入向量的单元称为其最佳匹配单元 (BMU)。在学习过程中,神经元/单元竞争以赢得输入向量。
训练 SOM 后,每个单元都以它赢得的输入向量结束。因此,您可以拥有一个字典,其中每个单元坐标作为键,而输入向量将成为成员。在这里查看它是如何完成的MiniSom,该方法
win_map(self, data)
可以从经过训练的 SOM 中提取字典。