K-Medoid聚类算法迭代异常及结果确认求助
K-Medoid聚类算法迭代异常及结果确认求助
各位好,我现在在做k-medoids聚类的练习,遇到了迭代循环的问题,想请大家帮忙看看哪里出错了。
我的问题背景:用k-medoids算法对数据集$S$进行聚类,设置$k=2$,初始随机选取的medoids是${(1, 2), (2, 1)}$。数据集$S$如下(每行对应样本$x_1$到$x_7$):
| 样本 | $x_1$ | $x_2$ |
|---|---|---|
| $x_1$ | 1 | 2 |
| $x_2$ | 2 | 1 |
| $x_3$ | 1 | 3 |
| $x_4$ | 5 | 4 |
| $x_5$ | 6 | 3 |
| $x_6$ | 7 | 2 |
| $x_7$ | 6 | 1 |
我觉得自己的步骤是对的,但结果好像有问题,具体过程如下:
第一次迭代:初始聚类
- 计算每个样本到两个初始medoid的欧氏距离:
- 到medoid $(1,2)$的距离(对应$x_1$到$x_7$):
0, 1.41, 1, 4.47, 5.10, 6, 5.10 - 到medoid $(2,1)$的距离(对应$x_1$到$x_7$):
1.41, 0, 2.24, 4.24, 4.47, 5.10, 4
- 到medoid $(1,2)$的距离(对应$x_1$到$x_7$):
- 根据最小距离原则分配聚类,得到结果:
- 聚类A:${(x_1,x_3)}$
- 聚类B:${(x_2,x_4,x_5,x_6,x_7)}$
迭代时出现的循环问题
接下来我尝试更新medoid:在聚类A中选择能使簇内总距离最小的点作为新medoid,也就是$x_3=(1,3)$。然后重新计算所有样本到两个medoid($(1,3)$和$(2,1)$)的距离:
- 到$(1,3)$的距离:
1, 2.23, 0, 4.12, 5, 6.10, 5.40 - 到$(2,1)$的距离:
1.41, 0, 2.24, 4.24, 4.47, 5.10, 4
这次得到的聚类结果变成了:
- 聚类A:${(x_1,x_3,x_4)}$
- 聚类B:${(x_2,x_5,x_6,x_7)}$
如果我继续迭代,又会把聚类A的medoid换回$x_1=(1,2)$,这样就陷入了循环。我肯定哪里操作错了,因为我认为最终的聚类结果应该是第一次得到的${(x_1,x_3),(x_2,x_4,x_5,x_6,x_7)}$,想请教大家我哪里出问题了?
备注:内容来源于stack exchange,提问作者ClareB
相关产品推荐
相关产品推荐

