最为常见的无监督任务就是聚类和降维。聚类是为了揭示数据的内在性质及规律,为进一步的数据分析提供基础;降维是为了解决“维数灾难”,提高计算效率。聚类的方法很多,最常见的就是 kmeans 算法,但它一是大量的距离计算,效率低,二是鲁棒性差,如果原始数据存在噪声,则效果很差。

子空间聚类则基于一种更合理的假设,认为高维数据分布于多个低维子空间的并, 从而进行了子空间分割,实现聚类,能解决以上两个问题。

任务定义

子空间聚类算法大致可分为 5 类,基于矩阵分解的方法、代数方法、迭代方法、统计方法、 基于谱聚类的方法,本文主要讲的是基于谱聚类的方法。

子空间聚类基于一个合理的假设

数据采样自多个低维子空间的并(集)

要说下什么是子空间。

在数学上,子空间指的是 维度小于等于全空间的部分空间

理解起来不是很直观,其实简单想就是一个三维空间的子空间就是二维和一维空间。如下图,一群样本用三个特征进行描述(相当于位于三维空间),但其数据本质如果是二维或者一维(或者说采样自),即位于其所属的低维子空间,那么如果我们能对来自不同子空间的样本进行重新表示(子空间表示任务),然后利用得到的表示系数矩阵就能将位于同一个子空间的样本聚为一类(谱聚类任务)。

子空间聚类_算法

数据点分别位于S1、S2、S3三个子空间,即三类样本

此时我们可以给出子空间聚类任务的定义

子空间聚类_数据_02

整个子空间聚类的流程如下:

子空间聚类_聚类_03

实际就是先进行子空间表示,得到一个系数矩阵,用此矩阵构建相似度矩阵,在进行谱聚类,得到结果。

子空间表示与谱聚类

子空间聚类算法最常见的有 SSC、LRR,我们以 SSC 为例进行讲解整个算法流程,主要就是分为子空间表示和谱聚类两个步骤。

符号说明

这里将涉及许多范数以及一些符号说明,如下:

子空间聚类_聚类_04

矩阵还有一些行范数、列范数之类的,在这里一般用不上。

SSC

稀疏子空间聚类(Sparse Subspace Clustering,SSC)的就是要实现数据点在一个字典下的表示尽可能地稀疏,即线性表示的非零项尽可能少,非零系数的位置表明该数据属于由相应基张成的子空间,其非零项的个数即本质维度。

如式(4), Y∈RD×N 为字典,在 SSC 中使用自表示,即用样本数据集本身作字典,每列为一个样本, yi∈RD×1 为一个样本, ci∈RN×1 为该样本的稀疏表示,目标函数本应该是 l0 范数,由于其离散性质,优化问题为 NP难,所以一般用 l1 范数代替,同时约束条件中的 cii=0 是指对应原样本位置的系数为0。这个表达式其实就是使用数据集的一个线性组合来表达我们的一个原样本,同时这个线性组合要满足(1)尽可能稀疏 (2)一个样本不能仅用它自己表示。最终其实就相当于一个样本用同属于一个子空间的其他样本线性表出,这同一子空间的样本就属于一个簇。

子空间聚类_数据_05

将这个表达式用整个矩阵写出来,即把所有样本都放在一起,则:

子空间聚类_算法_06

如果考虑有噪声的情况则有下式:

子空间聚类_算法_07

其中 E 是刻画稀疏的离群项(稀疏高斯噪声), Z 则是一个普通的噪声矩阵(因为是F范数,感觉就是均匀分布的噪声),约束条件的等式的意义就是原数据由稀疏表示项(当然它只是表示系数,所以要左乘一个字典)和一些误差项组成,我们的目的是要得到这个稀疏表示项

该优化问题一般使用 ADMM 算法进行求解,最终我们得到表示矩阵 C ,就完成了子空间表示任务,使用 W=|C|+|C|T 得到亲和力矩阵(有的叫相似矩阵,谱聚类中也可看作是邻接矩阵,有的此处除以了2,都差不多),其实这个时候 W 矩阵里面就包含了哪些样本属于同一簇的信息了,但是需要进行更合理地划分,所以接下来进行谱聚类,整个 SSC 的算法流程如下:

