2014-10-31 309 views
2

我一直在尝试使用scikit来实现DBSCAN,至今未能确定epsilon和min_sample的值会给我一大堆的簇。我试图在距离矩阵求出平均值,并用于对平均的任一侧的值,但还没有得到簇的数目令人满意:Scikit DBSCAN eps和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

你有多少个样品? – Phani 2014-10-31 02:12:27

回答

2

尝试将min_samples参数更改为较低的值。该参数影响每个群集形成的最小大小。可能是,可能形成的簇都是小尺寸的,而且你现在使用的参数对于它们的形成来说太高了。

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

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