Scikit DBSCAN eps和min_sample值确定

时间:2014-10-31 01:51:40

标签: python scikit-learn cluster-analysis dbscan

我一直在尝试使用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不是距离矩阵,而是特征向量的矩阵。 所以请告诉我如何确定这些参数

2 个答案:

答案 0 :(得分:4)

  1. 绘制k距离图,并在那里寻找膝盖。正如DBSCAN文章中所建议的那样。 (你的min_samples可能太高了 - 你可能在100距离图中没有膝盖。)

  2. 可视化您的数据。如果您无法直观地看到群集,可能没有群集。不能强迫DBSCAN生成任意数量的集群。如果您的数据集是高斯分布,则假设仅为单个群集。

答案 1 :(得分:3)

尝试将min_samples参数更改为较低的值。此参数会影响所形成的每个群集的最小大小。可能是,要形成的可能簇都是小尺寸的,你现在使用的参数太高而无法形成它们。