将 PH-Tree 添加到 ELKI
Adding PH-Tree to ELKI
我正在考虑将 PH 树添加到 ELKI。
我找不到任何示例教程,而且内部架构目前对我来说还不是很清楚。
- 您认为将 PH-tree 添加到 ELKI 中有意义吗?
- 那需要多少努力?
- 我能得到一些帮助吗?
- 只实现一个内存版本是否有意义,就像 kd-tree 所做的那样(据我所知)?
一些背景:
PH 树是在 SIGMOD'14 上发布的空间索引:paper, Java source code is available here。
它有点类似于四叉树,但 space 效率更高,不需要重新平衡并且可以很好地扩展维度。
PH-tree 与 R*-Tree 实现的不同之处在于没有 leaf/inner 节点的概念,并且节点不会直接映射到页面。它也适用于随机 insert/delete(不需要批量加载)。
是的。
当然如果在ELKI中有一个PH-tree就更好了,让其他人可以用它来试验。我们希望ELKI成为一个综合工具;它有 R 树、M 树、k-d 树、覆盖树、LSH、iDistance、倒排列表、space-填充曲线、PINN,...; X-tree、rank-cover-trees、bond 等有一些工作但尚未清理的实现。
我们希望研究人员能够轻松地研究哪种索引最适合他们的数据,当然,如果有 PH-tree 就好了。我们还尝试突破这些指标的极限,例如当支持欧氏距离以外的其他距离度量时。
努力取决于您的编码经验; ELKI 使用了一些优化良好的数据结构,但这意味着我们在很多地方都没有使用标准的 Java API,因为性能。例如,添加覆盖树花了我大约一天的时间(而且效果非常好)。我假设一个更灵活(但也更占用内存)的 k-d-tree 将有类似的工作量。我没有详细研究 PH 树,但我认为它比那稍微多一些努力。
我的胆量还说它不会像宣传的那样快。它似乎是一个前缀压缩的四叉树。在我的实验中,希尔伯特曲线所需的位交错方法可能非常昂贵。它也可能只适用于 Minkowski 指标。但欢迎你证明我错了。 ;-)
随时欢迎您在邮件列表或此处寻求帮助。
我会先做一个内存变体,以充分理解索引。然后对其进行基准测试以确定优化潜力,并对其进行调试。在那之前,您可能还没有弄清楚所有的极端情况,例如重复点处理、退化数据集等
始终将磁盘上设为可选。如果您的数据适合内存,仅内存实现将比任何磁盘版本快得多。
在为 ELKI 做贡献时,请:
- 避免外部依赖。我们在质量方面有过糟糕的经验。 Apache Commons,我们希望这个包易于安装和维护,所以我们希望将 .jar 依赖项保持在最低限度(此外,拥有大量具有冗余功能的 jar 会以性能成本为代价)。我倾向于只接受 可选 扩展模块的外部依赖。
- 请勿从其他来源复制代码。 ELKI 已获得 AGPL-3 许可,对 ELKI 本身的任何贡献也应获得 AGPL-3 许可。在某些情况下,可能包括例如public 域代码,但我们需要将它们保持在最低限度。我们可能 使用 Apache 许可代码(在外部库中),但不应混合使用它们。所以从快速看,你不能将他们的源代码复制到 ELKI 中。
如果您正在寻找 数据挖掘项目想法 ,这里有一个 articles/algorithms 的列表,我们希望看到对 ELKI 的贡献(我们保留这个列表迄今为止的学生实施项目):
我正在考虑将 PH 树添加到 ELKI。 我找不到任何示例教程,而且内部架构目前对我来说还不是很清楚。
- 您认为将 PH-tree 添加到 ELKI 中有意义吗?
- 那需要多少努力?
- 我能得到一些帮助吗?
- 只实现一个内存版本是否有意义,就像 kd-tree 所做的那样(据我所知)?
一些背景: PH 树是在 SIGMOD'14 上发布的空间索引:paper, Java source code is available here。 它有点类似于四叉树,但 space 效率更高,不需要重新平衡并且可以很好地扩展维度。 PH-tree 与 R*-Tree 实现的不同之处在于没有 leaf/inner 节点的概念,并且节点不会直接映射到页面。它也适用于随机 insert/delete(不需要批量加载)。
是的。
当然如果在ELKI中有一个PH-tree就更好了,让其他人可以用它来试验。我们希望ELKI成为一个综合工具;它有 R 树、M 树、k-d 树、覆盖树、LSH、iDistance、倒排列表、space-填充曲线、PINN,...; X-tree、rank-cover-trees、bond 等有一些工作但尚未清理的实现。
我们希望研究人员能够轻松地研究哪种索引最适合他们的数据,当然,如果有 PH-tree 就好了。我们还尝试突破这些指标的极限,例如当支持欧氏距离以外的其他距离度量时。
努力取决于您的编码经验; ELKI 使用了一些优化良好的数据结构,但这意味着我们在很多地方都没有使用标准的 Java API,因为性能。例如,添加覆盖树花了我大约一天的时间(而且效果非常好)。我假设一个更灵活(但也更占用内存)的 k-d-tree 将有类似的工作量。我没有详细研究 PH 树,但我认为它比那稍微多一些努力。 我的胆量还说它不会像宣传的那样快。它似乎是一个前缀压缩的四叉树。在我的实验中,希尔伯特曲线所需的位交错方法可能非常昂贵。它也可能只适用于 Minkowski 指标。但欢迎你证明我错了。 ;-)
随时欢迎您在邮件列表或此处寻求帮助。
我会先做一个内存变体,以充分理解索引。然后对其进行基准测试以确定优化潜力,并对其进行调试。在那之前,您可能还没有弄清楚所有的极端情况,例如重复点处理、退化数据集等
始终将磁盘上设为可选。如果您的数据适合内存,仅内存实现将比任何磁盘版本快得多。
在为 ELKI 做贡献时,请:
- 避免外部依赖。我们在质量方面有过糟糕的经验。 Apache Commons,我们希望这个包易于安装和维护,所以我们希望将 .jar 依赖项保持在最低限度(此外,拥有大量具有冗余功能的 jar 会以性能成本为代价)。我倾向于只接受 可选 扩展模块的外部依赖。
- 请勿从其他来源复制代码。 ELKI 已获得 AGPL-3 许可,对 ELKI 本身的任何贡献也应获得 AGPL-3 许可。在某些情况下,可能包括例如public 域代码,但我们需要将它们保持在最低限度。我们可能 使用 Apache 许可代码(在外部库中),但不应混合使用它们。所以从快速看,你不能将他们的源代码复制到 ELKI 中。
如果您正在寻找 数据挖掘项目想法 ,这里有一个 articles/algorithms 的列表,我们希望看到对 ELKI 的贡献(我们保留这个列表迄今为止的学生实施项目):