我有一个1000维的数据集,我正在尝试使用Python中的DBSCAN对数据进行聚类。我很难理解选择什么指标和原因。
有人可以解释一下吗?我该如何决定将eps
设置为哪个值?
我对数据的更精细结构感兴趣,因此min_value
设置为2.现在我使用在sklearn中为dbscan预设的常规度量,但是对于小的eps值,例如{{1 }< 0.07,我得到了一些聚类但是错过了许多点,对于更大的值,我得到了几个更小的聚类和一个巨大的聚类。我明白一切都取决于手头的数据,但我对如何以连贯和结构化的方式选择eps值以及选择哪些指标感兴趣!
我已阅读this question,其中有关于10个维度的答案我有1000个:)而且我也不知道如何评估我的指标,因此有一个更精细的解释会更有趣:评估你的指标!
编辑:或者有关使用现有python实现处理高维数据的其他聚类算法的提示。
答案 0 :(得分:4)
首先,使用minPts=2
您实际上并没有进行DBSCAN群集,但结果将退化为单链接群集。
你真的应该使用minPts=10
或更高版本。
不幸的是,您没有费心去告诉我们您实际使用的距离指标!
Epsilon在很大程度上取决于您的数据集和指标。在不知道参数和数据集的情况下,我们无法帮助您。您是否尝试绘制距离直方图以查看哪些值是典型值?这可能是选择此阈值的最佳启发式方法:查看距离直方图(或其样本)的分位数。
但请注意,OPTICS确实摆脱了这个参数(至少在你有一个正确的实现时)。使用Xi方法提取簇时,您只需要足够大的epsilon来切割您感兴趣的结构(并且足够小以获得您想要的运行时间 - 较大的较慢,但不是线性的)。 Xi然后给出相对增加的距离,这被认为是显着的。