【问题标题】:Plotting iterations of k-means in R在 R 中绘制 k-means 的迭代
【发布时间】:2019-02-02 14:47:22
【问题描述】:

我在Rentrop 的答案中找到了此代码,以回答不同的 k 均值绘图问题,但我想知道为什么这只在任何给定数据集上绘制两次迭代。有没有办法将它概括为在收敛时停止绘图,而不是在两次迭代后停止?

set.seed(1337)
df = iris[,1:2]


dfCluster<-kmeans(df,centers=3, iter.max = 1)
  plot(df[,1], df[,2], col=dfCluster$cluster,pch=19,cex=2, main="iter 1")
  points(dfCluster$centers,col=1:5,pch=3,cex=3,lwd=3)

max_iter = 10

for (i in 2:max_iter){
  tryCatch({
    dfCluster <- kmeans(df,centers = dfCluster$centers, iter.max = 1)
    done <- TRUE
  }, 
  warning=function(w) {done <- FALSE})
  plot(df[,1], df[,2], col=dfCluster$cluster,pch=19,cex=2, main=paste("iter",i))
  points(dfCluster$centers,col=1:5,pch=3,cex=3,lwd=3)
  if(done) break
}

【问题讨论】:

  • 不。如果您对相同的数据使用 kmeans.ani,则需要 8 次迭代。更改数据需要相同的迭代次数。

标签: r k-means


【解决方案1】:

如果你只是想尽可能少地修改现有代码,那么将tryCatch中的TRUE/FALSE反转:

tryCatch({
dfCluster <- kmeans(df,centers = dfCluster$centers, iter.max = 1)
done <- FALSE #was TRUE
}, 
warning=function(w) {done <- TRUE}) #was FALSE

但是,无论 kmeans 是在 2 次迭代还是 20 次迭代中收敛,这段代码都绘制了很多图在 max_iter 中。这是我的重写:

# data
set.seed(1234)
df = iris[ , 1:2]

# functions for plotting
myplot <- function(out, i) {
    plot(df[,1], df[,2], pch=20, main=paste("iter",i),
         col=scales::alpha(out$cluster, "0.5"))
}

mypoints <- function(out) {
    points(out$centers, col=1:3, pch=3, cex=2, lwd=3)
}

# number of plots = min(user-specified iters, iters until convergence)
actual_iters <- kmeans(df, centers=3)$iter
max_iter = 10
N <- min(max_iter, actual_iters)

# initial kmeans
out <- kmeans(df, centers=3, iter.max=1)
myplot(out,1)
mypoints(out)

# loop through next iters of kmeans
for (i in 2:N){
    out <- kmeans(df, centers=out$centers, iter.max=1)
    myplot(out,i)
    mypoints(out)
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-01-30
    • 2020-07-21
    • 2016-07-29
    • 2020-08-23
    • 1970-01-01
    • 2020-09-08
    • 2017-08-10
    • 2020-08-28
    相关资源
    最近更新 更多