是的,DBSCAN 参数,尤其是参数eps(epsilon 邻域的大小)。在文档中,我们有一个“在图中寻找膝盖”。
很好,但它需要视觉分析。如果我们想让事情自动化,它实际上并没有用。所以,我想知道是否有可能在几行代码中找到一个好的 eps。
让我们想象一下:
- 评估 kNN 距离
- 对这些值进行排序
- 缩放它们(使值始终在 0 和 1 之间)
- 评估导数
- 找到导数高于某个值的第一个点,让我们试试 1
在 R 中,它看起来像(使用 DBSCAN 文档中的 iris 数据集):
# evaluate kNN distance
dist <- dbscan::kNNdist(iris, 4)
# order result
dist <- dist[order(dist)]
# scale
dist <- dist / max(dist)
# derivative
ddist <- diff(dist) / ( 1 / length(dist))
# get first point where derivative is higher than 1
knee <- dist[length(ddist)- length(ddist[ddist > 1])]
这种方法是否相关或完全是胡说八道?

