Answers:
k-medoid基于medoids(属于数据集的一个点),其计算方法是最小化点与所选质心之间的绝对距离,而不是最小化平方距离。结果,它比k均值对噪声和离群值更鲁棒。
这是一个简单的,人为设计的示例,其中包含2个簇(忽略反转的颜色)
如您所见,(每组k均值的)质心和质心略有不同。另外您还应注意,由于随机起点和最小化算法的性质,每次运行这些算法时,您将获得略有不同的结果。这是另一次运行:
这是代码:
library(cluster)
x <- rbind(matrix(rnorm(100, mean = 0.5, sd = 4.5), ncol = 2),
matrix(rnorm(100, mean = 0.5, sd = 0.1), ncol = 2))
colnames(x) <- c("x", "y")
# using 2 clusters because we know the data comes from two groups
cl <- kmeans(x, 2)
kclus <- pam(x,2)
par(mfrow=c(1,2))
plot(x, col = kclus$clustering, main="Kmedoids Cluster")
points(kclus$medoids, col = 1:3, pch = 10, cex = 4)
plot(x, col = cl$cluster, main="Kmeans Cluster")
points(cl$centers, col = 1:3, pch = 10, cex = 4)
pam
,默认情况下,上面使用的方法(R中K形参的示例实现)默认情况下使用欧几里得距离作为度量。K均值始终使用平方的欧几里得。K-medoids中的medoids是从聚类元素中选择的,而不是像K-means中的质心一样从整个点空间中选择的。
k均值和k均值算法都将数据集分为k组。而且,他们都试图最小化同一聚类的点与作为该聚类中心的特定点之间的距离。与k-means算法相反,k-medoids算法选择点作为属于dastaset的中心。k-medoids聚类算法最常见的实现方法是围绕Medoids进行分区(PAM)算法。PAM算法使用贪婪搜索,可能找不到全局最优解。相较于质心,质心对离群值的鲁棒性更高,但对于高维数据,它们需要更多的计算。