【问题标题】:NA in clustering functions (kmeans, pam, clara). How to associate clusters to original data?聚类函数中的 NA(kmeans、pam、clara)。如何将集群与原始数据相关联?
【发布时间】:2015-02-17 04:57:29
【问题描述】:

我需要对一些数据进行聚类,我用 R 尝试了 kmeanspamclara

问题是我的数据在数据框的列中,并且包含 NA。

我使用na.omit() 来获取我的集群。但是,我怎样才能将它们与原始数据相关联?这些函数返回一个没有 NA 的整数向量,并且它们不保留有关原始位置的任何信息。

是否有一种巧妙的方法可以将集群与数据框中的原始观察结果相关联? (或者在存在 NA 时智能地执行聚类的方法?)

谢谢

【问题讨论】:

  • 你给你的行命名了吗?我认为 kmeans 和 pam (至少)保留了行名,不是吗?
  • 我这样做:kmeans(na.omit(x), k)
  • 簇向量(例如clus$cluster)对应于x的非NA元素。所以clus$cluster的元素对应的x的索引是which(!is.na(x))

标签: r cluster-analysis k-means na missing-data


【解决方案1】:

kmeans 的输出对应于作为参数x 传递的对象的元素。在您的情况下,您省略了NA 元素,因此$cluster 表示na.omit(x) 的每个元素所属的集群。

这是一个简单的例子:

d <- data.frame(x=runif(100), cluster=NA)
d$x[sample(100, 10)] <- NA
clus <- kmeans(na.omit(d$x), 5)

d$cluster[which(!is.na(d$x))] <- clus$cluster

在下图中,颜色表示每个点所属的集群。

plot(d$x, bg=d$cluster, pch=21)

【讨论】:

    【解决方案2】:

    此代码适用于我,从包含一整行 NA 的矩阵开始:

    DF=matrix(rnorm(100), ncol=10)
    row.names(DF) <- paste("r", 1:10, sep="")
    DF[3,]<-NA
    res <- kmeans(na.omit(DF), 3)$cluster
    res
    DF=cbind(DF, 'clus'=NA)
    DF[names(res),][,11] <- res
    print(DF[,11])
    

    【讨论】:

      猜你喜欢
      • 2013-01-16
      • 2018-10-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-01
      • 2019-01-23
      • 2018-02-05
      相关资源
      最近更新 更多