使用 sklearn KDTree 的 Clusterint 2D 点

Clusterint 2D points using sklearn KDTree

我有一个 (n_sample x 2) 数组,我想在 sklearn.neighbors.KDTree.

中使用 KDTree 对它们进行聚类

我有这段示例代码:

from sklearn.neighbors import KDTree
import numpy as np
np.random.seed(0)
X = np.random.random((10, 2))
tree = KDTree(X, leaf_size=2)

现在我想提取树叶中的点,这样每片叶子都可以成为一个簇。同一叶中的点属于同一簇。

在上面的例子中,因为最大值 leaf_size 是 2,所以我们将有大约 10 / 2 = 5 个簇。

我想要的是给定 X 中的一个点(例如 X[0])树可以给我这些点所属树的叶子的索引。

最大叶子大小 2 意味着每个叶子可以有 n 到 n/2 个用户。但是你忘记了非叶节点。

一棵 kd 树在根部有 1 个元素,在第二层有 2 个元素(即 not 关闭),然后你将有 4 个叶节点,剩下的7个对象。所以只看叶子,你丢失了三个对象。

kd-tree 不会尝试聚类点。 kd-tree 在两个节点中具有完全相同的坐标是完全有效的!您提供的参考仅使用 kd-tree 来获得自适应网格。我不认为这是一个很好的方法,但它非常 easy。你应该自己实现它,这样你就不会构建完整的树,也不会将对象放入非叶节点中。

有这个包 kdtree in Python 可以通过以下方式安装:

pip install --user kdtree

可用于聚类二维点。