在某些情况下,依赖于相似度和密度的标准方法的聚类技术不能产生理想的聚类效果。
存在的问题
1.传统的相似度在高维数据上的问题
传统的欧几里得密度在高维空间变得没有意义。特别在文本处理之中,以分词作为特征,数据的维度将会非常得高,文本与文本之间的相似度低并不罕见。然而许多文档都有着不同类的最近邻,虽然近邻之间相似度虽然高,然而却不是同一类文档。由此可以看出,传统的相似度成为了不可靠的指导。
2.密度不同的问题
传统的基于密度的聚类问题,虽然能够有效的发现不同形状的簇,然而由于在计算密度的时候是通过计算之间的欧式距离确定密度的,若存在密度差别较大的簇将无法很好地识别。
如下图,显示了一对具有不同密度点的二维簇。右边的簇尽管不太稠密,但形成了同样合法的簇。
若使用传统的dbscan聚类算法(sklearn开源包),将获得以下聚类效果,其中黑色点表示噪声。
SNN相似度
为了解决上诉问题,提出了 共享最近邻 (Shared Nearest Neighbor, SNN)相似度。如字面意思,通过计算2个点之间共享的近邻个数,确定两点之间的相似度。
算法流程
找出所有点的k-最近邻if 两个点x和y不是在对方的k-最近邻中 then similarity(x, y) = 0else similarity(x, y) = 共享的近邻个数
SNN相似度只依赖于两个对象共享的最近邻的个数,而不是这些近邻之间相距多远。这样一来相似度关于点的密度自动进行缩放