【问题标题】:DBSCAN with R*-Tree - how it works带有 R*-Tree 的 DBSCAN - 它是如何工作的
【发布时间】:2016-06-25 00:27:00
【问题描述】:

是否有人可以向我解释 dbscan 算法如何与 R*-Tree 一起工作?我了解 dbscan 的工作,看来,我了解 R*-Tree 的工作原理,但我无法将它们连接在一起。

最初,我有数据 - 具有 8 个特征的特征向量,但我不明白如何处理它们以构建 R*-Tree。如果有人列出我必须通过的主要步骤,我将不胜感激。

如果我的问题很明显,我深表歉意,但这会给我带来困难。 提前致谢!

【问题讨论】:

    标签: cluster-analysis dbscan r-tree


    【解决方案1】:

    R*-Tree 通过边界框索引任意几何对象。在您的情况下,由于您只有点,因此边界框的最小值和最大值是相同的。每个 R*-Tree 都有一个类似 rtree.add_element(object, boundingbox) 的函数。 object 将是数据点的索引,boundingbox 将如上所述。

    连接点是 DBSCAN 的regionQuery 部分。数据点 p 的 regionQuery(p) 返回所有满足 euclideanDistance(p,q) ≤ ε(参数ε值由用户提供)。

    天真地,您可以计算所有数据点到 p 的距离,这需要 O(n) 时间来获取一个数据点,从而查询所有 n 数据点需要 o(n²) 时间。或者,您可以预先计算一个矩阵,该矩阵包含所有数据点之间的欧几里德距离。然后这需要 O(n²) 的空间,而 regionQuery 只需在该矩阵中查找一个点。

    R*-Tree 使您能够在 O(log n) 时间内查找坐标范围内的数据点。然而,R*-Tree 只允许查询形式为

    "所有点,其中:[0.3 ; 0.5] 中的坐标 1 和 [0.8 ; 1.0] 中的坐标 2"

    而不是

    "所有点 q 其中:euclideanDistance(p,q) ≤ ε"

    因此,您在 R*-Tree 中查询每个坐标是 p±ε 的相应坐标的点,然后计算所有匹配点到查询点 p 的欧式距离。但是,不同之处在于,与计算 pall 点的欧几里德距离相比,要检查的点要少得多。因此,您的一个 regionQuery 的时间复杂度现在是 O(log n * m),其中 m 是您的 R 返回的点数*-树。如果你选择 ε 小,你会从你的 R*-tree 中得到很少的匹配点,并且 m 会很小。因此,对于一个 regionQuery,您的时间复杂度接近 O(log n),因此对于每个 regionQuery,您的时间复杂度接近 O(n * log n)数据点。在另一个极端,如果您选择的 ε 太大以至于它将包含您的大部分数据点,m 将接近 n,因此,每个 regionQuery 所需的时间数据点再次接近 O(n * log n * n) = O(n² * log n ),因此,与天真的方法相比,您一无所获。

    因此,至关重要的是选择足够小的 ε,以使每个点在 ε 的欧几里德距离内只有几个其他点。

    【讨论】:

      【解决方案2】:

      R*-tree 是一个空间索引。

      它可以更快地找到邻居

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-06-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-12-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多