我正在编写实现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的距离是多少?
答案 0 :(得分:3)
K-means算法的工作原理如下:
2
并在步骤3
中停止,没有顶点被分配到另一个质心 - 或直到您的错误条件得到满足。在你的情况下,由于你有一个无向图,你最好考虑边距来生成每个顶点的坐标,然后应用算法。
如果您不想执行此初始过程,您可以计算从顶点到所有其他可到达顶点的距离,但是您必须为每次迭代执行此操作 - 这是非常不必要的开销。 / 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算法,并将结果表格视为您的距离表。
该表具有最小距离,但是,如果您有任何其他策略来计算它,那完全取决于您如何计算它。
另请注意,如果您的图表是定向的,则在这种情况下矩阵将不是对称的。