我正在尝试用4个观测值对全部一百万行进行KMeans聚类。我正在使用以下代码:

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。

最佳答案

当我在具有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行)运行同一件事可以实现这一点。

08-24 15:52