以米为单位的DBSCAN eps参数

问题描述

我有一堆简单的经纬度坐标,我想借助DBSCAN识别城市中的热点。我不确定是否要设置eps参数,还没有找到任何答案。我使用以下代码将epsilon阈值调整为5米:

earth_radius_km = 6371
# calculating 5 meter epsilon threshold 
epsilon = 5 / earth_radius_km

clusterer = DBSCAN(eps=epsilon,min_samples = 10 
            )

结果非常安静,但是点之间的差异大于5米。确定以米为单位的eps参数的正确方法是什么?

解决方法

用Knn肘确定eps

您需要先将其点转换为弧度,然后才能工作。以下伪代码应该可以解决问题:

points = np.array([[lat1,lon1],[lat2,lon2],...]) 
rads = np.radians(points) 
clusterer = dbscan.DBSCAN(min_samples=N,metric='haversine')
cluster_labels = clusterer.fit_predict(points)