Science论文"Clustering by fast search and find of density peaks"学习笔记
"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"学习笔记的更多相关文章
- Science14年的聚类论文——Clustering by fast search and find of density peaks
欢迎转载,转载请注明:本文出自Bin的专栏blog.csdn.net/xbinworld. 这是一个比较新的聚类方法(文章中没看见作者对其取名,在这里我姑且称该方法为local density clu ...
- Clustering by fast search and find of density peaks
参考:http://www.52ml.net/16296.html 这个算法的优点就在于,它首先一步就能找到聚类中心,然后划分类别.而其他算法需要反复迭代才能找到中心聚类. 就是不知道代码该怎么写.. ...
- 处理输入为非对角阵的Clustering by fast search and find of density peak代码
Clustering by fast search and find of density peak. Alex Rodriguez, Alessandro Laio 是发表在Science上的一篇很 ...
- 一种新型聚类算法(Clustering by fast search and find of density peaksd)
最近在学习论文的时候发现了在science上发表的关于新型的基于密度的聚类算法 Kmean算法有很多不足的地方,比如k值的确定,初始结点选择,而且还不能检测费球面类别的数据分布,对于第二个问题,提出了 ...
- Clustering by density peaks and distance
这次介绍的是Alex和Alessandro于2014年发表在的Science上的一篇关于聚类的文章[13],该文章的基本思想很简单,但是其聚类效果却兼具了谱聚类(Spectral Clustering ...
- 解读论文《Agglomerative clustering of a search engine query log》,以解决搜索推荐相关问题
<Agglomerative clustering of a search engine query log> 论文作者:Doug Beeferman 本文将解读此篇论文,此论文利用搜索日 ...
- Clustering and Exploring Search Results using Timeline Constructions (paper2)
作者:Omar Alonso 会议:CIKM 2009 摘要: 截至目前(2009),通过提取文档中内嵌的时间信息来展现和聚类,这方面的工作并不多. 在这篇文章中,我们将提出一个“小插件”增添到现有的 ...
- Backup and restore of FAST Search for SharePoint 2010
一个同事问我一个问题: 如果FAST Search for SharePoint 2010被full restore到了一个之前的时间点, 那么当FAST Search重新开始一个增量爬网的时候, 会 ...
- NASNet学习笔记—— 核心一:延续NAS论文的核心机制使得能够自动产生网络结构; 核心二:采用resnet和Inception重复使用block结构思想; 核心三:利用迁移学习将生成的网络迁移到大数据集上提出一个new search space。
from:https://blog.csdn.net/xjz18298268521/article/details/79079008 NASNet总结 论文:<Learning Transfer ...
随机推荐
- cardsui-for-android
https://github.com/Androguide/cardsui-for-android cardsui-for-android-master.zip
- iOS开发——图形与动画篇OC篇&图层基本上动画
图层的一些基本动画效果 #define kRadianToDegrees (radian) (radian * 180.0) / (M_PI) //闪烁 [self.testView.layer ad ...
- ABAP FIELD-SYMBOLS 有大作用- 将没有可改参数的增强出口变得也能改主程序的值了
看下图代码: report z_xul_test2 中 定义了 全局变量 G_DATA1 , 分别调用了 z_xul_tes1 中的 form 和 function zbapi_test , 这两 ...
- Seconds_Behind_Master
http://blog.chinaunix.net/uid-28212952-id-3494560.html 今天同事遇到一个故障,xtrabackup备份中flush tables with rea ...
- mysql 日期函数格式
mysql中的from_unixtime函数的format表达式字段描述: %M 月名字(January……December) %W 星期名字(Sunday……Saturday) %D 有英语前缀的 ...
- HDU 4279 - Number
2012年天津赛区网赛的题目,想了好久,也没能想出来 还是小杰思路敏捷,给我讲解了一番,才让我把这个题做出来 f(x)=x-phi(x)(1——x与x互素个数)-g(x)(x的因子个数)+1 其中g( ...
- 自问自答-hadoop在安全模式下究竟干了什么见不得人的事
本来想自己从网上搜集整理的,但是发现吴超写的刚刚好,不多不少,所以直接转载(图片失效了,用自己的图片) http://www.superwu.cn/2013/08/23/548/ 在hadoop集群的 ...
- use selenium in scrapy webdriver
https://pypi.python.org/pypi/selenium from selenium import webdriver from selenium.webdriver.common. ...
- javaweb学习总结三(枚举)
一:枚举的概念 定义特定的数据,尤其像一些状态位. 二:定义枚举类 1:定义枚举,其中Grade枚举可以看做类,A.B.C.D.E可以看做对象,因为它定义了有参数的构造方法,所以 对象后面必须带参数. ...
- Redis中的关系查询(范围查询,模糊查询等...)
本文部分转自于:http://blog.csdn.net/dc_726/article/details/42784317 本文对Redis如何保存关系型数据,以及如何对其匹配.范围.模糊查询进行举例讲 ...