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 ...
随机推荐
- Linux下的lds链接脚本简介
转载:http://hubingforever.blog.163.com/blog/static/171040579201192472552886/ 一. 概论 每一个链接过程都由链接脚本(lin ...
- JDK1.7中调用javascript方法
import java.io.File; import javax.script.Invocable; import javax.script.ScriptEngine; import javax.s ...
- How to solve Original Tango programmer”Hardware not Found”?
Original Tango programmer is a new generation of transponder programmer which is developed to cover, ...
- IP地址,子网掩码、默认网关,DNS理论解释
在网上发现的这篇文章写的非常好,有理论有示例. (一) 问题解析 001. 问: IP地址,子网掩码,默认网关,DNS服务器,有什么区别呀?我知道没有IP地址就不能上网,我也知道没设DNS就不 ...
- Dubbo服务调用的动态代理和负载均衡
Dubbo服务调用的动态代理及负载均衡源码解析请参见:http://manzhizhen.iteye.com/blog/2314514
- .NET平台数据持久层框架
在.NET平台下的几个数据持久层框架: 1.NHibernate 2.NBear 3.Castle ActiveRecord 4.iBATIS.NET 5.DAAB 6.DLinq
- 今天学习css一些动画效果
<!doctype html><html lang="en"> <head> <meta charset="UTF-8" ...
- 从零单排Linux – 1 – 简单命令
从零单排Linux – 1 – 简单命令 Posted in: Linux 从零单排Linux – 1 一.Linux的简单命令: 1.忘记root密码: 读秒时按任意键进入 – e – ↓选择第二个 ...
- ActiveMQ(5.10.0) - Configuring the JAAS Authentication Plug-in
JAAS provides pluggable authentication, which means ActiveMQ will use the same authentication API re ...
- Linux 命令 - ls: 列出目录内容
ls 命令很可能是用户最常使用的命令,通过 ls 命名可以查看目录内容,确定各种重要文件和目录的属性. 命令格式 ls [OPTION]... [FILE]... 命令参数 -a, --all 列出所 ...