我有一个包含三个特征的数据框,如下所示:
library(cluster)df <- data.frame(f1=rnorm(480,30,1), f2=rnorm(480,40,0.5), f3=rnorm(480,50, 2))
现在,我想要使用K-medoids
方法分两步进行聚类。第一步,使用df
中的一些数据获取中心点(聚类中心),第二步,使用第一步获得的中心点对剩余数据进行聚类。具体步骤如下:
# 使用部分数据查找中心点sample_data <- df[1:240,]sample_data <- scale(sample_data) # 标准化特征clus_res1 <- pam(sample_data,k = 4,diss=FALSE)# 现在使用上述聚类得到的中心点进行聚类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
显然,这个错误信息是由于中心点矩阵的输入格式引起的。我如何将这个矩阵转换为错误信息中指定的向量格式呢?
回答:
初始中心点参数需要你数据集中点的索引号。例如,42,17
表示使用对象42和17作为初始中心点。
根据中心点的定义,你只能使用数据集中的点作为中心点,不能使用其他向量!
聚类是无监督的学习。无需将数据分割成训练集和测试集,因为在无监督学习中没有标签需要拟合过度。