【问题标题】:Using DBSCAN to find each cluster center, radius in Python?使用 DBSCAN 在 Python 中查找每个集群中心、半径?
【发布时间】:2018-09-15 12:02:47
【问题描述】:

我想找到每个集群的中心和半径。我能做些什么?请帮我。这是我的代码,它包含 dbscan 和 meanshifts 两个结果。这些点是随机的,现在我想找到每个集群的中心和半径。

import numpy as np
import matplotlib.pyplot as plt
from sklearn import cluster


def cluster_plots(set, colours1='gray', colours2='gray',
                  title1='Plot 1', title2='Plot 2'):
    fig, (ax1, ax2) = plt.subplots(1, 2)
    fig.set_size_inches(6, 3)
    ax1.set_title(title1, fontsize=14)
    ax1.set_xlim(min(set[:, 0]), max(set[:, 0]))
    ax1.set_ylim(min(set[:, 1]), max(set[:, 1]))
    ax1.scatter(set[:, 0], set[:, 1], s=8, lw=0, c=colours1)

    ax2.set_title(title2, fontsize=14)
    ax2.set_xlim(min(set[:, 0]), max(set[:, 0]))
    ax2.set_ylim(min(set[:, 1]), max(set[:, 1]))
    ax2.scatter(set[:, 0], set[:, 1], s=8, lw=0, c=colours2)
    fig.tight_layout()
    plt.show()

def data_generator():
    clust1 = np.random.normal(5, 2, (1000, 2))
    clust2 = np.random.normal(15, 3, (1000, 2))
    clust3 = np.random.multivariate_normal([17, 3], [[1, 0], [0, 1]], 1000)
    clust4 = np.random.multivariate_normal([2, 16], [[1, 0], [0, 1]], 1000)
    return np.concatenate((clust1, clust2, clust3, clust4))

datapoints  = data_generator()
bandwidths  = [cluster.estimate_bandwidth(dataset, quantile=0.1) for dataset in [datapoints]]
meanshifts  = [cluster.MeanShift(bandwidth=band, bin_seeding=True).fit(dataset) for dataset, band in zip([datapoints], bandwidths)]
dbscan      = cluster.DBSCAN(eps=1, min_samples=10, metric='euclidean').fit_predict(datapoints)

cluster_plots(datapoints, dbscan,meanshifts[0].predict(datapoints),title1='DBScan', title2='Meanshifts')

不知道该加什么才能得到我想要的。

【问题讨论】:

标签: python dbscan


【解决方案1】:

DBSCAN 集群不使用中心或半径的概念。

集群可以是任何形状,如果您考虑维基百科文章中的示例,集群“中心”可以从集群中得到回报,如果您有这样的香蕉形集群。

无论哪种方式,都没有 API 可以获取“中心”。无论您使用什么,Haversine 都会自己找到它。考虑基于图的东西,而不是算术平均值,例如图中心性。

【讨论】:

    猜你喜欢
    • 2016-06-22
    • 2014-05-22
    • 2019-08-31
    • 2019-10-01
    • 2019-09-19
    • 2017-02-08
    • 1970-01-01
    • 2020-08-27
    • 1970-01-01
    相关资源
    最近更新 更多