java - 在 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。
解决方案
不幸的是,如果没有数据,它几乎无法重现。
显然,树中存在一些不一致,树不再正确平衡。这将需要相当多的精力来调试,所以如果你能找到这个错误当然会非常好。从快速查看堆栈跟踪来看,似乎重新插入导致了第二次重新插入(IIRC,R*-trees 允许同时多次重新插入,但仅在不同级别;这可能确实是不同的级别)。但是重新插入确实很难正确处理。事实上,我在某处为 ELKI 实现了更快、更清晰的 R-trees,但我从未需要进行干净的重新插入;所以他们没有所有当前的功能(这就是为什么重写从未合并到 ELKI 中)。
作为一个简单的解决方法(无论如何推荐),-spatial.bulkstrategy SortTileRecursiveBulkSplit
改为批量加载你的树。然后将永远不会使用此代码路径(另外,树无论如何都会更好,这将明显更快,因为“全局”批量加载会产生不重叠的叶页,以及具有最佳填充的低重叠树)。
索引文档中建议这样做,因为性能更好。
推荐阅读
- javascript - 将 THREE.js 对象旋转转换为画布旋转
- flutter - 使用 flogs 的颤动日志 - 它将被保存在哪里
- sql - 如何获得每组至少 3 条记录?
- c# - 将 Linq 函数存储到变量中并动态定义?
- android - 从 QEMU 创建 Android qcow2
- python - 每隔几秒从 Python 中的 SQL 获取新数据
- python - 如果已经提取了特征,如何使用 sklearn 管道?
- php - 功能测试时如何配置 Symfony 5 服务参数?
- node.js - Sweet Alert 通过 Node JS 和 Express 确认
- c++ - 为什么从帧缓冲区创建的纹理没有正确映射