我使用了ELKI实现的DBSCAN来识别火灾数据集中火热点聚类,结果看起来相当不错。数据集是空间性的,聚类基于纬度和经度。基本上,DBSCAN参数识别出火热点区域,这些区域具有高密度的火点(由密度定义)。这些就是火热点区域。
我的问题是,在尝试了几个不同的参数并找到了一对能给出合理聚类结果的参数后,如何验证这些聚类?
对于我的用例,有没有合适的正式验证方法?还是这取决于应用领域的主观性?
回答:
ELKI包含了一些用于聚类评估的函数。
使用-evaluator
参数来启用它们,来自evaluation.clustering.internal
包。
其中一些不会自动运行,因为它们的运行时间成本是二次的——可能比你的聚类算法还要高。
我不信任这些度量。它们是为特定的聚类算法设计的;主要用于决定k-means的k参数;除此之外用处不大。如果你盲目地按照这些度量来,你大多数时候会得到无用的结果。此外,这些度量在处理噪声时,无论我们尝试的哪种策略,都不起作用。
最便宜的是基于标签的评估器。这些会自动运行,但显然你的数据没有标签(或者它们是数字的,在这种情况下你需要相应地设置-parser.labelindex
参数)。个人而言,我更喜欢使用调整后的兰德指数来比较两个聚类的相似性。所有这些指数对噪声都很敏感,所以它们在DBSCAN中表现得不太好,除非你的参考具有与DBSCAN相同的噪声概念。
如果你负担得起,”主观”评估总是最好的。
你想要解决的是一个问题,而不是一个数字。这就是”数据科学”的全部意义所在,问题导向并解决问题,而不是执着于最小化某个随机的质量数字。如果结果在现实中不起作用,你就失败了。