HDBSCAN for R在大型数据集中崩溃

时间:2019-05-19 13:42:56

标签: r gps dbscan hdbscan

我尝试将HDBSCAN算法应用于我的数据集(50000 GPS点)。 但是,每次我运行代码时,R会话都会崩溃。

这是基本信息。关于我的PC:

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 :(得分:0)

这可能不是使用失败,而是模块中的编程失败。

看到这种大小的32位整数溢出是很常见的,因为50000²无法存储在带符号的32位中。典型的临界值为46341左右。46342是第一个失败的机率吗?因此,您可能需要重写该模块以使用64位计数器。当然,需要正确检测溢出。因此,您应该提交错误报告,而不要在这样的问答论坛中提问。

作为一种解决方法,如果扩展性更好,则可以尝试使用适用于python和ELKI的HDBSCAN *实现。不必使用32位mateix。不过,请报告该错误!