使用sklearn KDTree进行Clusterint 2D点

时间:2016-04-01 02:47:59

标签: python-2.7 scikit-learn cluster-analysis 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 个答案:

答案 0 :(得分:1)

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

kd-tree将在根中有1个元素,在第二层中有2个元素( close),然后你将有4个叶子节点和剩余的7个对象。因此,只看叶子,就丢失了三个物体。

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

答案 1 :(得分:1)

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

pip install --user kdtree

可用于聚类2D点。