sklearn DBSCAN中的多个eps值

时间:2017-08-01 09:21:52

标签: python scikit-learn dbscan

我想使用sklearn的DBSCAN实现。它们允许您使用自定义距离指标,但只能使用一个eps值。 我想要的是以下内容:

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

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

1 个答案:

答案 0 :(得分:1)

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

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

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

请注意,DBSCAN使用<=而非<

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