算法面试必备-----聚类算法

算法面试必备-----聚类算法

  • 算法面试必备-----聚类算法
    • 一、聚类算法分类
      • 传统聚类
      • 深度聚类
    • 二、常见聚类算法
      • K-Means(K均值)聚类
      • 基于密度的聚类方法(DBSCAN)
      • 用高斯混合模型(GMM)的最大期望(EM)聚类
      • 凝聚层次聚类
    • 三、聚类评估指标
      • 外部度量(知道类簇label)
      • 内部度量(在真实的类簇label不知道的情况)
      • 深度聚类评估指标

算法面试必备-----聚类算法

一、聚类算法分类

总体上分为:传统聚类+基于深度学习的聚类(深度聚类)

传统聚类

1.基于划分
给定一个有N个元组或者纪录的数据集,分裂法将构造K个分组,每一个分组就代表一个聚类,K 特点:计算量大。很适合发现中小规模的数据库中小规模的数据库中的球状簇。
算法:K-MEANS算法、K-MEDOIDS算法、CLARANS算法

2.基于层次
对给定的数据集进行层次似的分解,直到某种条件满足为止。具体又可分为“自底向上”和“自顶向下”两种方案。
特点:较小的计算开销。然而这种技术不能更正错误的决定。
算法:BIRCH算法、CURE算法、CHAMELEON算法

3.基于密度
只要一个区域中的点的密度大过某个阈值,就把它加到与之相近的聚类中去。
特点:能克服基于距离的算法只能发现“类圆形”的聚类的缺点。
算法:DBSCAN算法、OPTICS算法、DENCLUE算法

4.基于网格
将数据空间划分成为有限个单元(cell)的网格结构,所有的处理都是以单个的单元为对象的。
特点:处理速度很快,通常这是与目标数据库中记录的个数无关的,只与把数据空间分为多少个单元有关。
算法:STING算法、CLIQUE算法、WAVE-CLUSTER算法

5.基于模型
属于软聚类(每个样本可以属于多个类,有概率分布)GMM认为隐含的类别标签z(i),服从多项分布,并且认为给定z(i)后,样本x(i)满足多值高斯分布,,由此可以得到联合分布。

GMM是个鸡生蛋、蛋生鸡的过程,与KMEANS特别像,其估计应用EM算法。

1.首先假设知道GMM参数,均值、协方差矩阵、混合系数,基于这些参数算出样本属于某一类的概率(后验概率)wji:

2.然后根据该概率,重新计算GMM的各参数。此参数求解利用了最大似然估计。

3.一直迭代,直到参数稳定。

EM(Expectation Maximization)算法是,假设我们想估计知道A和B两个参数,在开始状态下二者都是未知的,但如果知道了A的信息就可以得到B的信息,反过来知道了B也就得到了A。可以考虑首先赋予A某种初值,以此得到B的估计值,然后从B的当前值出发,重新估计A的取值,这个过程一直持续到收敛为止。

混合高斯模型,实质上就是一个类别一个模型。先从k个类别中按多项式分布抽取一个z(i),然后根据z(i)所对应的k个多值高斯分布中的一个生成样本x(i),整个过程称作混合高斯模型。

GMM优点:可理解、速度快

劣势:初始化敏感、需要手工指定k(高斯分布)的个数、不适合非凸分布数据集(基于密度的聚类和核方法可以处理)

Kmeans可以看做混合高斯聚类在混合成分方差相等、且每个样本派给一个混合成分时的特例。

6.基于图论
谱聚类就是基于图论的聚类方法,通过对样本数据的拉普拉斯矩阵的特征向量进行聚类,从而达到对样本数据的聚类。

  1. 第i个样本和第j个样本度量相似 高斯相似度,其中delta是超参数,svm里面也用到过这个核函数

  2. 形成相似度矩阵W=(Sij)n*n,对称矩阵,其中sii本来应该等于1,但为了方便计算都写成0,所以相似度矩阵就变长了主对角线上都为0的对称阵。

  3. 计算第i个样本到其他所有样本的相似度的和di = si1+Si2+…Sin(这里关于Si的相加,有些比如要聚成K类的就只会使用前K个si相加,或者设定一个阈值,小于阈值的si都舍去),在图论中,di叫做度,可以理解为连接边的权值。将所有点的度di,构成度矩阵D(对角阵)

  4. 形成拉普拉斯矩阵L=D-W,L是对称半正定矩阵,最小特征值是0,相应的特征向量是全1向量。把L的特征值从小到大排列,λ1…λn,对应特征向量u1 u2…un,如果我们要求聚成K类,我们就取前K个特征值对应的特征向量,形成矩阵Un*k,这样我们认为对应第一个样本的特征就是u11,u12…u1k,第二个样本的特征就是u21,u22…u2k,第n个样本的特征就是un1,un2…unn,对这n个样本做K均值,最后对这n个样本的聚类结果是什么,我们原始的聚类结果就是什么。

优点:可以发现非球形的样本

缺点:也要事先给定K值

深度聚类

典型的深度聚类算法可以总结为下述的四大类:

基于自动编码器(AE)的深度聚类算法

基于聚类深度神经网络(CDNN)的深度聚类算法

