问题描述
我正在看SciPy的KD Tree implementation。我对leafsize
参数感到困惑,它是
算法切换到蛮力的点数。默认值:16。
这是BST中的叶子数吗?如果是这样,则意味着默认情况下,KD树将包含不超过32个点。这似乎过小,尤其是对于我的k = 2用例而言。我会错误地解释参数吗?
解决方法
参数leafsize
不能控制树中的最大叶子数(不受限制),而是控制与树中单个叶子相关联的输入点的数量。考虑将64个点添加到树上。如果每个点都与单个叶子相关联,您将获得一棵深达七层的完整树,任何需要一个点的处理都将降到这七个层以进行查找。或者,如果叶子大小为16,则您将得到一棵只有3层深的树,树中的每个叶子都与16个点相关联。处理一个点涉及降低树的三个级别,然后测试叶中的16个点中的每个点(因为它们是无序的)。可以调整此值以提高性能,根据经验,最佳值取决于树的使用精确程度。
从概念上讲,这是为不同的leafsize
值构建的树的示例。
您可以看到leafsize
参数如何使scipy source code中的树构建过程短路。这将在树的叶子中无序排列的leafsize/2
至leafsize
点之间。