我有一个看似简单的问题。我需要有人帮我澄清一下在ELKI实现中DBSCAN的MinPts参数的含义。
如果我使用k = 4的值来绘制排序的k-距离图,这意味着点p到其第四个最近邻居的距离。这意味着邻域包含5个点(k + 1);4个邻居加上点p。
在ELKI中,MinPts是仅指邻居,还是也包括点p?在上述情况下,它应该设置为4还是5?
原始DBSCAN论文(Ester等人,1996年)提到将MinPts设置为k(MinPts = 4)。DBSCAN的维基百科文章似乎也暗示MinPts指的是点p周围的邻居。然而,ELKI似乎期望MinPts被设置为k + 1(MinPts = 5)。
请有人帮我澄清一下。
回答:
支持包含查询点的论点:
如果你在一个数据库环境中,并且向数据库发送查询
选择在坐标x,y,z周围半径r内的所有对象
那么数据库会包含查询点,如果它被存储在数据库中。特别是,如果不希望包含它,你可以很容易地将其移除。从数据库的角度来看,查询应该包含查询点,如果它在数据库中,如果不在数据库中,则不包含。
更进一步,如果你进行密度估计,那么每个数据点都应该对密度有所贡献,不是吗?为什么一个点会特殊?如果有其他点具有完全相同的坐标怎么办?如果你在数据库中不存在的点处估计密度会怎样?你会看到当你从查询点稍微移动时,密度会突然增加!
如果你试图将k最近邻定义为对数据库D的查询,并且不要求查询点x是数据库的一部分,那么结果自然应该包含查询点,如果它是D的一部分。
反对包含查询点的论点:
另一方面,1最近邻通常是查询点,这一点是违反直觉的。通常,当你在寻找“最近邻居”时,你确实是指“最近的其他对象”,不幸的是。即便这在形式上翻译为“在我的数据库中我的查询点坐标的最近对象,不包括我的查询点”。
文献中使用不一致:
不幸的是,文献中对此的使用并不一致。一些文章/作者/应用包含查询点,而另一些则不包含。我可以从文献中列举出许多支持两种情况的例子。
甚至同一篇文章有时在一个图中包含查询点,但在另一个图中不包含!
永远不会有一个解决方案能满足所有人的期望,因为人们对什么是“正确”的看法不同,不幸的是。
要具体,并双重检查!
你必须决定你想要的行为是什么,并双重检查一切是否按你期望的方式运行。记录你的决定和观察。
请自己检查ELKI中k距离图的实现是否包含查询点。我们甚至可能(已经)在0.7或0.8版本中更改了这个类的行为;所以对我来说可能与你不同。真的,真的要查看你所使用的确切版本的源代码。
如果k距离图不包含查询点,你需要使用3距离来对应minPts=4
。如果它包含查询点,那么4距离与minPts=4
一致。我相当确定DBSCAN确实计算查询点,基于上述原因(数据库视角,密度估计视角)。因此,对于DBSCAN,minPts=1是无意义的(每个点都是核心点),minPts=2是单链接聚类(任何epsilon邻居都被合并)。只有当minPts > 2时,你才开始得到真正的DBSCAN结果。
GDBSCAN建议使用2*dim-1
而不是4;我通常从minPts=10
开始,然后尝试20
。选择较大的minPts
有几个原因:
- 较高的维度通常需要较大的
minPts
(但对于文本数据,维度是无意义的 – 最多根据内在维度选择) - 噪声:数据越嘈杂,你需要的
minPts
就越高 - 重复:如果你有很多重复,你同样需要增加
minPts
但不要过度。随着查询半径的增大,索引效率会显著下降。你希望选择尽可能小的minPts
,同时仍然得到有趣的结果。还要使用多个值,以获得不同的视角。
记住,聚类是探索性的数据挖掘。它意味着你需要实验参数,研究结果,重复。因为没有正确的聚类结果。聚类结果的质量在于你是否能从中获得对数据的新见解。一个仅仅复制已知结果的聚类实际上是失败的。