gpt4 book ai didi

R kmeans (stats) vs Kmeans (amap)

转载 作者:行者123 更新时间:2023-12-04 21:38:23 26 4
gpt4 key购买 nike

你好,stackoverflow 社区,

我在运行 kmeans (统计数据包)和 Kmeans (amap 包)在 Iris 数据集上。在这两种情况下,我使用相同的算法(Lloyd–Forgy)、相同的距离(欧几里得)、相同数量的初始随机集(50)、相同的最大迭代次数(1000),并且我测试相同的集合k 值(从 2 到 15)。我也对这两种情况使用相同的种子 (4358)。

我不明白为什么在这些条件下我会得到不同的 wss 曲线,特别是:使用 stats 包时的“肘部”比使用 amap 包时要少得多。

你能帮我理解为什么吗?非常感谢!

这里的代码:

# data load and scaling
newiris <- iris
newiris$Species <- NULL
newiris <- scale(newiris)

# using kmeans (stats)
wss1 <- (nrow(newiris)-1)*sum(apply(newiris,2,var))
for (i in 2:15) {
set.seed(4358)
wss1[i] <- sum(kmeans(newiris, centers=i, iter.max=1000, nstart=50,
algorithm="Lloyd")$withinss)
}

# using Kmeans (amap)
library(amap)
wss2 <- (nrow(newiris)-1)*sum(apply(newiris,2,var))
for (i in 2:15) {
set.seed(4358)
wss2[i] <- sum(Kmeans(newiris, centers=i, iter.max=1000, nstart=50,
method="euclidean")$withinss)
}

# plots
plot(1:15, wss1, type="b", xlab="Number of Clusters",
ylab="Within groups sum of squares", main="kmeans (stats package)")
plot(1:15, wss2, type="b", xlab="Number of Clusters",
ylab="Within groups sum of squares", main="Kmeans (amap package)")

编辑:
我已经通过电子邮件向 amap 包的作者发送了电子邮件,并会在收到回复时/如果我收到回复。
https://cran.r-project.org/web/packages/amap/index.html

最佳答案

amap 包的作者,更改了代码,并且 insidess 变量的值是方法应用的总和(例如欧几里得距离)。

解决这个问题的一种方法是,给定 Kmeans 函数 (amap) 的返回值,重新计算 inss 的值(误差平方和(SSE))。

这是我的建议:

# 使用 Kmeans (amap)

    library(amap)

wss2 <- (nrow(newiris)-1)*sum(apply(newiris,2,var))

for (i in 2:15) {

set.seed(4358)

ans.Kmeans <- Kmeans(newiris, centers=i, iter.max=1000, nstart=50, method="euclidean")

wss <- vector(mode = "numeric", length=i)

for (j in 1:i) {
km = as.matrix(newiris[which(ans.Kmeans$cluster %in% j),])

## average = as.matrix( t(apply(km,2,mean) ))
## wss[j] = sum( apply(km, 1, function(x) sum((x-average) ^ 2 )))
## or
wss[j] <- ( nrow(km)-1) * sum(apply(km,2,var))
}

wss2[i] = sum(wss)
}

笔记。这个包中的 pearson 方法在 0.8-14 版本上是错误的(小心!)。

根据此链接中的代码第 325 行:

https://github.com/cran/amap/blob/master/src/distance_T.inl

关于R kmeans (stats) vs Kmeans (amap),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32440454/

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