【问题标题】:Clustering through SOM通过 SOM 进行聚类
【发布时间】:2012-12-01 08:58:20
【问题描述】:

我有 71 个属性和 17 个实例的数据。我想将它们分为六个组或类。我试过newsom( data, [ 6 6 ] )

结果如下图所示。我无法弄清楚集群的位置以及如何以编程方式找到它们?


我阅读了所有有关 SOM 的论文,但始终无法弄清楚如何获取集群和这些集群中的数据?所以,在你回复我的问题时也请注明。

【问题讨论】:

  • 这并没有直接的帮助,但是选择自组织地图有什么理由吗?我一直觉得它不优雅、耗时,而且在少数情况下,我看到它(由与我一起工作的人)用于生成大部分无用的集群。
  • 也许你是对的,但它仍然不是集群的一种方式吗?如果没有,请提出其他方法。
  • 17 个实例并不多。我建议使用层次聚类,例如包括单连锁聚类和完全连锁聚类。这将使您能够处理数据,并且您可以使用生成的树将数据分成六个类。您也可以使用 k-means 并将 k 设置为 6。对于所有方法,您需要确保没有任何属性支配其他属性(除非这是您想要的);可能需要标准化。最后,对于某些类型的数据(例如时间过程),基于例如皮尔逊相关系数可能是合适的。

标签: matlab cluster-analysis som


【解决方案1】:

您必须仔细研究有关 newsom(当前已弃用)或 selforgmap 函数的返回结构的文档。在 IW 字段中,您可以找到 N*N 簇坐标。例如:

somnet = newsom( data, [ 6 6 ] )
my_clusters = somnet.IW;

myclusters 将有 N*N 行(在您的情况下为 6*6)和 M 列等于输入维度。就是这样。

【讨论】:

  • 非常感谢。 IW 给出每个数据的节点权重。对于我的数据,my_clusters 中有 36×71 的数据。所以,这些数据仍然没有显示集群。
  • 在这种情况下,权重是集群坐标。因此,您拥有的 36 行中的每一行都是代表集群中心的 71 维向量。
【解决方案2】:

由于您的实例与地图节点的比例很高,因此您的节点在最终地图中没有“赢得”实例,您可以使用这些“空”节点来分隔地图。在此处查看有关 som 集群的更多信息:Clustering of the Self−Organizing Map

请记住,SOM 是一种无监督的聚类方法,即您不定义聚类的数量,数据会告诉您这一点。

【讨论】:

  • 感谢您的回复。我知道 SOM 是一种无监督的聚类方法。问题是分组完成后我需要 4 或 6 个集群。不幸的是,kmeans 算法没有返回令人满意的结果。
  • @user1900559,如果您需要少量集群,您可以使用较小的地图 (2x3) 并将每个地图节点视为一个集群,但不建议使用 SOM。您还可以按照我引用的论文中的描述在 SOM 上实现层次聚类,然后您可以定义所需的最终聚类数量。
  • 谢谢。我尝试了层次聚类和k-means。问题是一些数据点从一个集群转移到另一个集群,具有不同的集群过程。
  • @user1900559 ,这是集群过程中的常见问题。不同的算法产生不同的结果。有聚类质量度量(谷歌它,你会发现很多信息)来评估你的结果并做出相应的选择。
猜你喜欢
  • 1970-01-01
  • 2018-08-13
  • 1970-01-01
  • 2017-07-01
  • 2023-04-07
  • 2012-06-13
  • 1970-01-01
  • 2012-04-27
  • 2012-10-01
相关资源
最近更新 更多