sklearn DBSCAN 中的多个 eps 值

Multiple eps values in sklearn DBSCAN

我想使用 sklearn 中的 DBSCAN 实现。它们允许您使用自定义距离度量,但只能使用一个 eps 值。 我想要的是:

假设我的点每个有 3 个特征,因此每个点都可以被视为 p=np.array([p1,p2,p3]) 形式的 numpy 数组。如果 np.abs(p1-q1) < eps1np.abs(p2-q2) < eps2np.abs(p3-q3) < eps3 两个点 pq 是邻居。通常,人们会使用 d(p,q)<eps,其中 d(,) 是一个指标,eps 是一个阈值。

有没有办法将我的需求轻松实现到 sklearn 中?

可以适当缩放,然后使用最大范数。

p = p * [1/eps1, 1/eps2, 1/eps3]

c = sklearn.cluster.DBSCAN(eps=1, metric="chebyshev", ...)

请注意,DBSCAN 使用 <= 而不是 <

或者您预先计算一个二进制 "distance" 矩阵,如果满足三个条件,则距离为 0,否则为 1。但这需要 O(n²) 内存。