HBSCAN 成员概率

问题描述

我正在研究聚类算法之间的比较,我想知道 R 中的 HDBSCAN 如何计算所谓的成员“概率”

解决方法

dbscan 包中,hdbscan() 函数对作为输入传递的对象进行一些有效性检查,然后使用 {{1} 计算到其 k 最近邻居的距离矩阵}} 功能。 dbscan::kNNdist() 的值设置为传递给 k 函数的参数 minPts 减去 1。

dbscan()

然后使用核心距离作为密度的度量,并使用以下算法(来自 hdbscan.R 源)计算成员概率:

 core_dist <- kNNdist(x,k = minPts - 1)

对于显着簇对象 ## Generate membership 'probabilities' using core distance as the measure of density prob <- rep(0,length(cl)) for (cid in sl){ ccl <- res[[as.character(cid)]] max_f <- max(core_dist[which(cl == cid)]) pr <- (max_f - core_dist[which(cl == cid)])/max_f prob[cl == cid] <- pr } 中的每个簇id,算法计算最大核心距离,然后通过从最大距离中减去每个元素的距离,将结果除以最大距离来构建概率一个比例。

然后将这些覆盖概率插入到由 sl 函数作为 hdbscan() 对象输出的列表中。