【问题标题】:Cluster data using medoids (cluster centers) in R在 R 中使用 medoids(聚类中心)聚类数据
【发布时间】: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


【解决方案1】:

初始 medoids 参数需要索引号您的数据集中的点。所以42,17 表示使用对象 42 和 17 作为初始中心点。

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

集群是无监督的。无需在训练/测试中拆分数据,因为在无监督学习中没有过度拟合的标签。

【讨论】:

    【解决方案2】:

    请注意,在 PAM 中,聚类中心是一个观测值,也就是说,您会得到 4 个观测值,每个观测值都是一个聚类中心。 Demonstration of PAM

    因此,如果您想尝试使用同一个中心,您需要找到最接近您的火车中心的观察值的观察值。

    【讨论】:

      猜你喜欢
      • 2020-11-17
      • 2017-05-12
      • 1970-01-01
      • 2012-04-02
      • 2015-05-23
      • 2021-10-09
      • 2012-09-28
      • 2016-05-29
      • 2014-03-28
      相关资源
      最近更新 更多