我正在寻找epsilon的确切值来运行DBSCAN
聚类算法。
这里是KNN
距离图。
此图表有两个弹性点。我需要第二个弯曲点。我使用以下代码:
# 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])]
如何改进我的代码以获得衍生值高于1的第二点?
答案 0 :(得分:0)
抱歉,无法重现您的代码(可能是因为包版本冲突),但似乎which
函数可以帮助您找到所有位置ddist > 1
:which(ddist > 1)
答案 1 :(得分:0)
因为x轴和y轴不可比较,所以这种方法不起作用。它对规模过于敏感。
找到肘部/膝盖/拐点是主观的,不能可靠地自动化。