谱聚类原理

谱聚类概述

谱聚类的主要思想是将数据点视为图中的节点,节点之间的连接权重反映数据点之间的相似度。通过图论和线性代数的方法,将图分割成多个子图,使得子图内部的连接权重之和最大化,而子图之间的连接权重之和最小化,从而达到聚类的目的。

谱聚类基础之一:无向权重图

        用于表示数据点之间的相似性。具体而言,无向权重图是一种图论中的图形结构,其中的边没有方向且每条边都具有相应的权重。

        对于一个图G,我们一般用点的集合V和边的集合E来描述。即为G(V,E)。其中V即为我们数据集里面所有的点(v1,v2,...vn)。对于V中的任意两个点,可以有边连接,也可以没有边连接。我们定义权重Wij为点Vi和点Vj之间的权重。由于我们是无向图,所以Wij=Wji。

对于有边连接的两个点Vi和Vj,Wij>0,对于没有边连接的两个点Vi和Vj,Wij=0。对于图中的任意一个点Vi,它的度Di定义为和它相连的所有边的权重之和,即

 谱聚类基础之二:相似矩阵

邻接矩阵W,它是由任意两点之间的权重值Wij组成的矩阵。

基本思想是,距离较远的两个点之间的边权重值较低,而距离较近的两个点之间的边权重值较高,不过这仅仅是定性,我们需要定量的权重值。一般来说,我们可以通过样本点距离度量的相似矩阵S来获得邻接矩阵W。

 构建邻接矩阵W的方法有三类。ϵ-邻近法,K邻近法和全连接法。

  1.ϵ-邻近法

        选择一个合适的ε值(距离阈值)是关键,然后用欧式距离sij度量任意两点Xi和Xj的距离。

        对于每一对数据点(i, j),检查它们之间的距离是否小于或等于ε。如果是,则在邻接矩阵中对应的位置W[i][j]设置为ε(或者该点对的相似度)。如果距离大于ε,则保持W[i][j]为0(或较低的权重值)。

2.K邻近法

在谱聚类中,KNN用于构建邻接矩阵W,该矩阵表示数据点之间的相似度。

选择k值然后每一个数据点i计算它与其他数据点之间的距离,根据计算出的距离找到其最近的K个邻居对于任意两个数据点i和j,如果他们互为K个最近邻居之一,则在邻接矩阵中的对应位置W{ij}赋值为1(或他们之间距离的倒数,取决于具体实现),否则为0。

3.全连接法

        第三种定义邻接矩阵W的方法是全连接法,相比前两种方法,第三种方法所有的点之间的权重值都大于0,因此称之为全连接法。可以选择不同的核函数来定义边权重,常用的有多项式核函数,高斯核函数和Sigmoid核函数。最常用的是高斯核函数RBF,此时相似矩阵和邻接矩阵相同:

        在实际的应用中,使用第三种全连接法来建立邻接矩阵是最普遍的,而在全连接法中使用高斯径向核RBF是最普遍的。 

谱聚类基础之三:拉普拉斯矩阵

拉普拉斯矩阵(Laplacian matrix),也称为基尔霍夫矩阵, 是表示图的一种矩阵。给定一个有n个顶点的图G=(V,E),其拉普拉斯矩阵定义为:L=D−W。

D即为我们第二节讲的度矩阵,它是一个对角矩阵。而W即为我们第二节讲的邻接矩阵,它可以由我们第三节的方法构建出。

拉普拉斯矩阵有一些很好的性质如下:

    1)拉普拉斯矩阵是对称矩阵,这可以由D和W都是对称矩阵而得。

    2)由于拉普拉斯矩阵是对称矩阵,则它的所有的特征值都是实数。

    3)对于任意的向量f我们有

        4) 拉普拉斯矩阵是半正定的,且对应的n个实数特征值都大于等于0,即0=λ1≤λ2≤...≤λn, 且最小的特征值为0,这个由性质3很容易得出

谱聚类基础之四:无向图切图

谱聚类算法流程 

     

SpectralClustering重要参数

      

        1)n_clusters:代表我们在对谱聚类切图时降维到的维数(原理篇第7节的k1k1),同时也是最后一步聚类算法聚类到的维数(原理篇第7节的k2k2)。也就是说scikit-learn中的谱聚类对这两个参数统一到了一起。简化了调参的参数个数。虽然这个值是可选的,但是一般还是推荐调参选择最优参数。

  2) affinity: 也就是我们的相似矩阵的建立方式。可以选择的方式有三类,第一类是 'nearest_neighbors'即K邻近法。第二类是'precomputed'即自定义相似矩阵。选择自定义相似矩阵时,需要自己调用set_params来自己设置相似矩阵。第三类是全连接法,可以使用各种核函数来定义相似矩阵,还可以自定义核函数。最常用的是内置高斯核函数'rbf'。其他比较流行的核函数有‘linear’即线性核函数, ‘poly’即多项式核函数, ‘sigmoid’即sigmoid核函数。如果选择了这些核函数, 对应的核函数参数在后面有单独的参数需要调。一般来说,相似矩阵推荐使用默认的高斯核函数。

        3)kernel_params:如果affinity参数使用了自定义的核函数,则需要通过这个参数传入核函数的参数。

  4 ) n_neighbors: 如果我们affinity参数指定为'nearest_neighbors'即K邻近法,则我们可以通过这个参数指定KNN算法的K的个数。默认是10.我们需要根据样本的分布对这个参数进行调参。如果我们affinity不使用'nearest_neighbors',则无需理会这个参数。

  5)eigen_solver:1在降维计算特征值特征向量的时候,使用的工具。有 None, ‘arpack’, ‘lobpcg’, 和‘amg’4种选择。如果我们的样本数不是特别大,无需理会这个参数,使用''None暴力矩阵特征分解即可,如果样本量太大,则需要使用后面的一些矩阵工具来加速矩阵特征分解。它对算法的聚类效果无影响。

  6)eigen_tol:如果eigen_solver使用了arpack’,则需要通过eigen_tol指定矩阵分解停止条件。

  7)assign_labels:即最后的聚类方法的选择,有K-Means算法和 discretize算法两种算法可以选择。一般来说,默认的K-Means算法聚类效果更好。但是由于K-Means算法结果受初始值选择的影响,可能每次都不同,如果我们需要算法结果可以重现,则可以使用discretize。

  8)n_init:即使用K-Means时用不同的初始值组合跑K-Means聚类的次数,这个和K-Means类里面n_init的意义完全相同,默认是10,一般使用默认值就可以。如果你的n_clusters值较大,则可以适当增大这个值。

        9)核函数参数degree:如果我们在affinity参数使用了多项式核函数 'poly',那么我们就需要对这个参数进行调参。这个参数对应K(x,z)=(γx∙z+r)d中的d。默认是3。一般需要通过交叉验证选择一组合适的γ,r,d.

        10)核函数参数coef0: 如果我们在affinity参数使用了多项式核函数 'poly',或者sigmoid核函数,那么我们就需要对这个参数进行调参。

总结:

        谱聚类算法的主要优点有:

    1)谱聚类只需要数据之间的相似度矩阵,因此对于处理稀疏数据的聚类很有效。这点传统聚类算法比如K-Means很难做到

    2)由于使用了降维,因此在处理高维数据聚类时的复杂度比传统聚类算法好。

  谱聚类算法的主要缺点有:

    1)如果最终聚类的维度非常高,则由于降维的幅度不够,谱聚类的运行速度和最后的聚类效果均不好。

    2) 聚类效果依赖于相似矩阵,不同的相似矩阵得到的最终聚类效果可能很不同。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值