Scikit DBSCAN eps和min_sample值确定

Rak*_*rma 3 python cluster-analysis dbscan scikit-learn

我一直在尝试使用scikit实现DBSCAN,但到目前为止,我无法确定epsilon和min_sample的值,这将给我带来相当数量的集群。我尝试在距离矩阵中找到平均值,并在均值的任一侧使用了值,但没有令人满意的聚类数:

输入:

db=DBSCAN(eps=13.0,min_samples=100).fit(X)
labels = db.labels_

# Number of clusters in labels, ignoring noise if present.
n_clusters_ = len(set(labels)) - (1 if -1 in labels else 0)
print('Estimated number of clusters: %d' % n_clusters_)
Run Code Online (Sandbox Code Playgroud)

输出:

Estimated number of clusters: 1
Run Code Online (Sandbox Code Playgroud)

输入:

db=DBSCAN(eps=27.0,min_samples=100).fit(X)
Run Code Online (Sandbox Code Playgroud)

输出:

Estimated number of clusters: 1
Run Code Online (Sandbox Code Playgroud)

其他信息也是如此:

The average distance between any 2 points in the distance matrix is 16.8354
the min distance is 1.0
the max distance is 258.653
Run Code Online (Sandbox Code Playgroud)

同样,在代码中传递的X也不是距离矩阵,而是特征向量的矩阵。所以请告诉我如何确定这些参数

Ano*_*sse 5

  1. 绘制一个k距离图,并在那里寻找膝盖。如DBSCAN文章中所建议。(您的min_samples可能太高-那时您可能不会在100距离图中屈膝。)

  2. 可视化您的数据。如果您看不到集群,则可能没有集群。不能强迫DBSCAN产生任意数量的集群。如果您的数据集是高斯分布,则应该仅是单个群集。