CURE算法是一种层次聚类算法。

层次聚类方法(Hierarchical Clustering Method) 是一种发展比较早、应用广泛的聚类方法,按采用“自顶向下(Top—Down)”和“自底向上(Bottom—Up)”两种方式,分别被称为分解型层次聚类法(Divisive Hierarehieal Clustering)和聚结型层次聚类法 (Agglomerative Hierarchical Clustering)。

绝大多数聚类算法或者擅长处理球形和相似大 小的聚类,或者在存在孤立点时变得比较脆弱。 CURE采用了一种新颖的层次聚类算法,该算法选择基于质心和基于代表对象方法之间的中间策略。它不同于单个质心或对象来代表一个类,而是选择数据空间中固定数目的具有代表性的点。一个类的代表点通过如下方式产生:首先选择类中分散的对象,然后根据一个特定的分数或收缩因子“收缩”或移动它们。 在算法的每一步,有最近距离的代表点对(每个点来自于一个不同的类)的两个类被合并。

每个类有多于一个的代表点使得CURE可以适 应非球形的几何形状。类的收缩或凝聚可以有助于控制孤立点的影响。因此,CURE对孤立点的处理更加健壮,而且能够识别非球形和大小变化比较大的类。 针对大型数据库,CURE采用随机取样和划分两种方 法组合:一个随机样本首先被划分,每个划分被部分聚类。

算法采用簇中的多个代表点来表示一个簇,首先选择簇中距离质心最远的点做为第一个点,然后依次选择距离已选到的点最远的点,直到选到c
c个点为止(一般选择c≥10),这些点捕获了簇的形状和大小。然后将这些选取到的点根据参数α(0≤α≤1)向该簇的质心收缩,距离质心越远的点(例如离群点)的收缩程度越大,因此CURE对离群点是不太敏感的,这种方法可以有效的降低离群点带来的不利影响。

在得到上述缩减后的代表点后,两个簇之间的距离就可以定义为这两个簇中距离最近的两个代表点之间的距离。

CURE算法的空间复杂度与数据集大小n呈线性关系,而时间复杂度高达O(n2logn) 对于低维数据集该复杂度可以降低到O(n2),因此其时间复杂度不会高于“组平均”层次聚类。但是CURE依旧不能运行于大型数据集,因此与BIRCH中通过汇总的方式来处理该问题不同的是,CURE采用了两种技术来加速聚类,首先在数据集上进行采样,可以证明采用适当的最小随机采样大小可以足够精准的表示簇的几何信息,我们可以采用“切尔霍夫界限”(Chernoff Bounds)来计算这个最小大小,其次,为了进一步提高聚类速度,CURE还将采样得到的点集进行分割,然后在分割后的子集上运行CURE层次聚类,在删除每个子集中的离群点后,再将每个子集中形成的簇进一步CURE层次聚类产生最终的聚类模型。

在得到采样样本子集的聚类信息后,就可以对数据集中剩下的样本点进行划分,这里是跟据每个簇中的代表点进行划分的,而不是像BIRCH中使用簇质心进行划分,具体的方法是找到距离当前样本点最近的代表点,并将该样本点标记为该点所在的簇。

CURE算法的步骤
  • 从源数据对象中抽取一个随机样本S。
  • 将样本S分割为一组划分。
  • 对每个划分局部的聚类。
  • 通过随机取样剔除孤立点。如果一个类增长太慢,就去掉它。
  • 对局部的类进行聚类。落在每个新形成的类中的代表点根据用户定义的一个收缩因子收缩或向 类中心移动。这些点代表和捕捉到了类的形状。
  • 用相应的类标签来标记数据。

