我使用的是Sander等人1998 to determine MinPts and epsilon to use DBSCAN on my dataset. As Sanders et all suggests minpts=dim*2-1=k (in my case 9 dimensions --> minpts=k=17). In the paper one should chose the "first valley". I can see two valleys but which one is the first one? And what value would you chose for epsilon? kdistplot_with_duplicates
因为Sanders还建议,只有在没有复制品的情况下才应该使用这种方法,没有复制品的情况下才应该使用:(虽然我认为在这种情况下,这不重要) kdistplot_without_duplicates。 哪个山谷应该被认为是“第一”山谷
使用的代码:
ns = 17
nbrs = NearestNeighbors(n_neighbors=ns, metric='euclidean').fit(data)
distances, indices = nbrs.kneighbors(data)
distanceDec = sorted(distances[:,ns-1], reverse=True)
plt.plot(list(range(1,683+1)), distanceDec)
它是左边的山谷(epsilon的最小值):有了这个值,左边的所有点都是未聚类的(被认为是噪声),右边的所有点都是聚类的
您可以阅读原始的DBSCAN paper,特别是参见图4以更好地理解其基本原理
这表明可能存在簇的层次结构,或具有不同密度的簇
在这种情况下,DBSCAN上的单个阈值将是不够的。您可以尝试使用两个不同的阈值进行两次聚类。或者使用分层版本,如光学和HDBSCAN。最近,人们对HDBSCAN非常满意,我在光学方面取得了更好的效果(我相信为什么有一个很好的理由,即我希望边界点成为集群的一部分)
相关问题 更多 >
编程相关推荐