如何在r中选择大于1的二阶导数

时间:2018-03-20 11:18:24

标签: r derivative dbscan

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

这里是KNN距离图。

KNN distplot

此图表有两个弹性点。我需要第二个弯曲点。我使用以下代码:

# 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的第二点?

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

因为x轴和y轴可比较,所以这种方法不起作用。它对规模过于敏感。

找到肘部/膝盖/拐点是主观的,不能可靠地自动化。