具体思想如下:

  • CURE算法采用的是聚结层次聚类。在最开始的时候,每一个对象就是一个独立的类,然后从最相似的对象开始进行合并。
  • 为了处理大数据集,采用了随机抽样和分割 (Partitioning)手段。采用抽样的方法可以降低数据 量,提高算法的效率。在样本大小选择合适的情况下, 一般能够得到比较好的聚类结果。另外,CURE算法 还引入了分割手段,即将样本分割为几个部分,然后针对各个部分中的对象分别进行局部聚类,形成子类。再针对子类进行聚类,形成新的类。
  • 传统的算法常常采用一个对象来代表一个类,而CURE算法由分散的若干对象,在按收缩因子移向其所在类的中心之后来代表该类。由于CURE算法采用多个对象来代表一个类,并通过收缩因子来调节类的形状,因此能够处理非球形的对象分布。
  • 分两个阶段消除异常值的影响。CURE算法采用的是聚结层次聚类。在最开始的时候,每一个对 象就是一个独立的类,然后从最相似的对象开始进行 合并。 由于异常值同其它对象的距离更大,所以其所在 的类中对象数目的增大就会非常缓慢,甚至不增长。 第一个阶段的工作,是将聚类过程中增长非常缓慢的 类作为异常值除去。第二个阶段的工作(聚类基本结 束的时候)是将数目明显少的类作为异常值除去。
  • 由于CURE算法采用多个对象来代表一个 类,因此可以采用更合理的非样本对象分配策略。在完成对样本的聚类之后,各个类中只包含有样本对 象,还需要将非样本对象按一定策略分配到相应的类中。
  • 根据CURE算法提出者的研究成果,在该算法中 收缩因子 的取值在0.2-0.7之间能取得较好的聚类效果,而代表点数c一般选择大于10的数时,都能找到正确的聚类。
离群点的处理

在进行随机采样时,会过滤掉大部分的离群点,此外,在随机采样得到的数据集中存在的少量离群点由于分布在整个原始数据空间,因而被随机采样进一步隔离了。在进行CURE凝聚层次聚类时,需要将每个点单独初始化为一个簇,并将距离最近的点合并为一个簇,由于离群点往往距离样本中的其它点很远,因此他所代表的簇增长的最为缓慢,以至于簇的大小远远小于正常的簇。

以上述讨论作为契机,我们将层次聚类中的离群点识别分为两个阶段,第一个阶段是在聚类算法执行到某一阶段(或称当前的簇总数减小到某个值)时,根据簇的增长速度和簇的大小对离群点进行一次识别,需要注意的是,如果这个阶段选择的较早(即簇总数依旧很大)的话,会将一部分本应被合并的簇识别为离群点,如果这个阶段选择的较晚(即簇总数过少)的话,离群点很可能在被识别之前就已经合并到某些簇中,因此原文推荐当前簇的总数为数据集大小的1/3时,进行离群点的识别。第一阶段有一个很明显的问题,就是当随机采样到的离群点分布的比较近时(即使可能性比较小),这些点会被合并为一个簇,而导致无法将他们识别出来,这时就需要第二阶段的来进行处理。由于离群点占的比重很小,而在层次聚类的最后几步中,每个正常簇的粒度都是非常高的,因此很容易将他们识别出来,一般当簇的总数缩减到大约为k时,进行第二阶段的识别。

总结

光看看没什么用啊,,下次比较一下。

想起打ACM刷题比较多,实践了才是真的会。

https://blog.csdn.net/qq_40793975/article/details/83574309

