k-medoids 如何选择新的质心?

k-medoids How are new centroids picked?

我对 K-medoids 的理解是质心是从现有点中随机选取的。通过将剩余的点除以最近的质心来计算聚类。计算误差(绝对距离)。

a) 如何选择新的质心?从示例接缝中可以看出它们是随机挑选的?并再次计算误差以查看这些新质心是更好还是更差。

b) 你怎么知道你需要停止选择新的质心?

k-medoid 算法的 wikipedia page 值得一读。你是对的, k 中心点来自 n 数据点,在第一步中随机选择。

通过在循环中交换每个中心点 m 和每个非中心点 o 并再次计算距离来选择新的中心点。如果成本增加,您将撤消交换。

如果完整迭代没有交换,算法将停止。

选择初始中心点的过程相当复杂。很多人似乎只是使用随机初始中心。

在这 k medoids 之后总是考虑 每一个可能的变化 用一个非 medoids 替换一个 medoids。然后应用最好的这种改变,如果它改善了结果。如果无法进一步改进,则算法停止。

不要依赖模糊的描述。阅读原始出版物。

在回答之前,需要简要介绍 k-medoids,我已在前两个步骤中说明,后两个步骤将回答您的问题。

1) k-medoids 的第一步是 k-centroids/medoids 是从你的数据集中随机挑选的。假设您的数据集包含 'n' 个点,那么这些 k-medoids 将从这些 'n' 个点中选择。现在您可以随机选择它们,也可以使用 k-means++ 中使用的智能初始化等方法。

2) 第二步是赋值步骤,其中你获取数据集中的每个点并找到它与这些点的距离 k-medoids 并找到最小的那个并将该数据点添加到集合 S_j 对应于 C_j 质心(因为我们有 k-centroids C_1,C_2,....,C_k)。

3) 算法的第三步是更新 step.This 将回答您关于新质心在初始化后如何选取的问题。我将用一个例子来解释更新步骤,以使其更清楚。 假设您的数据集中有十个点,它们是 (x_1,x_2,x_3,x_4,x_5,x_6,x_7,x_8,x_9,x_10).现在假设我们的问题是 2-cluster 问题,所以我们首先从这十个点中随机选择 2-centroids/medoids,假设这些 2-medoids 是 (x_2,x_5)。分配步骤将保持不变。现在在更新中,您将选择那些不是中心点的点(远离 x_2、x_5 的点)并再次重复分配和更新步骤以找到损失,即 [= 之间距离的平方=57=] 来自 medoids。现在您将比较使用 medoid x_2 和 non-medoid 点找到的损失。如果损失减少,那么你将把 x_2 点与任何减少 loss.If 点的 non-medoid 点交换,如果损失没有减少,那么你将保留 x_2 作为你的中心点和不会交换。 因此,在更新步骤中可能会有很多交换,这也使得该算法的计算量很大。

4) 最后一步将回答你的第二个问题,即什么时候应该停止选择新的质心。当您将 medoid/centroid 点的损失与 non-medoid 计算的损失进行比较时,如果差异可以忽略不计,您可以停止并保持中心点作为质心 only.But 如果损失非常重要,那么您将不得不执行交换直到损失减少。

我希望这能回答你的问题。