验证 DBSCAN 集群的最佳方法
Best way to validate DBSCAN Clusters
我已经使用 DBSCAN 的 ELKI 实现从火灾数据集中识别火灾热点集群,结果看起来相当不错。数据集是空间的,集群基于纬度、经度。基本上,DBSCAN 参数可识别火点高度集中(由密度定义)的热点区域。这些是火灾热点地区。
我的问题是,在尝试了几个不同的参数并找到一对给出合理的聚类结果后,如何验证聚类?
是否有适合我的用例的正式验证方法?或者这是主观的,取决于应用领域?
ELKI 包含许多用于聚类的评估函数。
使用 -evaluator
参数启用它们,来自 evaluation.clustering.internal
package.
其中一些 不会自动 运行 因为它们具有二次 运行 时间成本 - 可能比您的聚类算法更多。
我不相信这些措施。它们专为特定的聚类算法而设计;并且对于决定 k-means 的 k 参数最有用;仅此而已。如果你盲目地采取这些措施,大多数时候你会得到无用的结果。此外,这些措施不适用于噪声,无论我们尝试过哪种策略。
最便宜的是基于标签的评估器。这些将自动 运行,但显然您的数据没有标签(或者它们是数字,在这种情况下您需要相应地设置 -parser.labelindex
参数)。就个人而言,我更喜欢 Adjusted Rand Index 来比较两个聚类的相似性。所有这些索引都对 噪声 敏感,因此它们不能很好地与 DBSCAN 一起使用,除非您的参考与 DBSCAN 具有相同的噪声概念。
如果负担得起,"subjective"评价总是最好的。
您想解决问题,而不是数字。这就是 "data science" 的全部要点,以问题为导向并 解决问题 ,而不是沉迷于最小化一些随机质量数。如果结果在现实中不起作用,那你就失败了。
有多种方法可以验证 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
我已经使用 DBSCAN 的 ELKI 实现从火灾数据集中识别火灾热点集群,结果看起来相当不错。数据集是空间的,集群基于纬度、经度。基本上,DBSCAN 参数可识别火点高度集中(由密度定义)的热点区域。这些是火灾热点地区。
我的问题是,在尝试了几个不同的参数并找到一对给出合理的聚类结果后,如何验证聚类?
是否有适合我的用例的正式验证方法?或者这是主观的,取决于应用领域?
ELKI 包含许多用于聚类的评估函数。
使用 -evaluator
参数启用它们,来自 evaluation.clustering.internal
package.
其中一些 不会自动 运行 因为它们具有二次 运行 时间成本 - 可能比您的聚类算法更多。
我不相信这些措施。它们专为特定的聚类算法而设计;并且对于决定 k-means 的 k 参数最有用;仅此而已。如果你盲目地采取这些措施,大多数时候你会得到无用的结果。此外,这些措施不适用于噪声,无论我们尝试过哪种策略。
最便宜的是基于标签的评估器。这些将自动 运行,但显然您的数据没有标签(或者它们是数字,在这种情况下您需要相应地设置 -parser.labelindex
参数)。就个人而言,我更喜欢 Adjusted Rand Index 来比较两个聚类的相似性。所有这些索引都对 噪声 敏感,因此它们不能很好地与 DBSCAN 一起使用,除非您的参考与 DBSCAN 具有相同的噪声概念。
如果负担得起,"subjective"评价总是最好的。
您想解决问题,而不是数字。这就是 "data science" 的全部要点,以问题为导向并 解决问题 ,而不是沉迷于最小化一些随机质量数。如果结果在现实中不起作用,那你就失败了。
有多种方法可以验证 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