在R语言中做出CH-Index的变化曲线,k=2->10
时间: 2024-05-15 22:19:48 浏览: 163
首先,需要定义计算CH-Index的函数:
```{r}
chIndex <- function(data, centers) {
# 计算聚类中心到各个点的欧氏距离
dists <- dist(rbind(data, centers))
clusterIds <- cutree(dists, nrow(data))
# 计算聚类内离差平方和
ssw <- sum(dist(data[clusterIds == 1, ], centers[1, ])^2)
for (i in 2:nrow(centers)) {
ssw <- ssw + sum(dist(data[clusterIds == i, ], centers[i, ])^2)
}
# 计算聚类间离差平方和
ssb <- sum(colSums((centers - colMeans(data))^2))
# 计算CH-Index
k <- nrow(centers)
((ssb/(k-1))/(ssw/(nrow(data)-k)))
}
```
接下来,我们使用iris数据集进行聚类,并绘制CH-Index的变化曲线:
```{r}
data(iris)
x <- iris[, -5]
chIndexVec <- c()
for (k in 2:10) {
km <- kmeans(x, k)
chIndexVec <- c(chIndexVec, chIndex(x, km$centers))
}
plot(2:10, chIndexVec, type="l", xlab="Number of clusters", ylab="CH-Index")
```
运行上述代码,即可得到CH-Index的变化曲线。
阅读全文