• 步步详解近期大火的density_peak超赞聚类


    近期忙着在公司捣腾基于SOA的应急框架,还是前两周才在微博上看见了density_peak,被圈内好些人转载。

    由于这个算法的名字起的实在惹眼,都没好意思怎么把这个算法名字翻译成中文,当然更惹眼的是,其极具杀伤力的案例介绍和公式简写,光看些许的中文翻译几乎无法入手,虽然也得知也有不少同学将其实践,但分享的经验不多,所以这才具有挑战和摸索的意义。

    于是,中午吃了碗水饺,从E文入手开始捣腾。

    整个过程涉及的知识点还是非常宽泛,再次要感谢美帝,百度文库的贡献。

    1,density_peak宣传效果

             前文中提到了其极具杀伤力的案例证明,如下图所示。经常DM的同学可能更清楚,4张图论难度D>C/B>A,即便是有监督算法看到B/D上至少要糊弄半天,更别说其他一些知名的无监督算法在B/D上几乎完败。所以我们的实验直接围绕最简单的A和最复杂的D进行论证和剖析。

     

    2,density_peak实现原理

             每个点(样本)具备两大要素。原文的解释如下:

     

     1,  密度:在指定Dc(截断面或者半径内)出现的邻居数量。

    2,  距离值:与其他比自己“密度”大的点的距离的最小值。(听上去很拗口,到后面看代码一目了然)。

    所以,我们需要定义这样一个结构体来描述样本:

     

    什么是距离?距离就是欧几里得距离,这个自己百度。如下图:

     

       什么是密度:仔细看上图中,红点是肉眼判断的簇中心点,如果以这个点为圆心,半径0.5厘米划一个圆,在圆内的邻居数量就是density_peak的密度。

       什么是距离值:原文的如下:

     

      继续仔细看上上图,就是点到每个自己密度大的点的集合中的最小值(还是拗口,好吧,后面有代码解释)。

             当确认这两个参数后,就能显而易见簇中心点(非常神奇!),同时就能继续为其圈定同类,最终完成标签打印。

    3,  density_peak过程解析

    3.1 生成距离值矩阵,顺带完成rhu值判定。

             这一步的全遍历无法逃脱,如果你有100个样本,就要进行100^2次运算和内存空间,这个得有心理准备。

     

    实施完毕后,会有一个庞大的double型阵列以及对str_point样本的rhu值的更新。

    3.2 完成delta距离值的计算

             前面对距离值已有介绍,不妨直接看下代码实现。前半段for完成各密度档位中的最小值的设定。后半段for完成密度档位比自己高的距离值集合,再通过集合取最小值。由于物理上必存在一个点是最最中心点的,所以它的距离就是该点二维指针中(也就是前面Marix)行内最大的距离

     

    最终会得到如下表格:

     

    3.3 投影rhu和delta

             这个很简单,也是算法的最精华的部分,把所有高维数据的归维处理。做EXCEL散点图:

     

    图中可以看到上述3个红圈的点就是最具嫌疑的中心点。因为它的密度高,与其他密度点间距大。

    3.4 圈定簇范围

    原文中使用了hola这个词,大家可以把它当做魔兽中的光环即可。这个光环的圈定也是很有讲究,作者没有明说,可能怕该算法影响了其简单整洁的形象,也许说明了作者很在乎这个算法的社会影响力。当然炒作还是要炒作的。

     

    我们回过头看上图,把中心点作为入参,把Dc作为圈定条件,循环迭代,直至没有点符合圈定范围。这里需要使用(BFS),广度优先遍历(这里抛砖,看看有无其他同学有更好的圈定算法)。

    至此,density_peak 暂时搞一段落。但还没完,真正可怕的在后面!~

    3.4 类极函数样本的挑战

             先看极坐标函数的样本,如下图所示。肉眼看分两类。0-179度属1类,180-359度属1类。

     

             楼主用A模型代码的原封不动扫描类极样本,发现效果不好,无法准确分类。

     

    需要完成10多次探测才有分类结果,这个肯定有问题,但问题出在哪儿?想了想还是Dc引起,因为用了A模型大厘米的Dc,好这次改小。粗看肉眼还是分不出,别急!

     

    从实际数上看TOP2已能轻易区分数据。

    结束了吗?不,真正可怕的是,能够将该算法能够将N分类精确拆分的就像crossvaldition那样,而且这个中心点就是曲线的最大拐点。

    靠!太恐怖了。

     

    4,补充说明

    1,  文中的原始数据在http://pan.baidu.com/s/1qWkC3SC可以下载,极坐标可按=5*COS(RADIANS($D5)) excel语法生成,其他代码我就不放了。

    2,  NB的算法未必充满各种难懂的公式,这让我想起了小时候参加KOF97的比赛,前三名只用A/B/C。

    3,  美帝的研究和创造能力真心恐怖。

  • 相关阅读:
    EasyUI-datagrid-自动合并单元格(转)
    js中格式化时间字符串
    ext 3.2 tree 在IE10中点击事件失效的bug
    C#中修改Dll文件 (反编译后重新编译)
    GridView内容<br />换行
    使用Aspose.Words把 word转成图片
    判断移动设备访问自动跳转到移动版页面
    jquery mobile界面数据刷新
    Ubuntu16.04下安装Visual Studio Code
    npm 安装vue 报错Failed at the chromedriver@2.46.0 install script 'node install.js'
  • 原文地址:https://www.cnblogs.com/zacard-orc/p/3901959.html
Copyright © 2020-2023  润新知