包 mclust 中的函数 Mclust() 出错

Error in function Mclust() in package mclust

先来看看mydata:

head(mydata,10)

   LONGITUDE LATITUDE
1   121.7779  39.0476
2   121.5210  38.8771
3   121.6259  38.9224
4   121.5907  38.8980
5   121.5865  38.8816
6   121.5808  38.9121
7   121.5806  38.8843
8   121.5907  38.8992
9   121.7586  39.0380
10  121.6061  38.9035

dim(mydata)
[1] 716213      2

 summary(mydata)
 LONGITUDE        LATITUDE    
 Min.   :121.1   Min.   :38.72  
 1st Qu.:121.6   1st Qu.:38.91  
 Median :121.6   Median :38.93  
 Mean   :121.6   Mean   :38.95  
 3rd Qu.:121.6   3rd Qu.:38.99  
 Max.   :122.2   Max.   :39.40 

mydata的整体大小不到20Mb。

现在,我想用 mydata 进行集群,我在包 mclust 中使用 Mclust(),这被称为 EM(期望最大化)。

fit_em <- Mclust(mydata)

令我惊讶的是,我输入代码后,等了1个多小时才得到结果,是一个错误。详细信息为:

Error: cannot allocate vector of size 1910.9 Gb
In addition: Warning messages:
1: In hcVVV(data = c(121.7779, 121.521, 121.6259, 121.5907, 121.5865,  :
  NAs introduced by coercion to integer range
2: In double(ld) :
  Reached total allocation of 8191Mb: see help(memory.size)
3: In double(ld) :
  Reached total allocation of 8191Mb: see help(memory.size)
4: In double(ld) :
  Reached total allocation of 8191Mb: see help(memory.size)
5: In double(ld) :
  Reached total allocation of 8191Mb: see help(memory.size)

mydata和我的代码哪里出了问题,想用mydata做集群怎么办?

Mclust的实现方式,会使用quadratic内存。

计算一下。 716213 * 716213 * 每个双精度 8 个字节。

这个不是必须的,但是默认操作。您可以使用 initialization 来选择成本较低的初始化。但是要对大型地理数据集进行聚类,您也应该看看 ELKI。如果我没记错的话,它的EM实现应该只需要线性内存。