谱聚类是基于图论的一种聚类方法。把n个样本点构成邻接矩阵。他们样本点之间的距离越大那么他们的权重越小,反之越大。那么我们如何来映射这种关系呢?这里用到高斯函数 其中
表示点i,j之间的权重。用W表示邻接矩阵(n*n的矩阵)
我们用 表示点 i 的度。D表示点的度矩阵。(D只有对角线上有元素,其他都为零。也是n*n的矩阵)
下面来看看图论里面的一个重要工具。拉普拉斯矩阵 这个矩阵有如下性质
- L 是对称矩阵,他的所有特征值都为实数
- 对于任意n维向量f 。有
- L是半正定的。所有的特征值都大于等于0.并且最小的特征值为0
有了上面的基础我们该考虑如何对图进行分割,才能达到聚类的效果 。对于切割得到的每一个子图需要满足两个条件。第一就是每一个子图内部的点之间的权重很大。第二就是子图与子图之间的权重很小。(一个子图就是一个簇)。
假设现在我们已经把原图分为了k个子图 .
定义子图之间的权重
那么对于切图的所有子图权重和的表达式为 其中
是
的补集。为了方便下面的运算我们另
。这不会影响最终结果。
现在我们需要最小化 这个式子。先不考虑如何求解这个目标函数。先看另一个问题。实践证明这个目标函数,会趋向于把偏远的离散点归为一个簇。我们肯定不需要这样的结果。所以我们需要对目标函数加一个惩罚项。结果为
其中
表示
集合的元素个数。加入了惩罚项后目标函数会倾向于把更多的点聚到一个子图里。
现在开讨论如何求解目标函数。这里就要用到拉普拉斯矩阵了。首先取一个向量 (k个子图)
满足 (取这个条件也只是为了方便后面计算整合,而且这里也决定的如何划分子图。每一个f对应于一个子图)。当然由这个性质可以推出
.其中
下面来看看这个式子 的结果。通过计算发现
。整合所有的子图
其中
。也就是现在问题等价于
。 我们来看看 L矩阵的特征值和特征向量。
(其中H是其特征向量,
是其特征值)。对这个式子变一下型
。我们发现
对F进行标准化后(
)
f就是L的一个特征向量。是对应的一个特征值 。现在问题就有变得简单了许多。也就是求解目标函数等价于找到L的前k个最小的特征值。找到了特征值后,我们就能找到与之对应的特征向量。前面说过了 f是特征向量。而且每一个f代表一个簇。
根据f向量中的值我们可以判定簇中有哪些点。从而实现聚类。但是我们只选了前k个特征向量。在这k个特征向量中并没有包含所有的样本点。所以在得到了k个簇后。还需要在这k个簇的基础上进性一次k-means算法把没有包含的点聚类到已知簇中