如何在50000记录数据集上更快地运行mclust

时间:2013-01-15 12:08:30

标签: r

我是初学者,我试图通过使用mclust包来聚类具有2个特征(x,y)的数据框(具有50,000条记录)。但是,运行命令感觉就像永远(例如Mclust(XXX.df)densityMclust(XXX.df)

有没有办法更快地执行命令?示例代码将有所帮助。

对于您的信息我使用的是4核处理器和6GB RAM,我花了大约15分钟左右与Weka进行相同的分析(群集),使用R进程仍然运行1.5小时以上。我确实想用R进行分析。

1 个答案:

答案 0 :(得分:13)

Technical Report,第11.1小节中描述了在使用mclust时处理大型数据集。

简而言之,函数MclustmclustBIC包含在将EM应用于完整数据集之前在层次聚类阶段使用数据的子样本的规定,以便扩展更大数据集的方法。

通用示例:

library(mclust)
set.seed(1)
##
## Data generation
##
N  <- 5e3
df <- data.frame(x=rnorm(N)+ifelse(runif(N)>0.5,5,0), y=rnorm(N,10,5))
##
## Full set
##
system.time(res <- Mclust(df))
# >   user  system elapsed 
# > 66.432   0.124  67.439 
##
## Subset for initial stage
##
M <- 1e3
system.time(res <- Mclust(df, initialization=list(subset=sample(1:nrow(df), size=M))))
# >   user  system elapsed 
# > 19.513   0.020  19.546

“Subsetted”版本在我的双核上的运行速度提高了约3.5倍(尽管Mclust仅使用单核)。

N<-5e4(如您的示例中)和M<-1e3完成子集的版本需要大约3.5分钟时。