"Clustering by fast search and find of density peaks"是今年6月份在《Science》期刊上发表的的一篇论文,论文中提出了一种非常巧妙的聚类算法。经过几天的努力,终于用python实现了文中的算法,下面与大家分享一下自己对算法的理解及实现过程中遇到的问题和解决办法。

首先,该算法是基于这样的假设:类簇中心被具有较低局部密度的邻居点包围,且与具有更高密度的任何点有相对较大的距离。对于每一个数据点,要计算两个量:点的局部密度和该点到具有更高局部密度的点的距离,而这两个值都取决于数据点间的距离

数据点的局部密度定义为式(1):

其中,如果,那么;否则是一个截断距离。基本上,等于与点的距离小于的点的个数。算法只对不同点的的相对大小敏感,这意味着对于大数据集,分析结果对于的选择有很好鲁棒性。

数据点是点到任何比其密度大的点的距离的最小值式(2):

对于密度最大的点,我们可以得到

图1.中的简单示例展示了算法的核心思想。图1.A展示了二维空间中的28个点。可以发现点1和点10的密度最大,故将其作为类簇中心。图1.B展示了对于每一个点的作为

图1.算法在二维空间的展示。(A)点的分布 数据点按照密度降序排列。(B)(A)中数据的决策图 不同的颜色代表不同的类簇。

函数的图示,称其为决策图。点9和点10的相似,但值却有很大差别:点9属于点1的类簇,其它几个有更高的的点距其很近,然而点10的有更高密度的最近邻属于其它的类簇。所以,正如预期的那样,只有具有高和相对较高的的点才是类簇中心。因为点26、27、28是孤立的,所以有相对较高的值和低值,它们可以被看作是由单个点做成的类簇,也就是异常点。

类簇中心找到后,剩余的每个点被归属到它的有更高密度的最近邻所属类簇。类簇分配只需一步即可完成,不像其它算法要对目标函数进行迭代优化。

在聚类分析中,定量的衡量分配的可信度是很重要的。在该算法中,首先为每个类簇定义一个边界区域(即分配到该类簇但于其它类簇的点的距离小于的点的集合),然后为每个类簇的找到其边界区域中密度最高的点,并以来表示该点的密度。类簇中局部密度值比大的点被看作是类簇的核心部分(即分配到该类簇的可靠性较高),其他点被看作是类簇的光晕部分(亦可以被看作是噪声)。

图2.合成点分布的结果。(A)绘制的点分布的概率分布。(B和C)分别为4000和1000样本点的点分布。每个点以其颜色表示所属类簇,黑色点属于光晕类簇。(D和E) 相应的决策图,彩色的点表示类簇中心。(F)被归属到错误的类簇的点的比例作为样本维度的函数。误差线表明均值的标准差。

从图2.(F)中可以看到,错分点的比例即使在只有1000个点的小样本中仍保持在1%以下,说明算法有很好的鲁棒性。

为图2.B中数据赋予不同的值,却得到几乎一样的结果。一般来说,我们可以选择使得点的平均邻居数大概是数据集中点的总数的1-2%。对于较小的数据集,可能会被大的统计误差影响,在这种情况下,需要通过更准确的方法估计密度(例如可以采取文章中提到的指数核的方法)。

从下图中可以看到,该算法对于各种数据级都能达到很好的聚类效果。

算法对于不严重影响以下的距离,也就是保持等式(1)的密度估计量不变的度量标准的变化有很好的鲁棒性。很明显,等式(2)中的距离将会被这种度量标准的改变所影响,但很容易意识到决策图的结构(尤其是有较大的值的点的个数)是一个按密度值排序的结果,并不是距离较远的点的真实距离。

感兴趣的同学可以在这里下载算法的python实现代码。因为现在的实现并不能对所有的数据集都得到良好的效果,所以如果哪位同学有更好的想法,希望能不吝赐教。

