群集的默认设置似乎很好 - 特别是EuclideanDistanceFunction。但是,我想以lng / lat的形式运行具有空间数据的聚类,当我改变距离函数时,elki会崩溃:
Running: -dbc.in /tmp/test_data_lnglat-test.dat -db.index tree.spatial.rstarvariants.deliclu.DeLiCluTreeFactory -algorithm clustering.DeLiClu -algorithm.distancefunction geo.LngLatDistanceFunction -deliclu.minpts 4
Task failed
java.lang.UnsupportedOperationException: MBR to MBR mindist is not yet implemented.
at de.lmu.ifi.dbs.elki.distance.distancefunction.geo.LngLatDistanceFunction.doubleMinDist(Unknown Source)
at de.lmu.ifi.dbs.elki.algorithm.KNNJoin.processDataPagesDouble(Unknown Source)
at de.lmu.ifi.dbs.elki.algorithm.KNNJoin.processDataPagesOptimize(Unknown Source)
at de.lmu.ifi.dbs.elki.algorithm.KNNJoin.initHeaps(Unknown Source)
at de.lmu.ifi.dbs.elki.algorithm.KNNJoin.run(Unknown Source)
at de.lmu.ifi.dbs.elki.algorithm.clustering.DeLiClu.run(Unknown Source)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at de.lmu.ifi.dbs.elki.algorithm.AbstractAlgorithm.run(Unknown Source)
at de.lmu.ifi.dbs.elki.workflow.AlgorithmStep.runAlgorithms(Unknown Source)
at […]
我不清楚(对我而言)这个错误意味着什么。群集功能是否可能不适用于地理空间数据?
这有一个简单的解决方法吗?是否难以实现所需的功能(心态)?
答案 0 :(得分:1)
由于错误非常清楚地表明:
MBR到MBR的思想家尚未实施。
但是,您尝试使用的算法 - DeLiClu
- 需要计算两个矩形之间的最小距离。在大地坐标中,而不是在2d平面中。
欢迎您提供足够的公式。球面几何形状并非易事,因此请注意,计算最小矩形到矩形的距离并非易事。 不足以看到四个角落。到目前为止,我们只针对点到矩形的情况解决了这个问题。它是可行的 - 因为矩形是轴对齐的 - 但是到目前为止还没有人坐下来进行数学计算,然后再坐下来并优化公式以尽可能少地使用三角函数。
最简单的解决方法可能是将OPTICS
与常规R树(使用STR!批量加载)而不是DeLiClu
一起使用,因为此算法将产生一个几乎相同的结果,但不需要矩形到矩形的最小距离。从理论上讲,DeLiClu
更快;在实践中,这并不一定成立,因为在R-Trees上加入KNN的代码要复杂得多(因此更难以优化)。