NIPS_2014_Greedy Subspace Clustering的阅读心得
这是子空间聚类的文章。通常的子空间聚类的基本思想是:假设高维数据(样本)来自不同的子空间,每一个子空间表示一类。假如在1000维(p=1000)的空间(称为 Ambient Space)中,所有样本来自500维(当然,更普遍的情况是样本可能来自不同的子空间,比如有些来自400维,有些来自600维....),这样的子空间有无数个。
这篇文章与其它子空间聚类算法不一样,它采用贪心方法来得到各个样本的最近邻,由这些最近邻构成相似矩阵,并由此来完成聚类。同时,作者也提出了一种新的聚类方法。
一、采用贪心子空间方法来得到各个样本的最近邻的具体过程如下:
设每个样本的最近邻数量为K,所有样本都做了归一化处理;总的样本数为$N$。
(1)取第一个样本$x_1$,并令集合$U={x_1}$,将其写剩下的样本做内积(这是度量样本相似性的方法之一,一般会采用距离来进行度量),这样会得到一个向量$P_1$,其维度为$N$,必须要将该向量的第$1$个元素置为0。
(2)挑出与$x_1$内积最大的样本$x_1^{(1)}$,并令$U={x_1,x_1^{(1)}}$,将其与$x_1$进行schmit正交化。这时$x_1^{(1)}$与$x_1$构成了子空间$S_1^{(1)}$
(3)将除$x_1$,$x_1^{(1)}$的其它样本投影到子空间$S_1^{(1)}$上,会得到一个$N$维的向量$P_1^{(1)}$,然后将$P_1$与$P_1^{(1)}$逐元素相加得到一个新的向量,求这个向量的最大值的索引所对应的样本,将其设为$x_1^{(2)}$,令$U={x_1,x_1^{(1)},x_1^{(2)}}$。这样一直做下去,直到得到$K$个最近邻。这里需要说明,样本投影到子空间$S_1^{(1)}$上,就是将样本与子空间的各个基作内积,就会得到夹角的值(因为已经归一化),然后会对这些值进行平方(这一点由源代码和论文可以看出)。
二、采用贪心子空间聚类方法。
这种方法是建立在前面的求最近邻的基础之上。在前面求最近邻的过程中,在求每个样本的最近邻时,也得到了每个样本的一组子空间基向量(这一点可由源代码看到,文章提供的算法没有详细给出)。对于所有训练样本,将它们分别与每组基向量进行Schmit正交化,然后得到残差最好的一组基作为其中的一个子空间的基。设样本所构成的矩阵为$Y\in \mathbb{R}^{p\times N}$,其中$p$为样本的维数,$N$为样本数;第$i$样本的正基为$U_i$,则$Y$在这组基(或这组子空间下)是否最好,可由下面的公式(行Schmit正交化)来度量:
nnz( sum( $(Y-U_iU_i^TY).^2$,1)<$\epsilon$) $(1)$ (这是按matlab语法写的,其中nnz是统计非零元素个数,sum(.,1)是按列对矩阵求和)
注意$Y-U_iU_i^TY$其实也可以看成是PCA的另一种形式,也可以看成是基于$U_i$的Schmit正交化,也就是说$Y-U_iU_i^TY$与$U_i$是正交的。公式(1)是采用统计非零个数来度量$Y$与$U_iU_i^TY$之间的相似程度,非零个数越多,就表明越相似,但是也可用下面的方式来进行度量(这是我自己想出来的,论文中没有这样做):
$\|Y-U_iU_i^TY\|_F^2$
$U_iU_i^TY$在哪组$U_i,i=1,\ldots,N$下越能近似$Y$,就将该$U_i$当成一个子空间的基,这样做$L$次($L$为子空间的数量),就可以得到$L$个子空间的基。
在聚类时,将样本矩阵$Y$与某个$U_i$做内积,就可以判断出哪个样本属于哪一类,从而实现聚类。
具体实现见https://files.cnblogs.com/files/ml-cv/run_sc_synthetic.zip,我对一些关键代码进行了注释。
浙公网安备 33010602011771号