gpt4 book ai didi

r - Kmeans 集群间和集群内排序

转载 作者:行者123 更新时间:2023-12-04 09:43:32 25 4
gpt4 key购买 nike

我想知道其他人在用 K-means 集群排序做什么。我正在制作热图(主要是 ChIP-Seq 数据)并使用自定义热图函数(基于 R 的内置热图函数)获得漂亮的数字。但是,我想要两个改进。第一个是根据递减的平均值对我的集群进行排序。例如,以下代码:

fit = kmeans(data, 8, iter.max=50, nstart=10)
d = data.frame(data, symbol)
d = data.frame(d, fit$cluster)
d = d[order(d$fit.cluster),]

给我一个在集群列上排序的 data.frame。对行进行排序以使 8 个集群按各自的方式排序的最佳方法是什么?

其次,您是否建议将每个集群内的行从最高平均值到最低值进行排序?这将对数据施加更有条理的外观,但可能会愚弄不谨慎的观察者推断出他可能不应该做的事情。如果你推荐这个,你会如何最有效地做到这一点?

最佳答案

不是您所问问题的确切答案,但也许您可能会考虑使用序列化而不是 k 均值聚类。这有点像排序而不是聚类,但一个最终结果是序列化数据的热图,这听起来类似于您使用 k-means 做的事情,然后是特定排序的热图。

有一个用于序列化的 R 包,名为 seriation它有一个小插图,你可以得到 directly from CRAN

一旦我准备了一个例子来尝试,我会回答 Q 的细节。

好的 - 根据您上面的评论给出正确的答案。首先是一些虚拟数据 - 3 个集群,每个集群有 10 个样本,分别针对 3 个变量。

set.seed(1)
dat <- data.frame(A = c(rnorm(10, 2), rnorm(10, -2), rnorm(10, -2)),
B = c(rnorm(10, 0), rnorm(10, 5), rnorm(10, -2)),
C = c(rnorm(10, 0), rnorm(10, 0), rnorm(10, -10)))

## randomise the rows
dat <- dat[sample(nrow(dat)),]
clus <- kmeans(scale(dat, scale = FALSE), centers = 3, iter.max = 50,
nstart = 10)

## means of n points in each cluster
mns <- sapply(split(dat, clus$cluster), function(x) mean(unlist(x)))

## order the data by cluster with clusters ordered by `mns`, low to high
dat2 <- do.call("rbind", split(dat, clus$cluster)[order(mns)])

## heatmaps
## original first, then reordered:
layout(matrix(1:2, ncol = 2))
image(1:3, 1:30, t(data.matrix(dat)), ylab = "Observations",
xlab = "Variables", xaxt = "n", main = "Original")
axis(1, at = 1:3)
image(1:3, 1:30, t(data.matrix(dat2)), ylab = "Observations",
xlab = "Variables", xaxt = "n", main = "Reordered")
axis(1, at = 1:3)
layout(1)

产量:

Original and reordered heatmaps

关于r - Kmeans 集群间和集群内排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4786665/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com