r语言 - kmeans 结果作为 Mclust 中的初始参数



我正在做高斯混合模型。我已经在数据集上完成了 kmeans,我想使用 R 中 em 算法的初始参数的均值、方差和大小。我发现参数是 3 个列表,我尝试做同样的事情,但它给了我以下错误:

array(x, c(length(x(, 1L( 中的错误, if (!is.null(names(x((( list(names(x(, : "数据"必须是向量类型,为"空">

我的代码

l <- kmeans(iris[,-5],centers=3)
pi <- l$size/length(iris[,1])
my <- t(l$centers)
sig <- vector("list", 3)
new <- as.data.frame(cbind(iris[,-5],l$cluster))
for (i in 1:3) {
  subdata<-subset(new[,1:4],new[,5]==i); 
  sig[[i]]<-cov(subdata)
}
par <- vector("list",3)
par[[1]] <- pi; par[[2]] <- my; par[[3]] <- sig
kk <- em(modelName = msEst$modelName, data = iris[,-5],parameters = par)

有人可以告诉我应该如何将 kmeans 结果分配为初始参数吗?

以下是您似乎在追求什么的快速示例。您要做的主要事情是以正确的形式获取parameters参数。滴答声位与variance列表有关。如果您使用 mclustVariance 函数,对此有一些帮助。

library(mclust)
g <- 3
dat <- iris[, -5]
p <- ncol(dat)
n <- nrow(dat)
k_fit <- kmeans(dat, centers=g)
par <- vector("list", g)
par$pro <- k_fit$size/n
par$mean <- t(k_fit$centers)
sigma <- array(NA, c(p, p, g))
new <- as.data.frame(cbind(dat, k_fit$cluster))
for (i in 1 : g) {
  subdata <- subset(new[, 1 : p], new[, (p+1)]==i) 
  sigma[,, i] <- cov(subdata)
}
variance <- mclustVariance("EEE", d = p, G = g)
par$variance <- variance
par$variance$sigma <- sigma
kk <- em(modelName = "EEE", data = dat, parameters = par)

相关内容

  • 没有找到相关文章

最新更新