0

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

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

我根据其他人先前的建议使用了 pagesize 1024,仅使用 2 维(经度/纬度)

直接从 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>
4

2 回答 2

1

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

在半径无穷大的情况下,性能将为 O(n^2)。

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

如果您的数据嘈杂,您可能希望将 minPts 增加到例如 10 或 20 以获取最大的数据集。

于 2015-09-25T08:59:11.553 回答
0

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

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

于 2020-09-25T14:53:52.623 回答