Java 在ELKI中将DBSCAN与RStarTree一起使用时不支持操作异常
我正在使用ELKI进行聚类,我在许多数据集上尝试了超过1k次,结果很好:D 但当我在我的一个文件上运行它时(它是一个大文件),我看到初始化树时出错。 有什么问题吗?我怎样才能修好它 整个命令和结果如下所示: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
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
大容量加载树。然后,将永远不会使用此代码路径(此外,树无论如何都会更好,这将大大加快,因为“全局”批量加载会产生不重叠的叶页和具有最佳填充的低重叠树)
由于性能更好,建议在中使用此选项