子空间聚类_机器学习_08

详细谱聚类教程看这个,在上述第3步之后的谱聚类可以简单描述为以下步骤:

  1. 利用 W 看作邻接矩阵计算度矩阵 D ,进而计算对称归一化拉普拉斯矩阵 L=I−D−1/2WD−1/2
  2. 对 L 进行 SVD,取最小的 n 个特征值对应的特征向量,形成一个 N*n 的矩阵,对其按行标准化,其中每一行为该样本的指示向量(通过其值判断属于哪个簇)(该方法为Ncut切图,还有其他切图方法)
  3. 在对每行进行 kmeans(即将每行看作一个样本),得到最后的簇划分

谱聚类本身的思想就是将所有数据看作一个节点,通过某种方法(如距离计算、子空间表示)得到节点间边的权重(如 SSC 中先学得表示 C ,再构建相似矩阵 W ),相近的点权重更高,此时就得到了一个图,对整个图进行切图操作,得到目标簇数个子图,尽可能使子图间权重低,子图类权重高,最终就得到了簇划分。

子空间聚类_谱聚类_09

kmeans与spectral clustering对比

在上述谱聚类的第2步其实本身已经可以得到簇划分了,但是由于是进行了特征分解,信息有所损失,会再次进行kmeans,此时相当于我们将原本数据的 D 维特征降到了 n 维再用kmeans,这也解释了为什么子空间聚类效率更高,而其中表示矩阵学习的过程中有噪声正则项,因此在聚类准确率上也会有提升,特别是对含噪数据。

一个例子

接下来通过一个简单的例子来形象的描述整个子空间聚类过程:

首先我们通过 SSC 计算出了表示矩阵 C ,并通过 W=|C|+|C|T 得到相似矩阵(就是我们要构建图结构的邻接矩阵),可以看出 W 是对称的,其实 W 用这个表达式目的就是:一个样本 yi∈Sl 可写成 yj∈Sl 在内的其他点的线性组合,但 yj 的稀疏表示不一定含有 yj ,这样会导致图不连接(违背了邻接矩阵的对称性),而通过这个表达式则可使其对称且非负。如下图,共九个数据点,分为三个簇,左边计算得到的相似矩阵,其黑色方框表示较大的权重值,灰色为较低的权重值(在 SSC 中该对角线处权重应该为0,该图未示意出),对应上面形成的图结构(权重大的距离更近),此时进行谱聚类(切图操作),得到三个子图,聚类完成,而这个谱聚类的操作就相当于我们对整个相似矩阵的行列进行变换,使其同一簇(同一子空间)的数据点排在一起,不同簇顺序排列,刚好能形成块对角结构(同样 SSC 得到的对角线应该为0)。这个块对角结构的性质非常重要,它揭示了数据的子空间结构,即我们如果已知数据的子空间结构,并将数据按类别逐列排放,则相似矩阵将具有块对角结构,这个块对角越明显(因为这个不是完全的块对角矩阵,灰色方框也是有值的,块内也有可能有权值低的值)则说明这个相似矩阵学习得越好,最后谱聚类效果也越好。

子空间聚类_机器学习_10

其他算法

概括

子空间聚类的大致形式都如同 SSC 类似,其主要工作主要围绕以下几个方面

  1. 表示矩阵项设计。目的是为了更好的获得子空间结构,如低秩表示(Low Rank Representation,LRR)。
  2. 误差项设计。有通过不同的范数或者其他 loss 进行约束,还有基于信息熵理论,使用独立和分段同分布模型来刻画噪声。
  3. 加入块对角先验。即在求解表示矩阵的优化问题中,引入约束条件,使相似矩阵具有更好的块对角结构。
  4. 多视图子空间聚类。针对多视图数据,一般是在优化问题中进行一个求和,并再加入一个用于规范不同视图表示矩阵间的正则项。
  5. 快速算法。
  6. 应用场景。如运动分割、图像分割、人脸聚类、文本聚类等。

下面这张表列出了一些子空间聚类模型:

子空间聚类_聚类_11

LRR

