Python DBSCAN kdist绘制多个山谷

Python DBSCAN kdist绘制多个山谷,python,parameters,scikit-learn,cluster-analysis,dbscan,Python,Parameters,Scikit Learn,Cluster Analysis,Dbscan,我使用Sander等人1998确定MinPts和epsilon在我的数据集上使用DBSCAN。 正如Sanders等人所建议的那样,minpts=dim*2-1=k(在我的例子中是9维-->minpts=k=17)。 在论文中,我们应该选择“第一谷”。我能看到两个山谷,但哪一个是第一个?你会为ε选择什么值? 由于桑德斯还建议,只有在没有重复项的情况下才应使用这种方法,而没有重复项的情况下才应使用这种方法:(尽管我认为在这种情况下这不重要) . 哪个山谷应该被视为“第一”山谷 使用的代码: ns

我使用Sander等人1998确定MinPts和epsilon在我的数据集上使用DBSCAN。 正如Sanders等人所建议的那样,minpts=dim*2-1=k(在我的例子中是9维-->minpts=k=17)。 在论文中,我们应该选择“第一谷”。我能看到两个山谷,但哪一个是第一个?你会为ε选择什么值?

由于桑德斯还建议,只有在没有重复项的情况下才应使用这种方法,而没有重复项的情况下才应使用这种方法:(尽管我认为在这种情况下这不重要) . 哪个山谷应该被视为“第一”山谷

使用的代码:

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)

它是左侧的谷(ε的最小值):使用此值,左侧的所有点都将不聚集(视为噪波),右侧的所有点都将聚集


您可以阅读原文,尤其是图4,以更好地理解其基本原理。

这表明可能存在簇的层次结构,或具有不同密度的簇


在这种情况下,DBSCAN上的单个阈值是不够的。您可以尝试使用两个不同的阈值进行两次聚类。或者使用分层版本,如光学和HDBSCAN。最近,人们对HDBSCAN非常满意,我在光学方面取得了更好的效果(我相信有一个很好的理由,即我希望边界点成为集群的一部分)

是的,据说这被认为是噪声。如果它在核心点附近,它应该仍然能够在集群中结束。