HDBSCAN для R Сбой с большим набором данных - PullRequest
0 голосов
/ 19 мая 2019

Я попытался применить алгоритм HDBSCAN к моему набору данных (50000 точек GPS). Однако каждый раз, когда я запускаю код, сеанс R сбой.

Вот основная информация. о моем ПК:

processor: Intel i7 7820x 3.6 GHz
memory: 120 GB
System: 64-bit Operating system, x64-based processor

Вот подмножество моего кадра данных (df):

 Hour      lon    lat
   19:49:19 -73.97868 40.76272
   03:07:49 -74.00217 40.73429
   00:53:36 -74.00869 40.73819
   16:51:35 -73.94724 40.77943
   20:12:39 -73.86382 40.76952
   13:20:07 -74.00842 40.74652
   21:52:18 -74.00845 40.72110
   02:08:07 -73.93993 40.70765
   19:47:01 -73.98917 40.72040
   18:55:11 -74.00297 40.76039
   22:30:02 -73.97443 40.74751
   15:29:26 -73.96956 40.76112
   22:44:05 -73.97282 40.75642
   07:57:17 -73.99771 40.73627
   19:33:36 -73.95992 40.77361

и вот мои коды HDBSCAN:

cl <- hdbscan(df[,2:3], minPts = 0.01 * 50000) # I want to keep the minpt = 1% of my total number of points


plot(df[,2:3], col=cl$cluster+1, pch=20) # plot the results

Я пытался уменьшить количество точек от исходного набора данных:


df1 <- sample_n(df,45000)
cl <- hdbscan(df1[,2:3], minPts = 0.01 * 45000) 


plot(df1[,2:3], col=cl$cluster+1, pch=20) 

Это отлично работает.

Я считаю, что как только общее количество очков превышает 50000, R начинает падать. Любое решение для этого? спасибо

1 Ответ

0 голосов
/ 19 мая 2019

Вероятно, это не сбой использования, а сбой программирования в модуле.

Довольно часто встречается переполнение 32-битного целого при таком размере, потому что 50000² не может быть сохранено в 32-битном знаке. Типичное ограничение составляет около 46341. Есть ли шанс, что 46342 - это первый размер, который потерпит неудачу? Поэтому вам, вероятно, придется переписать этот модуль для использования 64-битных счетчиков. И, конечно, переполнение должно быть обнаружено правильно. Поэтому вы должны правильно подать отчет об ошибке , а не спрашивать на форуме вопросов и ответов, подобном этому.

В качестве обходного пути вы можете попробовать реализации HDBSCAN * для python и ELKI, если они лучше масштабируются. Не должно быть необходимости использовать 32-битные mateixes. Тем не менее, иди сообщить об ошибке!

...