我已经使用DBSCAN的ELKI实现从火灾数据集中识别火灾热点群集,结果看起来非常好。数据集是空间的,集群基于纬度,经度。基本上,DBSCAN参数识别存在高浓度火点(由密度定义)的热点区域。这些是火灾热点地区。
我的问题是,在尝试了几个不同的参数并找到一个能够提供合理聚类结果的对后,如何验证群集?
我的用例是否有合适的正式验证方法?或者这主观取决于应用领域?
答案 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