Java 在ELKI中将DBSCAN与RStarTree一起使用时不支持操作异常

Java 在ELKI中将DBSCAN与RStarTree一起使用时不支持操作异常,java,dbscan,elki,Java,Dbscan,Elki,我正在使用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.spati

我正在使用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.AbstractRStarTree.reInsert(AbstractRStarTree.java:655) 在 de.lmu.ifi.dbs.elki.index.tree.spatial.rstarvariants.strategies.overflow.LimitedReinsertOverflowTreatment.handleOverflow(LimitedReinsertOverflowTreatment.java:97) 在 de.lmu.ifi.dbs.elki.index.tree.spatial.rstarvariants.AbstractRStarTree.overflowTreatment(AbstractRStarTree.java:571) 在 de.lmu.ifi.dbs.elki.index.tree.spatial.rstarvariants.AbstractRStarTree.adjustTree(AbstractRStarTree.java:676) 在 de.lmu.ifi.dbs.elki.index.tree.spatial.rstarvariants.AbstractRStarTree.adjustTree(AbstractRStarTree.java:705) 在 de.lmu.ifi.dbs.elki.index.tree.spatial.rstarvariants.AbstractRStarTree.insertLeafEntry(AbstractRStarTree.java:175) 在 de.lmu.ifi.dbs.elki.index.tree.spatial.rstarvariants.AbstractRStarTree.reInsert(AbstractRStarTree.java:649) 在 de.lmu.ifi.dbs.elki.index.tree.spatial.rstarvariants.strategies.overflow.LimitedReinsertOverflowTreatment.handleOverflow(LimitedReinsertOverflowTreatment.java:97) 在 de.lmu.ifi.dbs.elki.index.tree.spatial.rstarvariants.AbstractRStarTree.overflowTreatment(AbstractRStarTree.java:571) 在 de.lmu.ifi.dbs.elki.index.tree.spatial.rstarvariants.AbstractRStarTree.adjustTree(AbstractRStarTree.java:676) 在 de.lmu.ifi.dbs.elki.index.tree.spatial.rstarvariants.AbstractRStarTree.insertLeafEntry(AbstractRStarTree.java:175) 在 de.lmu.ifi.dbs.elki.index.tree.spatial.rstarvariants.AbstractRStarTree.insertLeaf(AbstractRStarTree.java:151) 在 de.lmu.ifi.dbs.elki.index.tree.spatial.rstarvariants.rstar.RStarTreeIndex.insert(RStarTreeIndex.java:104) 在 de.lmu.ifi.dbs.elki.index.tree.spatial.rstarvariants.rstar.RStarTreeIndex.insertAll(RStarTreeIndex.java:129) 在 de.lmu.ifi.dbs.elki.index.tree.spatial.rstarvariants.rstar.RStarTreeIndex.initialize(RStarTreeIndex.java:94) 在 de.lmu.ifi.dbs.elki.database.StaticArrayDatabase.initialize(StaticArrayDatabase.java:168) 在 de.lmu.ifi.dbs.elki.workflow.InputStep.getDatabase(InputStep.java:63) 位于de.lmu.ifi.dbs.elki.KDDTask.run(KDDTask.java:108) de.lmu.ifi.dbs.elki.application.KDDCLIApplication.run(KDDCLIApplication.java:61) 在 de.lmu.ifi.dbs.elki.application.AbstractApplication.runCLIApplication(AbstractApplication.java:194) 在 de.lmu.ifi.dbs.elki.application.KDDCLIApplication.main(KDDCLIApplication.java:96) 位于的sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法) invoke(NativeMethodAccessorImpl.java:62) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 位于java.lang.reflect.Method.invoke(Method.java:498) de.lmu.ifi.dbs.elki.application.ELKILauncher.main(ELKILauncher.java:60)


不幸的是,如果没有这些数据,它很难复制

显然,树中存在一些不一致性,树不再正确平衡。这将需要相当多的调试工作,所以如果您能够找到这个bug,当然会非常好。快速查看堆栈跟踪,似乎一次重新插入导致了第二次重新插入(IIRC,R*-树允许同时进行多个重新插入,但仅在不同的级别;这可能确实是不同的级别)。但是重新插入确实很难做到正确。事实上,我在某个地方为ELKI实现了一个更快更干净的R树,但我从未进行过干净的重新插入;因此,它们没有所有当前的功能(这就是为什么重写从未合并到ELKI中)

作为一个简单的解决方法(无论如何建议这样做),请使用
-spatial.bulkstrategy SortTileRecursiveBulkSplit
大容量加载树。然后,将永远不会使用此代码路径(此外,树无论如何都会更好,这将大大加快,因为“全局”批量加载会产生不重叠的叶页和具有最佳填充的低重叠树)

由于性能更好,建议在中使用此选项