用于 OPTICS Xi 的 ELKI - 我可以让它运行得更快吗?

ELKI for OPTICS Xi - Can I make it go faster?

我是 ELKI 的新手,我已经成功调整了我想要的算法 运行。 我在 3K 坐标上使用它并且速度非常快 - 所以现在我正在尝试扩大到大约 1 MM 记录。现在我正在 运行ning 上 30K,但已经几个小时了,它仍然 运行ning。

有什么方法可以提高性能吗?我注意到 java.exe *32 仅使用 ~13% CPU 和 150KB 内存(机器是 2.8 GHz i7 和 32 GB RAM)

根据其他人之前关于仅使用 2 个维度的建议,我使用了 1024 页大小 (lon/lat)

运行 直接来自 Windows 命令行:

java -jar <path> cli 
-algorithm clustering.optics.OPTICSXi
-opticsxi.xi 0.006
-optics.minpts 5
-dbc.in <path> 
-db.index tree.spatial.rstarvariants.rstar.RStarTreeFactory 
-pagefile.pagesize 1024 
-spatial.bulkstrategy SortTileRecursiveBulkSplit 
-algorithm.distancefunction geo.LngLatDistanceFunction 
-geo.model WGS84SpheroidEarthModel 
-opticsxi.algorithm OPTICSHeap 
-resulthandler ResultWriter 
-out <path>

OPTICS 的运行时间与查询的选择性有关。

半径无穷大,性能为 O(n^2)。

尽量选择 -optics.epsilon 在您的应用程序允许的范围内。 OPTICS 越小,速度越快(带有索引)。但是,如果您使用的值太小(比如 1 米),那么您可能会丢失数据的大尺度结构。使用地理数据,您确实有 20,000,000 米的距离。但在许多应用中,其他大陆上的点无关紧要,10,000 米或 100,000 米的半径会产生显着的加速。

如果您的数据嘈杂,您可能需要将 minPts 增加到例如最大数据集为 10 或 20。

您也可以使用近似算法,这样会快得多。例如,ELKI 包含“FastOPTICS”

https://elki-project.github.io/releases/current/doc/de/lmu/ifi/dbs/elki/algorithm/clustering/optics/FastOPTICS.html