Scikit DBSCAN eps 和 min_sample 值确定

Posted

技术标签:

【中文标题】Scikit DBSCAN eps 和 min_sample 值确定【英文标题】:Scikit DBSCAN eps and min_sample value determination 【发布时间】:2014-12-27 06:48:00 【问题描述】:

我一直在尝试使用 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_)

输出:

Estimated number of clusters: 1

输入:

db=DBSCAN(eps=27.0,min_samples=100).fit(X)

输出:

Estimated number of clusters: 1

还有其他信息:

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

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

【问题讨论】:

你有多少样品? 【参考方案1】:

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

    可视化您的数据。如果您无法直观地看到集群,则可能没有集群。不能强制 DBSCAN 生成任意数量的集群。如果您的数据集是一个高斯分布,那么它假定只是一个单一的集群。

【讨论】:

【参考方案2】:

尝试将min_samples 参数更改为较低的值。此参数影响形成的每个集群的最小大小。可能是,可能形成的集群都是小规模的,而您现在使用的参数太高而无法形成。

【讨论】:

以上是关于Scikit DBSCAN eps 和 min_sample 值确定的主要内容,如果未能解决你的问题,请参考以下文章

python中余弦度量的DBSCAN错误

用scikit-learn学习DBSCAN聚类

用scikit-learn学习DBSCAN聚类

各向异性点聚类

DBSCAN、python的参数eps

rapidminer 和 scikit-learn 中的 DBSCAN 算法