我正在尝试找出如何使群集的SD获得我的k均值群集分析。 我做了k均值并得到了几个输出,其中之一是我认为是均值的“中心”。我需要所有这些中心的标准差才能显示我的数据,但我不知道如何获取它们?
ref.getDownloadUrl().addOnSuccessListener(url -> {
...
});
我尝试了简单的#kmeans
resultspoorT0t <- kmeans(poor_T0v, 3)
resultspoorT0t[["centers"]]
ALH BCF LIN VAP VCL VSL
1 5.130483 12.66909 40.14618 69.78680 146.97313 55.51221
2 3.098673 10.11618 34.38605 29.20927 69.74657 22.70321
3 7.212529 12.98836 41.71680 111.67745 229.73901 92.12502
函数,但是只有一个SD,每个群集的每个参数都需要SD
sd()
答案 0 :(得分:0)
假设您需要一个简单的圆形SD。因此,您需要计算从群集到群集中心的每个点的距离。它是欧几里得距离sqrt(sum(((x_mean-x)** 2 +(y_mean-y)** 2 ...))。然后,您可以为每个群集计算距离SD。代码是:
# Some fake data
set.seed(2222)
df <- matrix(rnorm(6 * 50), 50)
colnames(df) <- letters[1:6]
df <- as.data.frame(df)
k_res <- kmeans(df, 3)
# SD = sd of points distances from cluster center
clusters <- k_res$cluster
centers <- k_res$centers
res_sd <- NULL
for (cl in c(unique(clusters))){
df_part <- df[clusters == cl, ]
# Calculate Euclidian distance between
# each point (row) and cluster center.
dist <- sqrt(rowSums((df_part - centers[cl, ]) ** 2))
# Calculate SD for each column (i.e. SD along each axis)
sd_s <- apply(df_part - centers[cl, ], 2, sd)
names(sd_s) <- paste("sd_", colnames(df_part), sep = "")
res_part <- c(cluster = cl, total_sd = sd(dist), sd_s)
res_sd <- rbind(res_sd, res_part)
}
res_sd <- as.data.frame(res_sd)
rownames(res_sd) <- res_sd$cluster