问题描述
我正在研究聚类算法之间的比较,我想知道 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()
对象输出的列表中。