基于变分自动编码器(VAE)的深度聚类算法

基于生成对抗网络(GAN)的深度聚类算法

二、常见聚类算法

K-Means(K均值)聚类

算法步骤
(1) 首先我们选择一些类/组,并随机初始化它们各自的中心点。中心点是与每个数据点向量长度相同的位置。这需要我们提前预知类的数量(即中心点的数量)。
(2) 计算每个数据点到中心点的距离,数据点距离哪个中心点最近就划分到哪一类中。
(3) 计算每一类中中心点作为新的中心点。
(4) 重复以上步骤,直到每一类中心在每次迭代后变化不大为止。也可以多次随机初始化中心点,然后选择运行结果最好的一个。

基于密度的聚类方法(DBSCAN)

优点:
速度快,计算简便
缺点
我们必须提前知道数据有多少类/组。
K-Medians是K-Means的一种变体,是用数据集的中位数而不是均值来计算数据的中心点。
K-Medians的优势是使用中位数来计算中心点不受异常值的影响;缺点是计算中位数时需要对数据集中的数据进行排序,速度相对于K-Means较慢。

与均值漂移聚类类似,DBSCAN也是基于密度的聚类算法。
具体步骤:

  1. 首先确定半径r和minPoints. 从一个没有被访问过的任意数据点开始,以这个点为中心,r为半径的圆内包含的点的数量是否大于或等于minPoints,如果大于或等于minPoints则改点被标记为central point,反之则会被标记为noise point。
  2. 重复1的步骤,如果一个noise point存在于某个central point为半径的圆内,则这个点被标记为边缘点,反之仍为noise point。重复步骤1,知道所有的点都被访问过。
    优点:不需要知道簇的数量
    缺点:需要确定距离r和minPoints

用高斯混合模型(GMM)的最大期望(EM)聚类

K-Means的缺点在于对聚类中心均值的简单使用。下面的图中的两个圆如果使用K-Means则不能作出正确的类的判断。同样的,如果数据集中的点类似下图中曲线的情况也是不能正确分类的。

使用高斯混合模型(GMM)做聚类首先假设数据点是呈高斯分布的,相对应K-Means假设数据点是圆形的,高斯分布(椭圆形)给出了更多的可能性。我们有两个参数来描述簇的形状:均值和标准差。所以这些簇可以采取任何形状的椭圆形,因为在x,y方向上都有标准差。因此,每个高斯分布被分配给单个簇。

具体步骤:

  1. 选择簇的数量(与K-Means类似)并随机初始化每个簇的高斯分布参数(均值和方差)。也可以先观察数据给出一个相对精确的均值和方差。
  2. 给定每个簇的高斯分布,计算每个数据点属于每个簇的概率。一个点越靠近高斯分布的中心就越可能属于该簇。
  3. 基于这些概率我们计算高斯分布参数使得数据点的概率最大化,可以使用数据点概率的加权来计算这些新的参数,权重就是数据点属于该簇的概率。
  4. 重复迭代2和3直到在迭代中的变化不大。
    GMMs的优点:(1)GMMs使用均值和标准差,簇可以呈现出椭圆形而不是仅仅限制于圆形。K-Means是GMMs的一个特殊情况,是方差在所有维度上都接近于0时簇就会呈现出圆形。
    (2)GMMs是使用概率,所有一个数据点可以属于多个簇。例如数据点X可以有百分之20的概率属于A簇,百分之80的概率属于B簇。也就是说GMMs可以支持混合资格。

凝聚层次聚类

层次聚类算法分为两类:自上而下和自下而上。凝聚层级聚类(HAC)是自下而上的一种聚类算法。HAC首先将每个数据点视为一个单一的簇,然后计算所有簇之间的距离来合并簇,直到所有的簇聚合成为一个簇为止。

具体步骤:

  1. 首先我们将每个数据点视为一个单一的簇,然后选择一个测量两个簇之间距离的度量标准。例如我们使用average linkage作为标准,它将两个簇之间的距离定义为第一个簇中的数据点与第二个簇中的数据点之间的平均距离。
  2. 在每次迭代中,我们将两个具有最小average linkage的簇合并成为一个簇。
  3. 重复步骤2知道所有的数据点合并成一个簇,然后选择我们需要多少个簇。

层次聚类
优点:
(1)不需要知道有多少个簇
(2)对于距离度量标准的选择并不敏感
缺点:效率低

三、聚类评估指标

外部度量(知道类簇label)

有监督的方法,需要基准数据。用一定的度量评判聚类结果与基准数据的符合程度。

ACC
算法面试必备-----聚类算法_第1张图片
Jaccard系数(Jaccard Coefficient, JC)

在这里插入图片描述

FM指数(Fowlkes and Mallows Index, FMI)

在这里插入图片描述

Rand指数(Rand Index, RI)
在这里插入图片描述

 (  a+b+c+d=m(m-1)/2  )

上述性能度量的结果值均在[0,1]区间,值越大越好。

内部度量(在真实的类簇label不知道的情况)

CH指标
算法面试必备-----聚类算法_第2张图片
轮廓系数
算法面试必备-----聚类算法_第3张图片

深度聚类评估指标

参考

你可能感兴趣的:(算法岗面试笔试准备)