我正在尝试用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行)运行同一件事可以实现这一点。