这里介绍下通过低秩表示(Low Rank Representation,LRR)进行子空间聚类。先直接给出该最优化问题最初的表达式:

子空间聚类_聚类_12

目的很明显,就是要使表示矩阵尽可能低秩,误差项就是选择一个范数进行规范化,那为什么是低秩呢?以下是我自己的理解。

在矩阵中,秩 = 不相关程度的大小,一个矩阵满秩即代表其行列线性无关(通过初等行变换后形成的阶梯矩阵非零行数为0),低秩则代表其相关程度大(信息具有冗余性),而现实中如一张质量好的图像通常都是低秩的(即相邻像素与像素之间是接近的,图像是平滑的,不会出现突然的噪点),具体可以看看这个回答 矩阵低秩的意义

该最优化问题的目标函数不是凸函数,对其进行凸松弛得到凸优化问题,即用核范数代替秩,而误差项则用 l2,1 范数,形成最终表达式:

子空间聚类_聚类_13

到这里看似后面就是谱聚类了,其实还有两个问题,一是 LRR 不是用的自表示,字典是 A ,一般通过以下方法得到:

子空间聚类_谱聚类_14

上图中 X 是数据矩阵, A 是字典,orth函数是得到输入矩阵的标准正交基,通过得到的正交基左乘数据矩阵得到字典(相当于原数据矩阵的线性组合),可以理解为这样得到的字典更为干净。

二是 LRR 论文中由表示矩阵得到相似矩阵的过程有它自己的方法,中间用了 SVD,如下图,具体细节我没去探究,感觉是这样得到的相似矩阵能降低形成的图结构的复杂性(减少一些边,或者是降低其权值),便于更好地进行谱聚类?

子空间聚类_聚类_15

同时 LRR 论文中给出了估计聚类簇数的方法。

一些插曲

我在看子空间聚类相关论文和资料时,经常出现几个东西,感觉有些相关性,顺便总结下,分别是PCA、RPCA、低秩矩阵补全、低秩矩阵恢复

PCA与RPCA

PCA就是主成分分析,RPCA(Robust Principal Component Analysis)是鲁棒主成分分析。

这里简单总结下,具体可以看看这两篇文章:PCA与RPCA、RPCA

PCA 一般用于降维,本身就是要学得一个线性变化矩阵,通过这个矩阵,可以将高维信息投影到低维,而准则一是可以最近重构性,二是最大可分性(个人感觉更好理解,即样本点投影到新的低维度后尽可能分开)。这里要和 RPCA 对比,那么 PCA 就不能简单看作降维了,实际相当于进行了去噪,只是这个噪声是与原数据独立同分布的高斯噪声,得到了降维后的表示相当于去噪了。

子空间聚类_算法_16

来自博主“静_渊”

RPCA 则是用于去除高幅尖锐噪声(稀疏的,就是 SSC 中的离群项),其想要得到的数据矩阵则需要低秩的,如下式,这里就会发现 RPCA 和 LRR 非常像,论文里也说了 LRR 可看做广义的 RPCA,只是多了字典(进行子空间表示)。

子空间聚类_机器学习_17

低秩矩阵补全

主要是学最优化理论时看到的,这个课程

低秩矩阵补全主要应用在推荐系统,就是对于一个用户与产品的数据矩阵,可能缺少很多项,我们需要补全这个矩阵以更好地进行对用户进行推荐,对于我们要得到最终的数据矩阵,约束条件就是已知项等于原始数据矩阵已有的值,目标函数就是要使得到的数据矩阵最终低秩,相当于用其他行列的线性组合来填充空白项,通过低秩来约束解的数量。下面是ppt:

子空间聚类_数据_18

子空间聚类_谱聚类_19

子空间聚类_聚类_20

子空间聚类_数据_21

子空间聚类_数据_22

子空间聚类_数据_23

子空间聚类_谱聚类_24

低秩矩阵恢复

看了这里其实会发现就是 RPCA,只是换了个名(手动狗头),它还可以叫低秩稀疏矩阵分解(LRSMD)。

子空间聚类_数据_25

子空间聚类_算法_26

子空间聚类_数据_27

子空间聚类_机器学习_28