如何比较 dbscan 集群/选择 epsilon 参数

机器算法验证 聚类 scikit-学习 参数化 数据库扫描
2022-03-22 20:28:43

我目前正在尝试在 python 中使用 scikit learn 进行 DBSCAN 聚类。我想在改变 epsilon 参数时比较不同的输出,以便选择正确的 epsilon 参数。我以 iris 数据集为例。

为了比较集群,我考虑尝试在一个范围内(例如:0.1、0.2、...、1)用 epsilon 进行集群。现在,当我运行 kmeans 或层次聚类时,我可以通过检查间隙统计数据来选择我的 k 值,或者通过查看惯性并选择在惯性与 k 图上有“弯头”的 ak。

我的问题是我认为这将不再起作用,因为所有集群中的点总数在 DBSCAN 中不是恒定的。实际上,取决于 epsilon,“噪声样本”未分类点的数量会有所不同。结果,对于低 epsilon,我可能只有几分,导致非常小的惯性,这将是有偏差的。我可以考虑差距统计,因为我每次都可以生成大小合适的随机样本。但我想知道我是否会离开论文的有效性框架,我不确定是否仍然可以比较不同的聚类。

有没有人知道如何比较不同的总大小集群,更准确地说是不同 epsilon 的 dbscan 结果?轮廓系数会起作用还是对总尺寸也很敏感?

1个回答

惯性只是球状星团的明智衡量标准。即不适用于 DBSCAN。类似的推理适用于大多数内部度量:大多数是围绕基于质心的集群模型设计的,而不是任意形状的集群。

对于 DBSCAN,一个明智的衡量标准是密度连通性。但这需要与 DBSCAN 已经使​​用的参数相同的参数。

DBSCAN 的推荐方法是首先根据领域知识修复 minPts,然后绘制一个k-距离图(与k=minPts) 并在此图中查找肘部。或者,当具有选择 epsilon 的领域知识时(例如 1 米,当您有地理空间数据并且知道这是一个合理的半径时),您可以为此半径绘制密度图并在那里寻找肘部。

或者您只使用 OPTICS,其中 epsilon 仅用作提高性能的上限。