我是ELKI的新手,我已经成功调整了我想要运行的算法。 我在3K坐标上使用它并且它非常快 - 所以现在我试图扩展到大约1 MM的记录。现在我正在运行30K,但已经过了几个小时,它仍在运行。
有什么办法可以提升表现吗?我注意到java.exe * 32只使用~13%CPU和150KB内存(机器是2.8 GHz i7,内存为32 GB)
我使用了基于其他人之前建议的pagesize 1024仅使用2维(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>
答案 0 :(得分:1)
OPTICS的运行时与查询的 selective 有关。
对于半径无穷大,性能将为O(n ^ 2)。
尽量选择-optics.epsilon
,只要您的申请允许。 OPTICS越小,越快(带索引)。但是,如果使用的值太小(例如,1米),则可能会丢失数据的大规模结构。根据地理数据,您的距离可达20,000,000米。但在许多应用中,其他部分上的点很少,半径为10,000米或100,000米会产生显着的加速。
如果您的数据有噪音,您可能需要将minPts增加到例如10或20表示最大的数据集。
答案 1 :(得分:0)
您还可以使用近似算法,该算法可能快得多。例如,ELKI包含“ FastOPTICS”