【发布时间】:2017-02-08 10:14:04
【问题描述】:
玩转这个 DBSCAN 示例: http://geoffboeing.com/2014/08/clustering-to-reduce-spatial-data-set-size/
作者对每个集群使用最中心点。但是,我想使用每个集群中出现次数最多的位置的坐标来表示该集群。在我的数据集中,DBSCAN 工作得很好,但我想将这些集群聚集在一起,可能在生成的较小数据集上使用层次聚类。关于如何找到出现次数最多的位置的任何指导都会很棒。欢迎任何其他改进集群的建议!谢谢!
Data == 类似于参考博客中的位置历史记录的数据框
eps_rad = 32 / 6371.0088 #convert to radians
coords = data.as_matrix(columns=['LocLatDegrees', 'LocLongDegrees'])
db = DBSCAN(eps=eps_rad, min_samples=50, algorithm='ball_tree', metric='haversine').fit(np.radians(coords))
cluster_labels = db.labels_
num_clusters = len(set(cluster_labels))
n_clusters = len(set(cluster_labels)) - (1 if -1 in cluster_labels else 0)
print('Number of clusters: {:,}'.format(n_clusters))
#remove the noise i.e. cluster label -1
data =data[cluster_labels!=-1]
coords =coords[cluster_labels!=-1]
cluster_labels =cluster_labels[cluster_labels!=-1]
clusters = pd.Series([coords[cluster_labels==n] for n in range(n_clusters)])
【问题讨论】:
标签: python pandas scikit-learn cluster-analysis dbscan