Science论文"Clustering by fast search and find of density peaks"学习笔记的更多相关文章

  1. Science14年的聚类论文——Clustering by fast search and find of density peaks

    欢迎转载,转载请注明:本文出自Bin的专栏blog.csdn.net/xbinworld. 这是一个比较新的聚类方法(文章中没看见作者对其取名,在这里我姑且称该方法为local density clu ...

  2. Clustering by fast search and find of density peaks

    参考:http://www.52ml.net/16296.html 这个算法的优点就在于,它首先一步就能找到聚类中心,然后划分类别.而其他算法需要反复迭代才能找到中心聚类. 就是不知道代码该怎么写.. ...

  3. 处理输入为非对角阵的Clustering by fast search and find of density peak代码

    Clustering by fast search and find of density peak. Alex Rodriguez, Alessandro Laio 是发表在Science上的一篇很 ...

  4. 一种新型聚类算法(Clustering by fast search and find of density peaksd)

    最近在学习论文的时候发现了在science上发表的关于新型的基于密度的聚类算法 Kmean算法有很多不足的地方,比如k值的确定,初始结点选择,而且还不能检测费球面类别的数据分布,对于第二个问题,提出了 ...

  5. Clustering by density peaks and distance

    这次介绍的是Alex和Alessandro于2014年发表在的Science上的一篇关于聚类的文章[13],该文章的基本思想很简单,但是其聚类效果却兼具了谱聚类(Spectral Clustering ...

  6. 解读论文《Agglomerative clustering of a search engine query log》,以解决搜索推荐相关问题

    <Agglomerative clustering of a search engine query log> 论文作者:Doug Beeferman 本文将解读此篇论文,此论文利用搜索日 ...

  7. Clustering and Exploring Search Results using Timeline Constructions (paper2)

    作者:Omar Alonso 会议:CIKM 2009 摘要: 截至目前(2009),通过提取文档中内嵌的时间信息来展现和聚类,这方面的工作并不多. 在这篇文章中,我们将提出一个“小插件”增添到现有的 ...

  8. Backup and restore of FAST Search for SharePoint 2010

    一个同事问我一个问题: 如果FAST Search for SharePoint 2010被full restore到了一个之前的时间点, 那么当FAST Search重新开始一个增量爬网的时候, 会 ...

  9. NASNet学习笔记——   核心一:延续NAS论文的核心机制使得能够自动产生网络结构;    核心二:采用resnet和Inception重复使用block结构思想;    核心三:利用迁移学习将生成的网络迁移到大数据集上提出一个new search space。

    from:https://blog.csdn.net/xjz18298268521/article/details/79079008 NASNet总结 论文:<Learning Transfer ...

随机推荐

  1. delphi execCommand

    WebBrowser1.Document as IHTMLDocument2 关键点 function execCommand(const cmdID: WideString; showUI: Wor ...

  2. Android Service AIDL 远程调用服务 【简单音乐播放实例】

    Android Service是分为两种: 本地服务(Local Service): 同一个apk内被调用 远程服务(Remote Service):被另一个apk调用 远程服务需要借助AIDL来完成 ...

  3. Asp.Net MVC 3【Filters(过滤器)】

    这里分享MVC里的Filters(过滤器),什么是MVC里的过滤器,他的作用是什么? 过滤器的请求处理管道中注入额外的逻辑.他们提供了一个简单而优雅的方式来实现横切关注点.这个术语是指所有对应用程序的 ...

  4. Mac 10.9 自带apache2虚拟目录设置

    花了好几天时间做这个事,终于成功,把正确的做法记录一下. 如果是第一次使用apache,可以先执行sudo apachectl start,然后在浏览器里打开http://localhost看看效果, ...

  5. ruby 疑难点之—— yield 和 yield self

    yield 所有的"方法(methods)"隐式跟上一个"块(block)"参数. 块参数也可以明确给定,形式就是在参数前面加一个"&&quo ...

  6. 给jdk写注释系列之jdk1.6容器(7)-TreeMap源码解析

    TreeMap是基于红黑树结构实现的一种Map,要分析TreeMap的实现首先就要对红黑树有所了解.      要了解什么是红黑树,就要了解它的存在主要是为了解决什么问题,对比其他数据结构比如数组,链 ...

  7. The _imageingft C module is not installed

    遇到的问题如图所示,使用的方法: 下载地址:http://effbot.org/downloads 并没有解决,有人用这样的方法成功了,只能说很遗憾,我并没有成功 大神给的解决办法,不要再win平台下 ...

  8. poj 2289 网络流 and 二分查找

    #include<cstdio> #include<iostream> #include<cstring> #include<algorithm> #d ...

  9. 纯CSS制作“跳动的心”demo

    <!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8&qu ...

  10. 什么是MVC开发模式以及它和传统开发模式的区别

    Model1模式:使用纯JSP或者JSP+JavaBean开发,存在如下缺陷:JSP页面中混合了HTML和JAVA代码,从而给代码的开发和阅读带 来了麻烦:系统后期维护和扩展非常困难,例如在JSP页面 ...