【问题标题】:Find connected components in a graph in MATLAB在 MATLAB 中查找图中的连通分量
【发布时间】:2011-06-01 20:05:34
【问题描述】:

我有许多 3D 数据点,我希望在此图中找到“连接的组件”。这是形成具有以下特性的集群的地方​​:

  • 每个簇包含点,所有这些点与簇中的另一个点的距离最大。
  • 两个不同集群中的所有点彼此之间的距离至少。

这个问题在问答here中有描述。

FEX 上是否有内置或可用的这种算法的 MATLAB 实现?简单的搜索并没有抛出任何有用的东西。

【问题讨论】:

标签: matlab cluster-analysis


【解决方案1】:

也许在这种情况下可以应用基于密度的聚类算法。有关DBscan 算法的描述,请参阅此相关question

【讨论】:

  • 谢谢。这正是我想要的。
【解决方案2】:

我认为不可能在所有情况下都同时满足这两个条件。

如果您决定专注于第一个条件,您可以使用 Complete-Linkage 层次聚类,其中基于任意两点之间的最大距离合并点或点组。在 Matlab 中,这是在 CLUSTERDATA 中实现的(请参阅各个功能步骤的帮助)。

要计算您的集群索引,您需要运行

clusterIndex = clusterdata(coordiantes,maxDistance,'criterion','distance','linkage','complete','distance','euclidean')

如果您想简单地消除相距小于 minDistance 的不同集群的点,您可以在集群之间运行 pdist 以清理连接的组件。

【讨论】:

    【解决方案3】:

    k-means 或 k-medoid 算法在这种情况下可能有用。

    【讨论】:

    • 嗨,玛丽,欢迎来到 StackOverflow!通过提供一些链接,您可以使您的答案更有帮助。由于问题是专门针对 MATLAB 实现的,你知道你提出的算法吗?
    猜你喜欢
    • 2013-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-05
    • 1970-01-01
    相关资源
    最近更新 更多