聚类算法(下)07

其他

这篇文章的整体排版主要是根据个人的博客来哒,如果感兴趣的话可以去我的自己搭建的个人博客看这篇文章

正文

聚类算法上中讲了大名鼎鼎的K-Means算法及其优化变种,在这篇中几种讲述两位两种不同思路的聚类算法。

层聚类算法

传统层聚类算法—AGNES和DIANA算法

层次聚类和K-Means的思路不太一样,它的思路有点像是决策树,按照层次进行分解,知道满足某种条件为止,传统的层次聚类分为自底而上,和自上而下两类:

  • 凝聚的层次聚类:
    这类算法是采用采用自底向上的策略,其中的代表便是AGNES算法(AGglomerative Nesting),它的核心思想是:最初将每个对象作为一个簇,然后这些簇根据某些准则被一步一步合并,两个簇间的距离可以由这两个不同簇中距离最近的数据点的相似度来确定。聚类的合并过程反复进行直到所有的对象满足簇数目。
  • 分裂的层次聚类:
    和凝聚的层次聚类相反,这种是采用自顶向下的策略,代表算法为DIANA算法(DIvisive Analysis)。其核心思想是:首先将所有对象置于一个簇中,然后按照某种既定的规则逐渐细分为越来越小的簇(比如最大的欧式 距离),直到达到某个终结条件(簇数目或者簇距离达到阈值)。

在AGNES算法中都提到了,簇是根据某些原则进行分裂或者合并的,而这个原则就是簇间距离。计算簇间距离的方法有最小距离(SL聚类),最大距离(CL聚类)以及平均距离(AL聚类),具体的说明如下:

  • 最小距离(SL聚类)
    选择两个聚簇中最近的两个样本之间的距离(Single/Word-Linkage)
    注:得到的模型容易形成链式结构
  • 最大距离(CL聚类)
    选择两个聚簇中最圆的两个眼本的距离(Complete-Linkage)
    注:如果出现了异常值的话,那他们的构建很容易受这个异常值的影响。
  • 平均距离(AL聚类)
    选择两个聚类中的平均值(Average-Linkage聚类算法)或者中值(Median-Linkage聚类法)

AGNES和DIANA算法优缺点如下:

  1. 简单,理解容易。
  2. 合并点/分裂点选择不太容易。
  3. 合并/分类的操作不能进行撤销。
  4. 由于执行效率较低O(t*n^2)t为迭代次数,n为样本点数。

层次聚类优化算法

之前我们看到了传统的层次聚类算法,由于其执行效率太低,且不能动构建的的特点,显然不适合大数据集。于是我们在此基础上引入了BIRCH算法CURE算法

BIRCH算法

BIRCH (balanced iterative reducing and clustering using hierarchies) 算法,英文的全称翻译过来以后是平衡迭代削减聚类算法,其构成和我们考研数据结构中学过的B+树非常的类似,甚至很多特性都是相同的,具体的说它构建的树叫做CF(Cluster Feature)-Tree。

  1. 节点,即簇的结构:
    既然是树,那么就不得不提它的节点的结构了。在BIRCH构建CF树的过程中,每个节点等于说是存放了它之下所有节点的特征,于是他在节点中存放了如下的三部分数据。
    • N,指在这个节点中有多少个样本点。
    • LS,指的是这个节点中的样本相应特征的和。
    • LS,指的是这个节点中的样本相应特征的特征的平方和。
  2. 节点之间,节点和子节点,以及叶子结点之间的关系
    节点和其子节点是包含的关系,也就是父节点中的N,LS以及SS是其所有子节点的和。而相应的样本点的具体信息指包含在底层节点中(叶子结点的子节点),同时叶子结点构成一个单项链表,同时有一个指针指向其表头。这点的特性是同B+树高度一致的
  3. 最多子女个数,以及分裂判定
    和B+树一样,对于树构建中的分叉个数是有限制的,这个限制需要提前给出,即分支因子。同时,值得注意的是,一般而言在构建节点簇的中心点的时候,一般选用第一个进入这个节点的样本点作为中心点,然后根据指定的该簇和中心点限定的距离,即类直径,其往往通过LS和SS算出。判断新入的点是否可以划入该簇,而分裂节点的时候,往往以这个初始点进行分割。
    综上我们可以看出,BIRCH算法的本质其实就是动态的插入样本点,然后动态的根据规则构建一个类B+树。它的优点是动态建树且效率高是线性效率,即每个样本点都是一次性插入的,同时也节省内存,所以非常适合大数据集。不过遗憾的是它也是采用距离作为分类标准,故只适合分布呈凸形或者球形的数据集、且需要给定聚类个数和簇之间的相关参数,而这些对节点CF的限制可能导致簇类结果和真实不太一致
    注1:BIRCH不依赖给定的待分类簇数量K,但是给定了K值最好,若不一定K值,最终CF-Tree的叶子结点树木就是最终分类的簇的数目。
    注2:BIRCH算法在训练大规模数据集的时候,和mini-batch K-Means相比,BIRCH算法更加适合类别数量K比较多的情况。
    注3:由于类直径是通过LS和SS算出的,所以当特征维度超过20~30左右的时候,不建议使用该算法。

