我对K-medoids的理解是从现有点中随机挑选质心。通过将剩余点除以最接近的质心来计算聚类。计算误差(绝对距离)。
a)如何挑选新的质心?从示例接缝中随机挑选它们?然后再次计算误差以查看这些新质心是好还是坏。
b)你怎么知道你需要停止挑选新的质心?
答案 0 :(得分:2)
值得阅读k-medoid算法的wikipedia page。您在第一步中随机选择的k
数据点中的n
medoid是正确的。
通过在循环中交换每个medoid m
和每个非medoid o
并再次计算距离来挑选新的medoids。如果成本增加,则撤消交换。
如果没有完整迭代的交换,算法就会停止。
答案 1 :(得分:1)
选择初始中间体的过程相当复杂。许多人似乎只是使用随机初始中心。
在此之后,k medoids总是考虑用一个非中间体替换其中一个中间体的每个可能的变化。然后应用最佳的此类更改,如果它改善了结果。如果无法进一步改进,算法将停止。
不要依赖模糊的描述。阅读原始出版物。
答案 2 :(得分:1)
在回答关于k型蛋白的简要信息之前,我需要在前两个步骤中进行说明,而后两个步骤将回答您的问题。
1)k质心的第一步是从数据集中随机选择k质心/质心。假设您的数据集包含“ n”个点,那么将从这些“ n”个点中选择这些k- medoids。现在,您可以随机选择它们,也可以使用k-means ++中使用的智能初始化之类的方法。
2)第二步是赋值步骤,其中您获取数据集中的每个点,并找到它们与这些k型中心点的距离,找到一个最小点,然后将此数据点添加到对应于C_j重心的S_j上(如我们有k个质心C_1,C_2,....,C_k)。
3)算法的第三步是更新步骤,它将回答有关初始化后如何选择新质心的问题。我将通过一个示例来说明更新步骤,以使其更加清晰。 假设您的数据集中有十个点 (x_1,x_2,x_3,x_4,x_5,x_6,x_7,x_8,x_9,x_10)。现在假设我们的问题是2聚类,因此我们首先从这10个点中随机选择2个质心/质心,然后说这2个质心为(x_2,x_5)。分配步骤将保持不变。现在,在更新中,您将选择不属于类固醇的那些点(与x_2,x_5分开的点),然后再次重复分配和更新步骤以找到损失,该损失是x_i与类固醇之间的距离的平方。现在,您将比较使用medoid x_2发现的损失和通过非medoid点发现的损失。如果减少了损失,则将x_2点与减少了损失的任何非质体点交换。如果损失没有减少,则将x_2保留为您的质体,并且不会交换。 因此,在更新步骤中可能会有很多交换,这也使得该算法的计算量很高。
4)最后一步将回答您的第二个问题,即何时停止采集新质心。将质心/质心点的损失与非质心计算的损失进行比较时,如果差异可以忽略不计,则可以停止并保持质心点仅作为质心,但是如果损失很大,则将必须进行交换,直到损失减少为止。
我希望能回答您的问题。