我是初学者,我试图通过使用mclust
包来聚类具有2个特征(x,y)的数据框(具有50,000条记录)。但是,运行命令感觉就像永远(例如Mclust(XXX.df)
或densityMclust(XXX.df)
。
有没有办法更快地执行命令?示例代码将有所帮助。
对于您的信息我使用的是4核处理器和6GB RAM,我花了大约15分钟左右与Weka进行相同的分析(群集),使用R进程仍然运行1.5小时以上。我确实想用R进行分析。
答案 0 :(得分:13)
在Technical Report,第11.1小节中描述了在使用mclust
时处理大型数据集。
简而言之,函数Mclust
和mclustBIC
包含在将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分钟时。