使用R中的中心(聚类中心)的聚类数据

时间:2017-05-11 06:33:43

标签: r machine-learning cluster-analysis

我有一个包含三个功能的数据框

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矩阵的输入格式引起的。如何将此矩阵转换为错误消息中指定的向量?

2 个答案:

答案 0 :(得分:0)

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

因此,如果您想尝试使用相同的中心,您需要找到最接近观察点的观测值,这些观测值是您列车的中心。

答案 1 :(得分:0)

初始medoids参数需要数据集中点的索引号。所以42,17意味着使用对象42和17作为初始中间体。

通过medoids的定义,你可以使用数据集中的点作为medoids,其他向量!

群集无人监督。无需在训练/测试中分割您的数据,因为在无监督学习中没有标签可以适应。