gpt4 book ai didi

python - DBSCAN的参数eps,python

转载 作者:太空宇宙 更新时间:2023-11-04 01:16:47 33 4
gpt4 key购买 nike

我有一组点。它们的几何结构(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

目的不是找到另一种运行方式,而是真正了解 eps 的值(value)。它代表距离。 Min_sample 设置为 1,因为我确实接受大小为 1 个样本的集群。

最佳答案

这取决于您的实现

您的距离函数可以返回任何东西;包括米、毫米、码、公里、英里、度……但是你没有分享你用什么函数来计算距离!如果我没记错的话,SRID: 4326 在距离计算上没有任何意义。

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

无论哪种方式,min_points=1 都是荒谬的。包含查询点,因此每个点本身都是一个簇。对于 min_points <= 2 ,DBSCAN 的结果将是单链接聚类。要获得基于密度的聚类,您需要选择更高的值以获得真实密度。

您可能想使用 ELKI 的 DBSCAN。根据他们的 Java 来源,他们的距离函数使用米,而且他们的 R*-tree 索引允许使用此距离进行加速范围查询,这将产生显着加速(O(n log n) 而不是 O(n^2))。

关于python - DBSCAN的参数eps,python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24070407/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com