DBSCAN eps错误行为

时间:2019-03-27 22:40:16

标签: python dbscan

from sklearn.cluster import DBSCAN
import numpy as np
X=np.array([1,9,11,13,14,15,19]).reshape(-1, 1)
db=DBSCAN(eps=3, min_samples=1).fit(X)
print(db.labels_)

打印:

  

[0 1 1 1 1 1 2 2]

而医生说:

eps : float, optional
    The maximum distance between two samples for them to be considered
    as in the same neighborhood.

这里9和15在同一集群中,而它们之间的欧式距离是6,即> 3

我想念什么?

3 个答案:

答案 0 :(得分:1)

要指出为什么它们位于同一集群中,让我对DBSCAN的功能进行高级解释。

  1. 通过连接数据点来构建图
  2. 测量每个连接组件的大小
  3. 丢弃小于阈值的组件,该阈值在sklearn中是min_sample参数。

esp控制连接两个数据点的最大距离。对于数据集,使用[a-b]表示连接的符号,您具有:

[9-11],[11-13],[13-14],[14-15]

因此这些点都在同一组件中,并且该组件大于您的min_sample参数,因此它被认为是有效的群集。

答案 1 :(得分:1)

这是因为这些点链接在一起。 15小于14中的GrandChild.objects.filter(parent__parent__id=1).update(parent=None) ,因此它包含在该群集中。

您可以在此处查看行为:

eps

给予:X=np.array([1,9,11,13,14,15,17,19]).reshape(-1, 1) db=DBSCAN(eps=3, min_samples=1).fit(X) print(db.labels_)

答案 2 :(得分:1)

邻居与集群不一样。

集群是许多社区的联盟。 Epsilon是距一个邻域中心的最大距离;但是如果您合并多个邻域,并且数据密集,则距离可能会变得任意大。

但是sklearn中的参数描述也是错误的,不仅仅是误导。当三角形不等式成立时,同一邻域中的点 可以相隔两个epsilon(如果不使用度量​​标准则可以相差更多)。