如何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 是主观的,不能可靠地自动化。
我正在寻找 运行 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 是主观的,不能可靠地自动化。