CURE算法(使用代表点的聚类法)

CURE(Clustering Using REpresentatives),该算法先把每个数据点看成一类,然后合并距离最近的类直至类个数为所要求的个数为止。但是和AGNES算法的区别是:取消了使用所有点,或用中心点+距离来表示一个类,而是从每个类中抽取固定数量、 分布较好的点作为此类的代表点,并将这些代表点乘以一个适当的收缩因子,使它们更加靠近类中心点。代表点的收缩特性可以调整模型可以匹配那些非球形的场景,而且收缩因子的使用可以减少噪音对聚类的影响

CURE算法的优点是能够处理非球形分布的应用场景,同时彩娱乐随机抽样和分区的方式可以提高算法的执行效率。

密度聚类算法

密度聚类方法的指导思想是:只要样本点的密度大于某个阀值,则将该样本添加到最近的簇中。这类算法可以克服基于距离的算法只能发现凸聚类的缺点,可以发现任意形状的聚类,而且对噪声数据不敏感。不过这种计算的复杂度高,计算量大。
密度聚类算法的常用算法有DBSCAN密度最大值算法

DBSCAN算法

DBSCAN(Density-Based Spatial Clustering of Applications with Noise),将簇定义为密度相连的点的最大集合,能够将足够高密度的区域划分为簇,并且在具有噪声的空间数据上能够发现任意形状的簇。其核心思路是用一个点的ε邻域内的邻居点数衡量该点所在空间的密度,该算法可以找出形状不规则的cluster,而且聚类的时候事先不需要给定cluster的数量。

DBSCAN算法流程

它的算法流程如下:

  • 如果一个点x\varepsilon领域内包含m个对象,则创建一个x作为核心对象的新簇。
  • 寻找并合并核心对象直接密度可达的对象
  • 没有新点可以更新簇的时候,算法结束
    注:
    1. 每个簇至少包含一个核心对象
    2. 非核心对象可以是簇的一部分,构成簇的边缘;
    3. 包含过少对象的簇被认为是噪声;
    4. 最大的密度相连对象的集合C为密度聚类中的一个簇,它满足两个属性,Maximality和Connectivity,Maximality指的是若x属于C,yx密度可达,那么y也属于C,Connectivity指的是,若xy都属于C,那么xy密度相连的。

DBSCAN相关名词解释

其中提到的定义有\varepsilon领域,密度,MinPts,核心点,边界点,噪音点,直接密度可达,密度可达,密度相连。他们的解释如下:

  • \varepsilon邻域(\varepsilon neighborhood):给定对象在半径\varepsilon的区域。

  • 密度(density):在\varepsilon领域中的x的密度,是一个整数依赖于半径\varepsilonN_{\varepsilon}(X)指的是半径内的点的个数。
    p(x) = |N_{\varepsilon}(X)|

  • MinPts:指得是判定该点是不是核心点的时候使用的阀值,记为M

  • 核心点(core point):如果p(x) \geq M ,那么称xX的核心点,记由X中所有核心点构成的集合为X_c,并记X_nc 表示由X中所有非核心点构成的集合。通俗的来说, 核心点是密度达到一定阀值的的点。

  • 边界点(border point):如果非核心点x\varepsilon邻域中存在核心点,那么认为xX的边界点。通俗来讲就是密度特别稠密的边缘地带,也就是簇的边缘部分。

  • 噪音点(noise point):集合中除了边界点和核心点之外的点都是噪音点,所有噪音点组成的集合叫做X_noi,显然这些点就是对应稀疏区域的点。

  • 直接密度可达:这个是密度聚类中最重要的概念,它指的是给定一个对象集合 X,如果y是在x\varepsilon邻域内,而且x是一个核心对象,可以说对象y从对象x出发是直接密度可达的

  • 密度可达:如果存在一个对象链p_1, p_2,...,p_m ,如果满足p_{i+1}是从p_i直接密度可达的,那么称p_m是从p1密度可达的,简单的来说就像铁链环环相扣差不多。

  • 密度相连:在集合X中,如果存在一个对象o,使得对象xy是从o关于\varepsilonm密度可达的,那么对象xy是关于\varepsilonm密度相连的。

