【问题标题】:k means clustering sample datak 表示聚类样本数据
【发布时间】:2012-12-09 20:49:14
【问题描述】:

我正在编写程序来实现 k-means 聚类。

consider a simple input with 4 vertices a,b,c and d with following edge costs

[vertex1] [vertex2] [edge cost]
a b 1
a c 2
a d 3
b d 4
c d 5

现在我需要让程序运行,直到我得到 2 个集群。

我的疑问是,在计算最小距离的第一步是 a->b(边缘成本 1)。现在我应该将 ab 视为单个集群。如果是这样,ab到c和d的距离是多少?

【问题讨论】:

  • 您可能需要考虑使用 k-Harmonic Means(k-Means 的一种变体,利用不同的性能函数),因为它对聚类中心的初始选择不太敏感。

标签: algorithm cluster-analysis graph-algorithm k-means


【解决方案1】:

K-means 算法的工作原理如下:

  1. 选择k个点作为初始质心(因此,K-*);
  2. 计算所有顶点到所选k个质心的距离;
  3. 将每个顶点分配给最近的质心;
  4. 通过生成属于质心的所有顶点之间的平均值来重新计算质心的位置(因此,k-means,对 k 个质心中的每一个质心进行一次平均计算);
  5. 转到步骤 2 并在步骤 3 中没有顶点分配给另一个质心时停止 - 或者直到您的错误条件得到满足。

在您的情况下,由于您有一个无向图,因此最好考虑边缘距离来生成每个顶点的坐标,然后应用该算法。

如果您不想执行此初始过程,您可以计算从一个顶点到所有其他可到达顶点的距离,但您必须在每次迭代时都执行此操作——这是非常不必要的开销。

对于您的无向图:

[vertex1] [vertex2] [edge cost]
a b 1
a c 2
a d 3
b d 4
c d 5

距离表类似于:

     a    b    c    d
a    0    1    2    3
b    1    0   (1)   4
c    2   (1)   0    5
d    3    4    5    0

(1) - b to c = (b to a, a to c) = 3

如果这应该是您的表格,只需在您的图表上应用 Dijkstra 算法,对于每个顶点,然后将结果表格视为您的距离表格。

该表将具有最小距离,但是,如果您有任何其他策略来计算它,则完全由您决定如何计算它。

另请注意,如果您的图形是有向图,则矩阵将不是对称的,在这种情况下是对称的。

【讨论】:

  • 如果我计算每个顶点到其他顶点的距离并找到最小值。考虑它的 (a,d) 。那么我应该将 a,d 作为单个集群。那么 c 到 a,d 和 b 到 a,d.. 的距离是多少(请参见我上面的示例)
  • @srinath 这不是简单地选择最小距离; k-means 正如我所描述的那样工作:您选择 k 个质心位置,将每个顶点分配给最近的质心,然后使用分配给该质心的每个顶点的坐标的平均值重新计算质心的位置。之后,你重新计算每个顶点到新质心位置的距离——重复这个过程直到它收敛。
猜你喜欢
  • 2014-10-28
  • 1970-01-01
  • 1970-01-01
  • 2016-08-12
  • 2016-09-06
  • 2013-03-14
  • 2017-10-15
  • 2011-12-22
相关资源
最近更新 更多