如何计算病房层次聚类的平方和内和平方和之间的总数?
How to calculate total within sum of squares and between sum of squares for ward hierarchical clustering?
对于下面的病房聚类,我将如何计算平方和内和平方和之间的总数?我在网上看了几个资源,但都没有成功。我遇到了 css 包,但它与我的 R 版本不兼容,即 4.1.2
hier_ward <- hclust(distance_matrix, method='ward')
cut_ward <- cutree(hier_ward, k=6)
这里是使用R中包含的iris
数据集的示例。加载数据然后计算聚类分析,不包括包含字符数据的第5列。
data(iris)
iris.dist <- dist(iris[, -5])
iris.hclust <- hclust(iris.dist, method="ward.D")
iris.6 <- cutree(iris.hclust, k=6)
可以使用 scale()
函数计算总平方和,使值以平均值为中心:
TSS <- sum(colSums(scale(iris[, -5], scale=FALSE)^2))
TSS
# [1] 681.3706
然后我们将数据分成 iris.6
定义的集群,并计算每组的平方和:
groups <- split(iris[, -5], iris.6)
WSS <- sapply(groups, function(x) sum(colSums(scale(x, scale=FALSE)^2)))
WSS
# 1 2 3 4 5 6
# 5.814375 2.331667 12.708947 8.942308 5.567500 4.655000
# sum(WSS)
# [1] 40.0198
对于下面的病房聚类,我将如何计算平方和内和平方和之间的总数?我在网上看了几个资源,但都没有成功。我遇到了 css 包,但它与我的 R 版本不兼容,即 4.1.2
hier_ward <- hclust(distance_matrix, method='ward')
cut_ward <- cutree(hier_ward, k=6)
这里是使用R中包含的iris
数据集的示例。加载数据然后计算聚类分析,不包括包含字符数据的第5列。
data(iris)
iris.dist <- dist(iris[, -5])
iris.hclust <- hclust(iris.dist, method="ward.D")
iris.6 <- cutree(iris.hclust, k=6)
可以使用 scale()
函数计算总平方和,使值以平均值为中心:
TSS <- sum(colSums(scale(iris[, -5], scale=FALSE)^2))
TSS
# [1] 681.3706
然后我们将数据分成 iris.6
定义的集群,并计算每组的平方和:
groups <- split(iris[, -5], iris.6)
WSS <- sapply(groups, function(x) sum(colSums(scale(x, scale=FALSE)^2)))
WSS
# 1 2 3 4 5 6
# 5.814375 2.331667 12.708947 8.942308 5.567500 4.655000
# sum(WSS)
# [1] 40.0198