【问题标题】:Clusterint 2D points using sklearn KDTreeClusterint 2D 点使用 sklearn KDTree
【发布时间】:2016-07-20 17:16:45
【问题描述】:

我有一个 (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]),树可以给我这些点所属的树的叶子的索引。

【问题讨论】:

  • kd-tree 不太适合集群。
  • 在我的情况下,KD-tree 非常适合我需要的集群类型。如本文所述aclweb.org/anthology/P15-2104.
  • 我不会为此使用“集群”一词。这是一个自适应网格;他们没有提及他们对非叶子用户所做的事情;并且很容易表达和实现这一点,而无需使用中值分割的 kd-tree。

标签: python-2.7 scikit-learn cluster-analysis kdtree


【解决方案1】:

有这个包kdtree in Python可以安装:

pip install --user kdtree

可用于聚类二维点。

【讨论】:

    【解决方案2】:

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

    kd-tree 将在根中有 1 个元素,在第二层中有 2 个(not close),然后您将有 4 个叶子节点和其余 7 个对象。所以只看叶子,你就丢了三个东西。

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

    【讨论】:

      猜你喜欢
      • 2021-06-21
      • 2016-02-22
      • 2015-01-12
      • 2011-06-05
      • 1970-01-01
      • 2021-05-05
      • 2019-01-25
      • 2018-08-22
      相关资源
      最近更新 更多