首页 > 解决方案 > 是否可以根据注释而不是聚类结果为 kmeans 结果着色?

问题描述

我已经标记了数据,我想估计聚类结果是否与这些标签一致。在层次聚类中,我可以使用:

pheatmap(data,annotation_col=metadata,annotation_row=metadata,annotation_colors=anno_colors)

是否有可能也有kmeans结果?我试过fviz_cluster了,但我找不到如何根据注释而不是集群为每个点着色。

标签: rannotationscluster-analysis

解决方案


我没有找到如何使用 fviz_cluster 在一个图中将已知标签与 kmeans 聚类结果进行比较。相反,我根据它们的标签为点着色,并根据它们的簇来塑造这些点。

    iris.scaled <- scale(iris[, 1:4])
    pc <- prcomp(iris.scaled)
    km <- kmeans(iris.scaled, 3, nstart = 100)
    pca.var <- pc$sdev^2
    pca.var.per <- round(pca.var/sum(pca.var)*100, 1)
    # Color according to iris$Species
    typeSp<-as.vector(iris$Species)
    colvec<-typeSp
    colvec[is.element(typeSp,"setosa")] = "red"
    colvec[is.element(typeSp,"versicolor")] = "blue"
    colvec[is.element(typeSp,"virginica")] = "magenta"
    # Shape according to kmeans cluster
    typeCl<-km$cluster
    pchvec<-1:length(colvec)
    pchvec[is.element(typeCl,1)] = 0
    pchvec[is.element(typeCl,2)] = 19 
    pchvec[is.element(typeCl,3)] = 17
    plot(pc$x[,1], pc$x[,2], col=colvec, pch=pchvec, 
         xlab = paste("PC1 (",pca.var.per[1],"%)"),  
         ylab = paste("PC2 (",pca.var.per[2],"%)"), 
         main="Compare known label (colors) to Kmeans cluster (shapes)")
    legend("topright",legend=c("setosa","versicolor","virginica"),
           col=c("blue","red","magenta"),
           cex=0.9, pch=c(8,8,8))

推荐阅读