我有以下代码来估计DBSCAN的eps
。如果代码没问题,那么我已经获得了knn distance plot
。代码是:
ns = 4
nbrs = NearestNeighbors(n_neighbors=ns).fit(data)
distances, indices = nbrs.kneighbors(data)
distanceDec = sorted(distances[:,ns-1], reverse=True)
plt.plot(indices[:,0], distanceDec)
其中data
是像素位置(行和列)的数组。我已经获得了一个情节,但我没有得到如何确定eps
。根据DBSCAN
论文,
阈值点是排序的k-dist图的第一个谷中的第一个点
我不知道如何在代码中实现它。此外,ns = 4
是我的minPts
还是有任何方法来估计minPts
的eps
?
使用
plt.plot(list(range(1,noOfPointsYouHave+1)), distanceDec)
你会得到一个肘部情节。曲线急剧变化的距离是你的epsilon。
如果您愿意,也可以使reverse = False。
据我所知,这是由人类在视觉上决定的。
自动化似乎不起作用。
或者您可以使用OPTICS。