我有一个(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]),树可以给我这些点所属的树叶的索引。
答案 0 :(得分:1)
最大叶子大小2意味着每个叶子可以有n到n / 2个用户。但是你忘记了非叶子节点。
kd-tree将在根中有1个元素,在第二层中有2个元素(不 close),然后你将有4个叶子节点和剩余的7个对象。因此,只看叶子,就丢失了三个物体。
kd-tree不会尝试聚集点。对于kd树来说,在两个节点中具有完全相同的坐标是完全有效的!您提供的参考仅使用kd树来获得自适应网格。我不认为这是一个非常好的方法,但它非常容易。您应该自己实现它,这样您就不会构建完整的树,也不会将对象放入非叶节点。
答案 1 :(得分:1)