我有一套观点。它们的几何结构(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的簇。在
这取决于您的实现。在
您的距离函数可以返回任何值;包括米、毫米、码、公里、英里、度。。。但是你没有分享你用来计算距离的函数! 如果我没弄错的话,
SRID: 4326
并不意味着距离计算有任何意义。在sklearn使用的
"haversine"
似乎使用度,而不是米。在不管怎样,
min_points=1
都是没有意义的。查询点包括在内,因此每个点本身就是一个簇。使用min_points <= 2
,DBSCAN的结果将是单连锁聚类。要获得基于密度的聚类,您需要选择一个更高的值来获得真正的密度。在您可能需要使用ELKI的DBSCAN。根据他们的Java源代码,他们的距离函数使用米,但是他们的R*-树索引允许使用这个距离加速范围查询,这将产生一个实质性的加速(})。在
O(n log n)
而不是{相关问题 更多 >
编程相关推荐