我有一个包含三个功能的数据框
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
的一些数据我想获得medoids(聚类中心),并且在步骤2中,我想使用获得的medoids来对剩余数据进行聚类。因此,
# 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矩阵的输入格式引起的。如何将此矩阵转换为错误消息中指定的向量?
答案 0 :(得分:0)
请注意,在PAM中,聚类中心是一个观察点,即您可以获得4个观察值,每个观察值都是一个聚类中心。 Demonstration of PAM。
因此,如果您想尝试使用相同的中心,您需要找到最接近观察点的观测值,这些观测值是您列车的中心。
答案 1 :(得分:0)
初始medoids参数需要数据集中点的索引号。所以42,17
意味着使用对象42和17作为初始中间体。
通过medoids的定义,你可以仅使用数据集中的点作为medoids,不其他向量!
群集无人监督。无需在训练/测试中分割您的数据,因为在无监督学习中没有标签可以适应。