DBSCAN的参数eps,Python

2024-06-08 18:58:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一套观点。它们的几何结构(SRID:4326)存储在数据库中。 我得到了一个代码,目的是用DBSCAN将这些点聚集起来。参数设置如下:eps=1000,min_points=1。在

我得到的星团距离不到1000米。我相信不到1000米的两个点会属于同一个星团。epsilon真的是以米为单位吗?在

代码如下:

    self.algorithm='DBSCAN'
    X=self.data[:,[2,3]]
    if self.debug==True:
        print 'Nbr of Points: %d'% len(X)
    # print X.shape
    # print dist_matrix.shape
    D = distance.squareform(distance.pdist(X,'euclidean'))
    # print dist_matrix
    # S = 1 - (D / np.max(D))
    db = DBSCAN(eps, min_samples).fit(D)
    self.core_samples = db.core_sample_indices_
    self.labels = db.labels

我们的目标不是找到另一种方法来运行它,而是真正理解每股收益的价值。它代表的是距离。Min_sample设置为1,因为我确实接受大小为1的簇。在


Tags: 代码coreself距离dbdistepsmin
1条回答
网友
1楼 · 发布于 2024-06-08 18:58:07

这取决于您的实现。在

您的距离函数可以返回任何值;包括米、毫米、码、公里、英里、度。。。但是你没有分享你用来计算距离的函数! 如果我没弄错的话,SRID: 4326并不意味着距离计算有任何意义。在

sklearn使用的"haversine"似乎使用,而不是米。在

不管怎样,min_points=1都是没有意义的。查询点包括在内,因此每个点本身就是一个簇。使用min_points <= 2,DBSCAN的结果将是单连锁聚类。要获得基于密度的聚类,您需要选择一个更高的值来获得真正的密度。在

您可能需要使用ELKI的DBSCAN。根据他们的Java源代码,他们的距离函数使用米,但是他们的R*-树索引允许使用这个距离加速范围查询,这将产生一个实质性的加速(O(n log n)而不是{})。在

相关问题 更多 >