【问题标题】:Clustering in matlabmatlab中的聚类
【发布时间】:2014-03-26 18:27:36
【问题描述】:
我有一个 3d 盒子,里面有一些点 (1800)。
像这样:
现在我必须对这些点进行聚类,而 k-means 无法做到这一点,因为你现在不需要聚类的数量。另一个问题是盒子是周期性的。所以侧顶和侧底的点可以相互归属。就像这张图片:
左右是彼此的。
如何将这些具有特定距离的集群定义为阈值,并实现该框是周期性的(因此,当您是其中之一时,如果这些距离低于阈值,则一个轴的末端会查看开头)?
亲切的问候,
格伦
【问题讨论】:
标签:
matlab
cluster-computing
cluster-analysis
【解决方案1】:
关于聚类分析的维基百科文章将回答您的问题。
寻找基于密度的聚类算法,因为您的数据在我看来非常类似于基于密度的聚类的设计场景。
【解决方案2】:
嗯,首先,您确实可以使用 K-Means。当然你需要使用集群有效性索引(google Silhouette width index、Calinski-Harabasz index、Dunn's index等)。
如果出于其他原因您真的不想使用 K-Means,您可能希望使用分层聚类算法,例如 Ward 方法(维基百科中的描述)。您不需要先验地知道集群的数量(但是,您能否真正声称您正在创建一个分类而不能够回答最基本的问题:有多少分类单元?)。
您的盒子是周期性的这一事实提出了一个有趣的挑战。我在这里的第一个想法是解决问题的最佳方法不是更改距离度量(您可以这样做),而是通过转换数据(特征提取)。
你的盒子有 6 个面,但是因为它的周期性就像它有 3 个面一样。因此,左侧和右侧是“相同的”(顶部和底部,以及前后)。
用三个特征重新定义每个对象怎么样?每个特征都是对象与“三个”边之一之间的距离。
祝你好运!