DBSCAN算法优缺点

优点:

  • 不需要事先给定cluster的数目
  • 可以发现任意形状的cluster
  • 能够找出数据中的噪音,且对噪音不敏感
  • 算法只需要两个输入参数
  • 聚类结果几乎不依赖节点的遍历顺序
    缺点:
  • DBSCAN算法聚类效果依赖距离公式的选取,最常用的距离公式为欧几里得距离。但是对于高维数据,由于维数太多,距离的度量已变得不是那么重要
  • DBSCAN算法不适合数据集中密度差异很小的情况

MDCA密度最大值聚类算法

MDCA(Maximum Density Clustering Application)算法基于密度的思想引入划分聚类中,能够自动确定簇数量并发现任意形状的簇。另外MDCA一般不保留噪声,因此也避免了阈值选择不当情况下造成的对象丢弃情况。
注:MDCA的算法和AGNES非常相像,不同的是最初的初始簇确定是通过密度来确定的。

MDCA算法思路

MDCA算法核心一共分三步,划分、合并簇以及处理剩余节点三部分。

  • 将数据集划分为基本簇:
    • 对数据集X选取最大密度点P_{max} ,形成以最大密度点为核心的新簇C_i,按照距离排序计算出序列S_{p_max},对序列的前M个样本数据进行循环判断,如果节点的密度大于等于density_0 ,那么将当前节点添加C_i中。
    • 循环处理剩下的数据集X,选择最大密度点P_{max},并构建基本簇C_{i+1},直到X中剩余的样本数据的密度均小于deansity_0
  • 使用凝聚层次聚类的思想,合并较近的基本簇,得到最终的簇划分:
    • 在所有簇中选择距离最近的两个簇进行合并,合并要求是:簇间距小于等于dist_0,如果所有簇中没有簇间距小于dist_0的时候,结束合并操作
  • 处理剩余节点,归入最近的簇
    • 最常用、最简单的方式是:将剩余样本对象归入到最近的簇。

MDCA算法名词解释

最大密度点:如字面意思,就是密度最大的点,密度计算公式一般取DBSCAN算法中的密度计算公式。
有序序列S_{p_{max}}:根据所有对象与最大密度点的距离进行排序。

密度阈值density_0:当节点的密度值大于密度阈值的时候,认为该节点属于一个 比较固定的簇,在第一次构建基本簇的时候,就将这些节点添加到对应簇中,如果小于这个值的时候,暂时认为该节点为噪声节点。

簇间距离:对于两个簇C1和C2之间的距离,采用两个簇中最近两个节点之间的距离作为簇间距离。

M值:初始簇中最多数据样本个数

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,817评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,329评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,354评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,498评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,600评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,829评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,979评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,722评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,189评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,519评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,654评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,329评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,940评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,762评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,993评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,382评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,543评论 2 349

推荐阅读更多精彩内容

  • 1. 章节主要内容 “聚类”(clustering)算法是“无监督学习”算法中研究最多、应用最广的算法,它试图将数...
    闪电随笔阅读 5,025评论 1 24
  • 本篇结构 简介 聚类算法的分类 K-Means聚类算法 DBSCAN聚类算法 本篇介绍了聚类算法的种类,重点关注K...
    w1992wishes阅读 7,454评论 0 14
  • 聚类算法 前面介绍的集中算法都是属于有监督机器学习方法,这章和前面不同,介绍无监督学习算法,也就是聚类算法。在无监...
    飘涯阅读 41,281评论 3 52
  • 一些聚类算法 Birch层次聚类 ,KMeans原形算法 ,AGNES层次算法, DBSCAN密度算法, LVQ原...
    AresAnt阅读 2,577评论 0 2
  • 今天,是对我很重要的日子,到公司一晃也有两个多月了。每一天无不战战兢兢小心谨慎的学习、沟通、模仿、讨好。我...
    云上云下的掮客阅读 291评论 1 1