如何select r中大于1的二阶导数

How to select the second derivative greater than 1 in r

我正在寻找 运行 DBSCAN 聚类算法的 epsilon 的精确值。

这是 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 的第二个点?

抱歉,无法重现您的代码(可能是因为包版本冲突),但 which 函数似乎可以帮助您找到所有位置,其中 ddist > 1: which(ddist > 1)

因为x轴和y轴不能比较,所以这种方法行不通。它对比例太敏感了。

寻找 elbow/knee/inflexion 是主观的,不能可靠地自动化。