群集的SD(k均值)

时间:2019-02-19 18:14:30

标签: r cluster-computing k-means standard-deviation

我正在尝试找出如何使群集的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()

1 个答案:

答案 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