r - R 的 HDBSCAN 因大型数据集而崩溃
问题描述
我试图将 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 就会开始崩溃。有什么解决办法吗?谢谢
解决方案
这可能不是使用失败,而是模块中的编程失败。
这种大小的 32 位整数溢出是相当常见的,因为 50000² 不能存储在有符号的 32 位中。一个典型的截止值是 46341 左右。46342 有没有可能是第一个失败的大小?因此,您可能需要重写该模块以使用 64 位计数器。当然,需要正确检测溢出。因此,您应该正确提交错误报告,而不是在这样的问答论坛中提问。
作为一种解决方法,您可以尝试 Python 和 ELKI 的 HDBSCAN* 实现(如果它们的扩展性更好)。没有必要使用 32 位 mateixes。尽管如此,还是去报告错误吧!
推荐阅读
- macos - macOS L2CAP 蓝牙插座
- java - Spring JPA:导致预期加入的路径
- r - 只有当另一个公共变量的值相等时,是否有一个 R 函数可以用另一个数据帧中的值替换一个数据帧中的值?
- eos - 如何确定是否需要创建钱包?
- r - Calculating probability using simulation
- vega - 有没有办法在 vega 重复图中的 vega 表达式中使用图号/标识符?
- java - 如何在 Java8 中按流对 Map 对象按时间段求和?
- c# - 内部错误 500 Azure 门户出现错误,但在本地运行正常
- postgresql - PostgreSQL 从值更新将空值视为文本
- r - 如何使for循环忽略几列并在excel文件中执行rbind所有工作表(不管工作表的总量)