我对自组织地图有疑问:
但首先,我的方法是实施一个:
som神经元存储在基本数组中。每个神经元由双值的向量(输入神经元大小的另一个阵列)组成,其被初始化为随机值。
据我了解算法,实际上我只需要实现它。
因此,对于训练,我随机选择一个训练数据样本,使用欧几里德距离的样本值和神经元权重来计算BMU。
然后我根据邻域函数和学习率更新它的权重和其范围内的所有其他神经元。
然后,我减少邻域功能和学习率。
这一直到完成固定的迭代次数。
我现在的问题是:如何在培训结束后确定群集?到目前为止,我的方法是提出一个新的输入向量并计算它与BMU之间的最小欧几里德距离。但这对我来说似乎有些天真。我确信我错过了什么。
答案 0 :(得分:3)
没有一种正确的方法可以做到这一点。正如您所指出的,找到BMU是其中之一,也是唯一一个有意义的,如果您只想找到最相似的集群。
如果要重建输入向量,返回BMU原型也可以,但可能不是很精确(它等同于最近邻规则或1NN)。然后你需要在神经元之间进行插值以找到更好的重建。这可以通过将每个神经元加权与它们到输入向量的距离成反比,然后计算加权平均值(这相当于加权KNN)来完成。您也可以仅将此插值限制为BMU的邻居,这将更快地工作并且可以提供更好的结果(这将是加权5NN)。这里使用了这种技术:The Continuous Interpolating Self-organizing Map。
您可以在此处查看和试验这些不同的选项:http://www.inf.ufrgs.br/~rcpinto/itm/(不是SOM,而是近亲)。单击“应用”以使用重建的向量对曲线进行回归,然后选中“绘制回归”并尝试不同的选项。
顺便说一句,您的实施说明是正确的。
答案 1 :(得分:1)
现在很常见的方法是软子空间聚类,其中添加了特征权重以找到最相关的特征。您可以使用这些权重来提高性能并改善欧几里德距离的BMU计算。