首页 > 解决方案 > 在 ELKI 中将 DBSCAN 与 RStarTree 一起使用时出现 UnsupportedOperationException

问题描述

我正在使用 ELKI 进行聚类,我在许多数据集上尝试了超过 1k 次,它很好:D 但是当我在我的一个文件(它是大文件)上运行它时,我在初始化树时看到错误。有什么问题?我该如何解决?

整个命令和结果在这里:

java -jar elki-bundle-0.7.1.jar KDDCLIApplication -verbose -verbose -enableDebug true -dbc.in my_input -parser.labelIndices 0 -db.index tree.spatial.rstarvariants.rstar.RStarTreeFactory -time -algorithm clustering.DBSCAN -algorithm.distancefunction geo.LngLatDistanceFunction -geo.model SphericalHaversineEarthModel -dbscan.epsilon 50.0 -dbscan.minpts 446 -resulthandler ResultWriter,ExportVisualizations -out my_output -vis.output my_visOutput 

de.lmu.ifi.dbs.elki.datasource.FileBasedDatabaseConnection.load:5716 毫秒 de.lmu.ifi.dbs.elki.index.tree.spatial.rstarvariants.rstar.RStarTreeIndex.directory.capacity:95 de.lmu.ifi .dbs.elki.index.tree.spatial.rstarvariants.rstar.RStarTreeIndex.directory.minfill:38 de.lmu.ifi.dbs.elki.index.tree.spatial.rstarvariants.rstar.RStarTreeIndex.leaf.capacity:153 de .lmu.ifi.dbs.elki.index.tree.spatial.rstarvariants.rstar.RStarTreeIndex.leaf.minfill: 61 节点不是目录节点!java.lang.UnsupportedOperationException:节点不是目录节点!在 de.lmu.ifi.dbs.elki.index.tree.AbstractNode.addDirectoryEntry(AbstractNode.java:240) 在 de.lmu.ifi.dbs.elki.index.tree.spatial.rstarvariants.AbstractRStarTree.insertDirectoryEntry(AbstractRStarTree. java:194) 在 de.lmu.ifi.dbs.elki.index.tree.spatial.rstarvariants。

标签: javadbscanelki

解决方案


不幸的是,如果没有数据,它几乎无法重现。

显然,树中存在一些不一致,树不再正确平衡。这将需要相当多的精力来调试,所以如果你能找到这个错误当然会非常好。从快速查看堆栈跟踪来看,似乎重新插入导致了第二次重新插入(IIRC,R*-trees 允许同时多次重新插入,但仅在不同级别;这可能确实是不同的级别)。但是重新插入确实很难正确处理。事实上,我在某处为 ELKI 实现了更快、更清晰的 R-trees,但我从未需要进行干净的重新插入;所以他们没有所有当前的功能(这就是为什么重写从未合并到 ELKI 中)。

作为一个简单的解决方法(无论如何推荐),-spatial.bulkstrategy SortTileRecursiveBulkSplit改为批量加载你的树。然后将永远不会使用此代码路径(另外,树无论如何都会更好,这将明显更快,因为“全局”批量加载会产生不重叠的叶页,以及具有最佳填充的低重叠树)。

索引文档中建议这样做,因为性能更好。


推荐阅读