KD树:`leafsize`参数的含义

问题描述

我正在看SciPy的KD Tree implementation。我对leafsize参数感到困惑,它是

算法切换到蛮力的点数。默认值:16。

这是BST中的叶子数吗?如果是这样,则意味着默认情况下,KD树将包含不超过32个点。这似乎过小,尤其是对于我的k = 2用例而言。我会错误地解释参数吗?

解决方法

参数leafsize不能控制树中的最大叶子数(不受限制),而是控制与树中单个叶子相关联的输入点的数量。考虑将64个点添加到树上。如果每个点都与单个叶子相关联,您将获得一棵深达七层的完整树,任何需要一个点的处理都将降到这七个层以进行查找。或者,如果叶子大小为16,则您将得到一棵只有3层深的树,树中的每个叶子都与16个点相关联。处理一个点涉及降低树的三个级别,然后测试叶中的16个点中的每个点(因为它们是无序的)。可以调整此值以提高性能,根据经验,最佳值取决于树的使用精确程度。

从概念上讲,这是为不同的leafsize值构建的树的示例。

tree construction examples

您可以看到leafsize参数如何使scipy source code中的树构建过程短路。这将在树的叶子中无序排列的leafsize/2leafsize点之间。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...