sklearn DBSCAN 中的多个 eps 值
Multiple eps values in sklearn DBSCAN
我想使用 sklearn 中的 DBSCAN 实现。它们允许您使用自定义距离度量,但只能使用一个 eps
值。
我想要的是:
假设我的点每个有 3 个特征,因此每个点都可以被视为 p=np.array([p1,p2,p3])
形式的 numpy 数组。如果 np.abs(p1-q1) < eps1
和 np.abs(p2-q2) < eps2
和 np.abs(p3-q3) < eps3
两个点 p
和 q
是邻居。通常,人们会使用 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²) 内存。
我想使用 sklearn 中的 DBSCAN 实现。它们允许您使用自定义距离度量,但只能使用一个 eps
值。
我想要的是:
假设我的点每个有 3 个特征,因此每个点都可以被视为 p=np.array([p1,p2,p3])
形式的 numpy 数组。如果 np.abs(p1-q1) < eps1
和 np.abs(p2-q2) < eps2
和 np.abs(p3-q3) < eps3
两个点 p
和 q
是邻居。通常,人们会使用 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²) 内存。