【机器学习】层次聚类算法 CURE算法相关推荐

  1. 统计学习方法第十四章作业:聚类—层次聚类聚合/分裂算法、K_means聚类算法 代码实现

    层次聚类聚合/分裂算法 import numpy as np import copy import matplotlib.pyplot as pltclass Hierarchical_cluster ...

  2. 《大数据》第七章 聚类 K-means算法 BFR算法 CURE算法

    1.欧氏空间与非欧空间 在了解聚类之前我认为需要先了解欧氏空间与非欧空间的概念,因为在聚类的算法中会根据欧或者非欧有不同的解决方案. 1.1欧氏空间 引用看过的一篇文章中的一句话总结:欧几里得空间就是 ...

  3. 机器学习——层次聚类(超详细)

    层次聚类 层次聚类:层次聚类假设类别之间存在层次结构,将样本聚到层次化的类中. 层次聚类类型:自下而上(bottom-up)或称聚合(agglomerative).自上而下(top-down)或称分裂 ...

  4. 机器学习认识聚类(KMeans算法)

    导读:机器是怎样学习的,都学到了什么?人类又是怎样教会机器学习的?本文通过案例给你讲清楚各类算法的原理和应用. 机器学习,一言以蔽之就是人类定义一定的计算机算法,让计算机根据输入的样本和一些人类的干预 ...

  5. 机器学习算法(十二):聚类(2)层次聚类 Hierarchical Clustering

    目录 1 层次聚类 1.1 层次聚类的原理 1.2 两个组合数据点间的距离: 2 自底向上的合并算法 2.1 AGNES算法 (AGglomerative NESting) 2.1.1 原理 2.1. ...

  6. 机器学习算法之 K-means、层次聚类,谱聚类

    k-means 和层次聚类都属于划分聚类,实际中最常用的是k-means,k-means效果不好的情况下才会采用其他聚类 K-means算法 K-means算法,也称为K-平均或者K-均值,是一种使用 ...

  7. K-Means算法、层次聚类、密度聚类及谱聚类方法详述

    1.聚类算法概述 (1)什么是聚类? 聚类就是对大量未知标注的数据集,按照数据内部存在的数据特征将数据集划分为多个不同的类别,使类别内的数据比较相似,类别之间的数据相似度比较小,属于无监督学习. 聚类 ...

  8. 层次聚类算法原理总结

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 层次聚类(hierarchical clustering)基于簇间 ...

  9. 【通俗易懂】层次聚类算法的原理及实现

    层次聚类(Hierarchical Clustering)是聚类算法的一种,通过计算不同类别数据点间的相似度来创建一棵有层次的嵌套聚类树.在聚类树中,不同类别的原始数据点是树的最低层,树的顶层是一个聚 ...

最新文章

  1. 独家 | 使用LSTMs和Prophet进行时间序列预测你的电子邮箱负载(附代码)
  2. 在Windows上编译UEFI SDK 2018/OVMF的方法
  3. mac os mysql 命令_如何在Mac OS上安装“mysql”命令?
  4. Scenario 7 – HP C7000 VC FlexFabric Tunneled VLANs and SUS A/A vSphere
  5. Python传输图片(同一局域网下版本)
  6. 方法描述Mybatis使用之NEIS项目
  7. 前端开发者必备的代码开源平台,记得收藏转发!
  8. Smarty的assign定义变量
  9. 机器学习流行算法一览
  10. VS2012 中 c++项目中的各个选项介绍
  11. 小麦亩产一千八(jzoj 3461)
  12. MySQL—Mysql与MariaDB启停命令的区别
  13. [转]VirtualBox安装CentOS7
  14. 四种方式话Equal
  15. 枚举算法:试统计正整数n的阶层n!=1*2*...*n尾部连续零的个数。
  16. 100 美元一行代码,开源软件到底咋赚钱?
  17. ASP 中调用函数关于Call使用注意的问题
  18. 【UML】概念、关联、画画(一)
  19. Vue.js 系列教程 5:动画
  20. 从达尔文到DevOps:John Willis和Gene Kim谈后凤凰项目时代

热门文章

  1. 使用VS软件打开网站在浏览器浏览的方法
  2. 重磅!鼎捷软件参与编写制定的机械行业团体标准正式发布
  3. oracle连接多张表优化,oracle 多表查询优化
  4. linux复制jar文件,linux如何将界面上的一个JAR文件拷贝到ROOT下啊
  5. 计算机硬盘位显示none,如果计算机的BIOS中没有SSD引导选项,该怎么办?
  6. Vue 学习——监听器(侦听器):普通监听和深度监听
  7. 糖尿病遗传风险检测挑战赛-Coggle 30 Days of ML
  8. java jbutton文字_JAVA swing JLabel JButton标签文本文字内容的换行
  9. 网上邻居——局域网传输文件
  10. [java] 汇率换算器实现(1)