Ошибка в функции 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 нужна только линейная память.