六、西瓜书——聚类

时间:2024-03-08 13:06:05

1.聚类任务

        聚类是一种无监督学习,目标是通过对无标记训练样本的学习来揭示数据的内在性质及规律。聚类试图将数据集中的样本划分为若干个通常是不相交的子集,每个子集称为一个“簇”(cluster).

2.聚类度量

        聚类性能度量亦称聚类“有效性指标”(validity index)。在聚类任务中,我们希望同一簇的样本尽可能彼此相似,不同簇的样本尽可能不同。换言之聚类结果的“簇内相似度”(intra-cluster similarity)高,且“簇间相似度”(inter-cluster similarity)低.

        聚类性能度量大致有两类类是将聚类结果与某个“参考模型”(reference model)进行比较,称为“外部指标”(external index);另一类是直接考察聚类结果而不利用任何参考模型,称为“内部指标”(internal index).

(1)外部指标

首先,定义a,b,c,d

        

        

        显然,上述性能度量的结果值均在[0,1] 区间,很显然,a与d需要越大越好,故指标值越大越好。

(2)内部指标

        

 

        簇内距离越小越好,簇间距离越大越好,故DBI的值越小越好,而 DI 则相反,值越大越好

3.距离计算

         

 

        对于无序属性,如{飞机、火车、轮船},一种解决方案是使用one-hot编码,另一种是使用VDM距离度量。

        

需要注意的是,KL散度并不满足上述距离的性质,但仍可看做一种距离。

 4.层次聚类概述

层次聚类

        层次聚类(Hierarchical Clustering)是聚类算法的一种,通过计算不同类别数据点间的相似度来创建一棵有层次的嵌套聚类树。在聚类树中,不同类别的原始数据点是树的最低层,树的顶层是一个聚类的根节点。创建聚类树有自下而上合并和自上而下分裂两种方法。

        作为一家公司的人力资源部经理,你可以把所有的雇员组织成较大的簇,如主管、经理和职员;然后你可以进一步划分为较小的簇,例如,职员簇可以进一步划分为子簇:高级职员,一般职员和实习人员。所有的这些簇形成了层次结构,可以很容易地对各层次上的数据进行汇总或者特征化。

如何划分才是合适的呢? 

        直观来看,上图中展示的数据划分为2个簇或4个簇都是合理的,甚至,如果上面每一个圈的内部包含的是大量数据形成的数据集,那么也许分成16个簇才是所需要的。

        论数据集应该聚类成多少个簇,通常是在讨论我们在什么尺度上关注这个数据集。层次聚类算法相比划分聚类算法的优点之一是可以在不同的尺度上(层次)展示数据集的聚类情况。

        基于层次的聚类算法(Hierarchical Clustering)可以是凝聚的(Agglomerative)或者分裂的(Divisive),取决于层次的划分是“自底向上”还是“自顶向下”。

2.层次聚类流程     

自底向上的合并算法

        层次聚类的合并算法通过计算两类数据点间的相似性,对所有数据点中最为相似的两个数据点进行组合,并反复迭代这一过程。简单的说层次聚类的合并算法是通过计算每一个类别的数据点与所有数据点之间的距离来确定它们之间的相似性,距离越小,相似度越高。并将距离最近的两个数据点或类别进行组合,生成聚类树。

相似度的计算

层次聚类使用欧式距离来计算不同类别数据点间的距离(相似度)。

实例:数据点如下 

分别计算欧式距离值(矩阵):

        数据点B与数据点C进行组合后,重新计算各类别数据点间的距离矩阵。数据点间的距离计算方式与之前的方法一样。这里需要说明的是组合数据点(B,C)与其他数据点间的计算方法。当我们计算(B,C)到A的距离时,需要分别计算B到A和C到A的距离均值。 

        经过计算数据点D到数据点E的距离在所有的距离值中最小,为1.20。这表示在当前的所有数据点中(包含组合数据点),D和E的相似度最高。因此我们将数据点D和数据点E进行组合。并再次计算其他数据点间的距离。 

 

        后面的工作就是不断的重复计算数据点与数据点,数据点与组合数据点间的距离。这个步骤应该由程序来完成。这里由于数据量较小,我们手工计算并列出每一步的距离计算和数据点组合的结果。 

两个组合数据点间的距离

计算两个组合数据点间距离的方法有三种,分别为Single Linkage,Complete Linkage和Average Linkage。在开始计算之前,我们先来介绍下这三种计算方法以及各自的优缺点。

  • Single Linkage:方法是将两个组合数据点中距离最近的两个数据点间的距离作为这两个组合数据点的距离。这种方法容易受到极端值的影响。两个很相似的组合数据点可能由于其中的某个极端的数据点距离较近而组合在一起。

  • Complete Linkage:Complete Linkage的计算方法与Single Linkage相反,将两个组合数据点中距离最远的两个数据点间的距离作为这两个组合数据点的距离。Complete Linkage的问题也与Single Linkage相反,两个不相似的组合数据点可能由于其中的极端值距离较远而无法组合在一起。

  • Average Linkage:Average Linkage的计算方法是计算两个组合数据点中的每个数据点与其他所有数据点的距离。将所有距离的均值作为两个组合数据点间的距离。这种方法计算量比较大,但结果比前两种方法更合理。

        我们使用Average Linkage计算组合数据点间的距离。下面是计算组合数据点(A,F)到(B,C)的距离,这里分别计算了(A,F)和(B,C)两两间距离的均值。

        

