代码之家  ›  专栏  ›  技术社区  ›  Ofek Ron

DBScan eps错误行为

  •  0
  • Ofek Ron  · 技术社区  · 7 年前
    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_)
    

    印刷品:

    医生说:

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

    这里9和15在同一个簇中,而它们之间的欧几里得距离是6,即>3

    0 回复  |  直到 7 年前
        1
  •  1
  •   Has QUIT--Anony-Mousse    7 年前

    一个社区和一个集群不是一回事。

    集群是 . Epsilon是距离一个邻域中心的最大距离;但是如果合并多个邻域,如果数据是 稠密的

    但是sklearn中对参数的描述也是错误的,不仅仅是误导。当三角形不等式成立时,在同一个邻域中的点 可以 分开两个epsilon(如果不使用度量单位,则更多)。

        2
  •  1
  •   Pik-Mai Hui    7 年前

    为了指出它们为什么在同一个集群中,让我对DBSCAN的功能做一个高层次的解释。

    1. 通过连接数据点构造图
    2. 测量每个连接部件的尺寸
    3. 丢弃小于阈值的组件,其中 sklearn min_sample 参数。

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

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

    最小样本 参数,因此它被视为有效的群集。

        3
  •  1
  •   Salvatore    7 年前

    eps 从14开始,所以它包含在这个集群中。

    你可以在这里看到行为:

    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_)
    

    [0 1 1 1 1 1 1 1]