在 R 中使用中心点(聚类中心)聚类数据

Cluster data using medoids (cluster centers) in R

我有一个具有三个特征的数据框

library(cluster)
df <- data.frame(f1=rnorm(480,30,1),
                 f2=rnorm(480,40,0.5),
                 f3=rnorm(480,50, 2))

现在,我想分两步使用 K-medoids 进行聚类。在第 1 步中,使用来自 df 的一些数据,我想获得中心点(聚类中心),在第 2 步中,我想使用获得的中心点对剩余数据进行聚类。因此,

# find medoids using some data 
sample_data <- df[1:240,]
sample_data <- scale(sample_data) # scaling features
clus_res1 <- pam(sample_data,k = 4,diss=FALSE)

# Now perform clustering using medoids obtained from above clustering
test_data <- df[241:480,]
test_data <- scale(test_data)
clus_res2 <- pam(test_data,k = 4,diss=FALSE,medoids=clus_res1$medoids)

使用此脚本,我收到一条错误消息

Error in pam(test_data, k = 4, diss = FALSE, medoids = clus_res1$medoids) : 
  'medoids' must be NULL or vector of 4 distinct indices in {1,2, .., n}, n=240

很明显报错是因为Medoid矩阵的输入格式。如何将此矩阵转换为错误消息中指定的向量?

请注意,在 PAM 中,聚类中心是一个观察值,即您得到 4 个观察值,每个观察值都是一个聚类中心。 Demonstration of PAM

所以如果你想尝试使用同一个中心,你需要找到最接近火车中心观察的观察。

初始 medoids 参数需要 index numbers 数据集中的点。所以42,17意味着使用对象42和17作为初始中心点。

根据中心点的定义,您可以使用数据集的点作为中心点,不能其他向量!

聚类是无监督的。无需在 training/test 中拆分数据,因为在无监督学习中没有标签可以过度拟合。