树状图

 4.KMeans算法

 (1)KMeans算法概述

KMeans算法的难点在于:如何评估与调参,同时要得到簇的个数,需要指定K值,而我们很难事先选择一个较好的K值。

KMeans簇的质心:即样本点的均值,即向量各维取平均即可

KMeans距离的度量:常用欧几里得距离和余弦相似度(先标准化)

优化目标: (最小化点到质心的距离)

(2)KMeans算法的工作流程 

首先,我们指定K值,即分为多少类,在这个实例中,我们选取K值为2,然后随机的选取两个质心,计算出所有的点到质心的距离,根据距离聚类成两类,然后,我们再根据距离,对质心进行更新,反复迭代,直到这些点的类别基本保持不变或者点的距离保持不变、以及质心保持不变(即不再更新)

KMeans的优势:简单,快速,适合常规数据集

KMeans的劣势: K值难确定 、复杂度与样本呈线性关系、很难发现任意形状的簇

 5.DBSCN算法

        基本概念:密度聚类亦称“基于密度的聚类”(density-based clustering),此类算法假设聚类结构能通过样本分布的紧密程度确定,通常情形下,密度聚类算法从样本密度的角度来考察样本之间的可连接性,并基于可连接样本不断扩展聚类簇,以获得最终的聚类结果   

       核心对象:若某个点的密度达到算法设定的阈值则其为核心点。 (即 r 邻域内点的数量不小于 minPts)

        ϵ-邻域的距离阈值:设定的半径r

        直接密度可达:若某点p在点q的 r 邻域内,且q是核心点则p-q直接密度可达。

        密度可达:若有一个点的序列q0、q1、…qk,对任意qi-qi-1是直接密度可达的 ,则称从q0到qk密度可达,这实际上是直接密度可达的“传播”。

        密度相连:若从某核心点p出发,点q和点k都是密度可达的 ,则称点q和点k是密度相连的。

        边界点:属于某一个类的非核心点,不能发展下线了

        噪声点:不属于任何一个类簇的点,从任何一个核心点出发都是密度不可达的

A:核心对象        B,C:边界点         N:离群点

工作流程:

参数D:输入数据集

参数ϵ:指定半径

MinPts:密度阈值

参数选择:

半径ϵ,可以根据K距离来设定:找突变点 K距离:给定数据集P={p(i); i=0,1,…n},计算点P(i)到集合D的子集S中所有点 之间的距离,距离按照从小到大的顺序排序,d(k)就被称为k-距离。

MinPts: k-距离中k的值,一般取的小一些,多次尝试

优势:

不需要指定簇个数

可以发现任意形状的簇

擅长找到离群点(检测任务)

只有两个参数

劣势:

高维数据有些困难(可以做降维)

参数难以选择(参数对结果的影响非常大)

Sklearn中效率很慢(数据削减策略)

 

6.学习向量量化

        与k均值算法类似,“学习向量量化”(Learning Vector Quantization,简称 LVQ)也是试图找到一组原型向量来刻画聚类结构,但与一般聚类算法不同的是,LVQ 假设数据样本带有类别标记,学习过程利用样本的这些监督信息来辅助聚类.也就是说,学习向量量化的目标是为聚类找到一组典型。

        其过程是,首先对原型向量进行初始化,可以随机选取一个对应标记的样本。然后对原型向量进行迭代优化,在每一轮迭代中算法随机选取一个有标记训练样本,找出与其距离最近的原型向量,并根据两者的类别标记是否一致来对原型向量进行相应的更新,若算法的停止条件已满足(例如已达到最大迭代轮数,或原型向量更新很小甚至不再更新),则将当前原型向量作为最终结果返回.

7.高斯混合聚类

        高斯混合聚类看做样本来自于多个高斯分布,而得到的混合高斯分布。

 

从而将聚类问题转化为参数求解的最优化问题。

然后,基于贝叶斯定理

         然后根据EM 算法求得参数值:

  • 在每步选代中先根据当前参数来计算每个样本属于每个高斯成分的后验概率 (E步),
  • 再根据后验概率更新模型参数(M步).

        高斯混合聚类算法:首先对高斯混合分布的模型参数进行初始化,然后基于EM算法对模型参数进行选代更新,若EM 算法的停止条件满足(例如已达到最大代轮数或似然函数 LL(D)增长很少甚至不再增长),则根据高斯合分布确定簇划分,返回最终结果。