k表示聚类样本数据

时间:2012-12-22 16:01:06

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

我正在编写实现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的距离是多少?

1 个答案:

答案 0 :(得分:3)

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

  1. 选择k点作为初始质心(因此,K - *);
  2. 计算从所有顶点到k centroids选择的距离;
  3. 将每个顶点分配给最近的质心;
  4. 通过生成属于质心的所有顶点之间的平均值来重新计算质心的位置(因此,k-means,每个k质心的一个平均值计算);
  5. 转到步骤2并在步骤3中停止,没有顶点被分配到另一个质心 - 或直到您的错误条件得到满足。
  6. 在你的情况下,由于你有一个无向图,你最好考虑边距来生成每个顶点的坐标,然后应用算法。

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

    对于无向图:

    [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算法,并将结果表格视为您的距离表。

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

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