共享最近邻相似度

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_40793975/article/details/84817018

共享最近邻相似度

第三十四次写博客,本人数学基础不是太好,如果有幸能得到读者指正,感激不尽,希望能借此机会向大家学习。本文作为基于图的聚类的第二部分,主要针对“共享最近邻相似度(Shared Nearest Neighbour)”以及使用该度量的“Jarvis-Patrick聚类”进行介绍。其他基于图的聚类算法的链接可以在这篇综述《基于图的聚类算法综述(基于图的聚类算法开篇)》的结尾找到。

Shared Nearest Neighbour

  共享最近邻相似度(Shared Nearest Neighbour,简称SNN)基于这样一个事实,如果两个点都与一些相同的点相似,则即使直接的相似性度量不能指出,他们也相似,更具体地说,只要两个对象都在对方的最近邻表中,SNN相似度就是他们共享的近邻个数,计算过程如下图所示。需要注意的是,这里用来获取最近邻表时所使用的邻近性度量可以是任何有意义的相似性或相异性度量。

图1 计算SNN

  下面通过一个实例进行直观的说明,假设两个对象A、B(黑色的)都有8个最近邻,且这两个对象之间相互包含,这些最近邻中有4个(灰色的)是A、B共享的,因此这两个对象之间的SNN相似度为4,

图2 两个点之间的SNN相似度的计算

对象之间SNN相似度的相似度图称作SNN相似度图(SNN similarity graph),由于许多对象之间的SNN相似度为0,因此SNN相似度图非常稀疏。
  SNN相似度解决了使用直接相似度时出现的一些问题,首先,他可以处理如下情况,一个对象碰巧与另一个对象相对较近,但是两者分属于不同的簇,由于在这种情况下,两个对象一般不包含许多的共享近邻,因此他们的SNN密度很低。另一种情况是,当处理不同密度的簇时,由于一对对象之间的相似度不依赖于两者之间的距离,而是两者的共享近邻,因此SNN密度会根据簇的密度进行合适的伸缩。

Jarvis-Patrick聚类

  Jarvis-Patrick聚类(以下简称JP聚类),首先根据上一部分介绍的SNN相似度的计算方法,得到对象之间的SNN相似度并构建SNN相似度图,然后设置一个相似度阈值用来稀疏化相似度图,最后将连通分支作为簇,具体的伪代码如下所示。

图3 JP聚类算法伪代码

这种算法的空间复杂度是 O ( k m ) O\left(km\right) ,基本时间复杂度是 O ( m 2 ) O\left(m^2\right) ,如果在低维数据集上使用k-d树等技术,可以将时间复杂度有效的减小至 O ( m log m ) O\left(m\log{m}\right) ,另外需要注意的是,该算法会将位于两个不同密度簇之间的样本点作为噪声处理。
  JP算法擅长处理噪声点和离群点,并且能够处理具有不同聚类特征的簇,对高维数据集的效果良好,尤其擅长发现强相关对象的紧致簇。但是,与邻近度图稀疏化过程遇到的问题类似,该算法最终得到的簇可能仅仅取决于一条边,因此他可能分裂真正的簇或者合并本应该分裂的簇。

猜你喜欢

转载自blog.csdn.net/qq_40793975/article/details/84817018