【问题标题】:Kmeans on a million observations in R - trouble plotting clustersKmeans 对 R 中的一百万个观测值 - 无法绘制集群
【发布时间】:2013-12-23 11:19:14
【问题描述】:

我正在尝试对超过 100 万行执行 KMeans 聚类,其中包含 4 个观察值,全部为数字。我正在使用以下代码:

kmeansdf<-as.data.frame(rbind(train$V3,train$V5,train$V8,train$length))
km<-kmeans(kmeansdf,2)

可以看出,我想将我的数据分成两个集群。对象km 正在填充,但我无法绘制结果。这是我用来绘制的代码:

plot(kmeansdf,col=km$cluster)

这段代码给了我以下错误:

Error in plot.new() : figure margins too large

我尝试在线研究但找不到解决方案,我也尝试在命令行上工作但仍然遇到相同的错误(我目前正在使用 RStudio)

我们将不胜感激任何解决错误的帮助。 TIA。

【问题讨论】:

  • 你的地块太小了。尝试手动放大它:在 RStudio 中,拖动绘图区域的边框以使其更大。如果这没有帮助,那么您可能正在尝试绘制大量数据。尝试将绘图直接保存到文件中。请参阅?device 了解如何做到这一点。

标签: r plot machine-learning k-means rstudio


【解决方案1】:

当我在具有 1e6 行的 df 上运行您的代码时,我没有收到相同的错误,但系统挂起(10 分钟后中断)。可能是创建一个每帧 1e6 个点的散点图矩阵太多了。

您可以考虑随机抽样:

# all this to create a df with two distinct clusters
set.seed(1)
center.1 <- c(2,2,2,2)
center.2 <- c(-2,-2,-2,-2)
n <- 5e5
f <- function(x){return(data.frame(V1=rnorm(n,mean=x[1]),
                                   V2=rnorm(n,mean=x[2]),
                                   V3=rnorm(n,mean=x[3]),
                                   V4=rnorm(n,mean=x[4])))}
df <- do.call("rbind",lapply(list(center.1,center.2),f))

km <- kmeans(df,2)         # run kmeans on full dataset
df$cluster <- km$cluster   # append cluster column to df

# sample is 10% of population (100,000 rows)
s  <- 1e5
df <- df[sample(nrow(df),s),]
plot(df[,1:4],col=df$cluster)

用 1% 的样本(50,000 行)运行同样的事情会得到这个结果。

【讨论】:

  • 注意编辑 - 您需要先在完整数据集上运行 kmeans,然后附加集群列,然后绘制样本。
猜你喜欢
  • 2014-06-24
  • 2021-08-01
  • 2020-06-20
  • 2021-02-20
  • 1970-01-01
  • 2016-04-26
  • 2017-01-24
  • 2018-04-23
  • 1970-01-01
相关资源
最近更新 更多