验证DBSCAN集群的最佳方法

时间:2015-11-03 15:07:22

标签: cluster-analysis data-mining dbscan

我已经使用DBSCAN的ELKI实现从火灾数据集中识别火灾热点群集,结果看起来非常好。数据集是空间的,集群基于纬度,经度。基本上,DBSCAN参数识别存在高浓度火点(由密度定义)的热点区域。这些是火灾热点地区。

我的问题是,在尝试了几个不同的参数并找到一个能够提供合理聚类结果的对后,如何验证群集

我的用例是否有合适的正式验证方法?或者这主观取决于应用领域?

2 个答案:

答案 0 :(得分:3)

ELKI包含许多用于聚类的评估函数。

使用-evaluator参数从evaluation.clustering.internal package开始启用它们。

其中一些不会自动运行,因为它们具有二次运行时成本 - 可能比您的聚类算法更多。

信任这些措施。它们专为特定的聚类算法而设计;并且主要用于决定 k -means的 k 参数;不仅如此。如果你盲目地采取这些措施,大多数时候你会得到无用的结果。此外,这些措施不适用于噪音,我们尝试过这两种策略。

最便宜的是基于标签的评估员。这些将自动运行,但显然您的数据没有标签(或者它们是数字,在这种情况下,您需要相应地设置-parser.labelindex参数)。就个人而言,我更喜欢调整兰德指数来比较两个聚类的相似性。所有这些索引都对 noise 敏感,因此除非你的参考与DBSCAN具有相同的噪声概念,否则它们对DBSCAN的效果不佳。

如果你能负担得起,那么主观"评估总是最好的。

您想要解决问题,而不是号码。这就是"数据科学"的全部要点,面向问题,解决问题,而不是最大限度地减少一些随机质量数。如果结果在现实中不起作用,那么你就失败了。

答案 1 :(得分:1)

有多种方法可以验证DBSCAN集群输出。通常,我们可以区分内部索引和外部索引,具体取决于您是否有可用的标记数据。 对于DBSCAN,有一个很棒的内部验证指标,称为DBCV。

外部索引: 如果您有一些标记的数据,则外部索引将非常有用,并且可以证明群集与标记的数据相比的性能如何。一种示例性的索引是RAND索引。https://en.wikipedia.org/wiki/Rand_index

内部索引: 如果没有标签数据,则可以使用内部索引为聚类结果评分。通常,索引会计算聚类中点与其他聚类之间的距离,并尝试根据紧密度(聚类中的点彼此之间有多近?)为您评分。 可分离性(集群之间有多远?)。

对于DBSCAN,Moulavi等人有一种很棒的内部验证指标,称为 DBCV 。此处提供论文:https://epubs.siam.org/doi/pdf/10.1137/1.9781611973440.96 Python软件包:https://github.com/christopherjenness/DBCV