我想使用sklearn的DBSCAN实现。它们允许您使用自定义距离指标,但只能使用一个eps
值。
我想要的是以下内容:
让我们说我的点各有3个特征,因此每个点都可以被视为p=np.array([p1,p2,p3])
形式的numpy数组。如果p
和q
以及np.abs(p1-q1) < eps1
,则np.abs(p2-q2) < eps2
和np.abs(p3-q3) < eps3
两个点是邻居。通常,人们会使用d(p,q)<eps
,其中d(,)
是指标而eps是阈值。
有没有办法轻松实现我的需求到sklearn?
答案 0 :(得分:1)
您可以适当缩放,然后使用最大规范。
p = p * [1/eps1, 1/eps2, 1/eps3]
c = sklearn.cluster.DBSCAN(eps=1, metric="chebyshev", ...)
请注意,DBSCAN使用<=
而非<
。
或者您预先计算二进制“距离”矩阵,如果三个条件成立则距离为0,否则为1。但这需要O(n²)内存。