【问题标题】:Clustering objects with a distance matrix使用距离矩阵对对象进行聚类
【发布时间】:2014-05-15 02:55:06
【问题描述】:

假设有几个对象:o1, o2, o3...

还有一个距离/相异矩阵 D,其中包含每对对象的距离。

例如Dij 是 oi 和 oj 之间的距离/相异度。

如何将这些对象分组,以便:

每组中每对对象之间的距离小于预定义的阈值。

【问题讨论】:

  • 你知道组数吗?
  • @adrianN 我们可以假设组的数量。顺便说一句,根据我的调查,组/集群的数量是许多集群算法的一个很大的假设/障碍。
  • 集群会重叠吗?
  • @vefthym 不,应该没有重叠。

标签: algorithm


【解决方案1】:

这是我想做的:

  1. 形成一个图,其中两个点连接当且仅当距离不超过阈值。

  2. 在图中找到最大的点组,使得对于每个组,每个组成员都对每个其他组成员都有一条边。

问题在于步骤 (2) - 它是 the clique problem,并且是 NP 完全的。

你可以这样做:

  1. complete-linkage clustering 对点进行聚类,其中提到的第二种算法 CLINK 的成本为 O(N²)。

  2. 当形成的集群之间的距离超过阈值时停止算法,或者沿着树向下走,使集群成为边缘高于阈值且低于阈值的子树。

对于完全链接聚类,两个聚类之间的距离是任意两个点之间的最大距离,每个聚类一个,所以如果你将两个以这种方式形成的聚类以距离 d 连接起来形成一个合并聚类,每对合并后的聚类中的点之间的距离最大为 d。

由于我假设我没有在 O(N²) 时间内解决一个 NP 完全问题(这意味着 P = NP,证明/反证 is unlikely to be this easy),所以第二种方法不一定提供与第一个集群一样整洁 - 但我还没有彻底考虑过这一点,无法确切地知道权衡是什么。

【讨论】:

  • 我认为,与其只找到一个派系,不如找到一个最小派系覆盖。不幸的是,这并不容易。
【解决方案2】:

这是我的方法:

  1. 给定一个图 G,用Distance(a,b) < threshold 对任意 2 个顶点进行聚类,这是一个初始解\状态

  2. 通过优化合并增强\优化此解决方案

这种方法不是最优的,但它是完整的,并且时间复杂度低。

Time = T(Step 1) + T(Step 2)

T(Step 1) ~ V + V/2 + V/4 + .. + 1 = 2V = O(V)

T(Step 2) ~ 1/c V^2 = O(V^2)

Time ~ 2V + 1/c V^2 = O(V) + O((^2) = O(V^2)

【讨论】:

  • 请澄清什么是 V,什么是 c,什么是最佳合并,以获得更完整和更易于理解的答案。
  • @vefthym V 是顶点数,c 是一个常数,分析是理论上的,optimal merges 是一系列合并,可以最大限度地减少总体集群数量
【解决方案3】:

假设三角不等式成立(即 o1, o2, ... 是度量空间 (O,d) 的元素),那么 canopy clustering 应该可以工作。

树冠聚类的逻辑如下:

  1. 从初始集合 O 中选择一个随机对象 o。
  2. 为 o 创建一个新的树冠 Co 并将所有对象 i s.t 添加到 Co。 d(o,i)
  3. 从 O 中删除所有对象 j, s.t. d(o,j)
  4. 重复直到 O 为空。

T1 和 T2 是两个阈值,其中 T2 ol 的集群 Col 中的每一对对象 oiojd(oi,oj) <= d(ol, oi) + d(ol, oj) < 2T1

请注意,树冠集群会产生重叠集群,即一个对象可以放置在多个集群中。另请注意,生成的集群数量不是预定义的。

【讨论】:

    猜你喜欢
    • 2011-04-13
    • 2014-07-09
    • 1970-01-01
    • 2017-04-13
    • 2012-02-08
    • 2019-10-20
    • 2019-01-11
    • 2019-02-05
    • 2016-10-08
    相关资源
    最近更新 更多