Ошибка в функции Mclust() в пакете 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 составляет менее 20 МБ.

Теперь я хочу провести кластер с 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?

1 ответ

Решение

Путь Mclust реализован, он будет использовать квадратичную память.

Делай математику. 716213 * 716213 * 8 байт на двойной.

Это не обязательно, но операция по умолчанию. Ты можешь использовать initialization выбрать менее дорогую инициализацию. Но для кластеризации больших наборов геоданных вам следует взглянуть и на ELKI. Если я не ошибаюсь, для его реализации EM нужна только линейная память.

Другие вопросы по тегам