我一直在尝试使用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不是距离矩阵,而是特征向量的矩阵。所以请告诉我如何确定这些参数
-
绘制一个k距离图,然后在那里寻找膝盖。正如DBSCAN文章中所建议的那样。(你的min_samples可能太高了——那时你可能在100距离图中没有膝盖。)
-
将数据可视化。如果您无法直观地看到集群,则可能没有集群。不能强制DBSCAN生成任意数量的集群。如果您的数据集是高斯分布,则假设仅为单个集群。
尝试将min_samples
参数更改为较低的值。此参数影响所形成的每个簇的最小大小。可能是,可能形成的集群都很小,而你现在使用的参数太高,无法形成。