自组织映射

Self-Organizing Maps

我有一个关于自组织映射的问题:

但首先,这是我的实现方法:

som 神经元存储在一个基本数组中。每个神经元由一个向量(输入神经元大小的另一个数组)组成,双精度值被初始化为一个随机值。

据我对算法的理解,这实际上是我实现它所需要的全部。

因此,对于训练,我随机选择训练数据样本,并使用样本值和神经元权重的欧几里德距离计算 BMU。

然后我根据邻域函数和学习率更新它的权重和它范围内的所有其他神经元。

然后,我降低邻域函数和学习率。

直到达到固定的迭代次数为止。

我现在的问题是:训练后如何确定聚类?到目前为止,我的方法是提供一个新的输入向量并计算它与 BMU 之间的最小欧几里德距离。但这对我来说似乎有点天真。我确定我错过了什么。

没有唯一正确的方法可以做到这一点。正如您所指出的,找到 BMU 是其中之一,如果您只想找到最相似的集群,那么找到 BMU 是唯一有意义的。

如果你想重建你的输入向量,返回 BMU 原型也可以,但可能不是很精确(它相当于最近邻规则或 1NN)。然后你需要在神经元之间进行插值以找到更好的重建。这可以通过按与它们到输入向量的距离成反比的方式对每个神经元进行加权,然后计算加权平均值(这相当于加权 KNN)来完成。您还可以将此插值仅限于 BMU 的邻居,这将工作得更快并且可能会提供更好的结果(这将加权 5NN)。此处使用了此技术:The Continuous Interpolating Self-organizing Map.

您可以在此处查看和试验这些不同的选项:http://www.inf.ufrgs.br/~rcpinto/itm/(不是 SOM,而是近亲)。单击 "Apply" 使用重建的向量对曲线进行回归,然后选中 "Draw Regression" 并尝试不同的选项。

顺便说一句,您对实现的描述是正确的。

现在一种非常常见的方法是软子空间聚类,其中添加特征权重以找到最相关的特征。您可以使用这些权重来提高性能并使用欧氏距离改进 BMU 计算。