r中的k-均值聚类分析:只设置一个中心,其他中心有待计算
我想用k-means将数据点分为三组。我知道这三组中的一组的中心,但不知道其他两组的中心。因此,我想预先设置一个组的中心,并相应地对算法进行聚类,使该中心保持不变。然而,我不确定是否以及如何使用R中的k-means包实现这一点 如果我在没有预先设置中心的情况下进行聚类,那么我所知道的组的中心就会转移到其他聚类中心的方向,这可能导致错误分类 谢谢你的意见r中的k-均值聚类分析:只设置一个中心,其他中心有待计算,r,center,k-means,R,Center,K Means,我想用k-means将数据点分为三组。我知道这三组中的一组的中心,但不知道其他两组的中心。因此,我想预先设置一个组的中心,并相应地对算法进行聚类,使该中心保持不变。然而,我不确定是否以及如何使用R中的k-means包实现这一点 如果我在没有预先设置中心的情况下进行聚类,那么我所知道的组的中心就会转移到其他聚类中心的方向,这可能导致错误分类 谢谢你的意见 朱利安当然,我们可以制定自己的初始化例程。例如,我们可以这样修改Forgy方法 # modified Forgy set.seed(1) c1
朱利安当然,我们可以制定自己的初始化例程。例如,我们可以这样修改Forgy方法
# modified Forgy
set.seed(1)
c1 <- c(7.8, 4.3, 6.8, 2.4)
cn <- rbind(c1, iris[sample(nrow(iris), 2),-5])
kmeans(iris[,-5], cn)$centers
# Sepal.Length Sepal.Width Petal.Length Petal.Width
# 1 6.684427 2.626896 6.512092 2.09042298
# 2 5.078494 3.646351 1.485264 0.05223007
# 3 6.012102 2.553765 3.869828 1.66717281
可能重复的,你可以添加一个非常感谢这个解决方案。我可以将其应用于我的数据,从其中一个组的0/0中心开始。
# modified Forgy with nstart
set.seed(1)
data(iris)
m <- iris[,-5]
# initializing with the actual centroid of the first species
c1 <- colMeans(m[as.integer(iris[,5]) == 1,])
c1
# Sepal.Length Sepal.Width Petal.Length Petal.Width
# 5.006 3.428 1.462 0.246
kf <- function(x, clust, nc) {
cn <- rbind(clust, x[sample(nrow(x), nc-1),])
kmeans(x, cn)
}
l <- replicate(100, kf(m, c1, 3), simplify=FALSE)
bss <- sapply(l, '[[', "betweenss")
table(signif(bss, 4))
#
# 538.6 602.5
# 37 63
kmo <- l[[which.max(bss)]]
kmo$centers
# Sepal.Length Sepal.Width Petal.Length Petal.Width
# 1 5.006000 3.428000 1.462000 0.246000
# 2 5.901613 2.748387 4.393548 1.433871
# 3 6.850000 3.073684 5.742105 2.071053