【发布时间】:2017-10-10 00:36:50
【问题描述】:
我有一个具有三个特征的数据框
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 矩阵的输入格式引起的。如何将此矩阵转换为错误消息中指定的向量?
【问题讨论】:
-
coredata是什么?恕我直言,使用来自一个数据集的 medoïds 作为另一个数据集的起点似乎没有意义,因为这些 medoïds 只是特定的观察结果。medoid=参数只需要 medoïd 搜索的起始值的行号。 -
抱歉,打错了。我只有一个数据集。在这里,我使用它的一部分来获取初始集群。稍后,我想检查后续数据点相对于初始集群的变化情况。
-
我不确定您的程序是否有意义。您似乎将监督学习方法的训练阶段插入到聚类中,这是一种无监督方法。但是,您可以通过从初始 data.frame 中提取 medoid 并将它们绑定到新的 data.frame 来实现您想要的结果。然后使用它们的行位置作为
pam中的 medoid 参数的值。
标签: r machine-learning cluster-analysis