Skip to content

聚类方法

约 1018 个字 预计阅读时间 3 分钟

Warning

这章我看的昏昏的,只算预发布

一些定义

样本间距

\[ d_{ij} = \left( \sum_{k=1}^p \left| x_{ik} - x_{jk} \right|^r \right)^{\frac{1}{r}} \]

首先计算协方差矩阵 S

\[ S = \frac{1}{n-1} \sum_{i=1}^n (x_i - \bar{x})(x_i - \bar{x})^T \]

首先计算协方差矩阵 S

\[ r_{ij} = \frac{S_{ij}}{\sqrt{S_{ii}S_{jj}}} \]
\[ \cos \theta_{ij} = \frac{x_i^T x_j}{\sqrt{x_i^T x_i x_j^T x_j}} \]

一些矩阵

\[ S = \sum_{i=1}^n (x_i - \bar{x})(x_i - \bar{x})^T \]
\[ S = \frac{1}{n-1} \sum_{i=1}^n (x_i - \bar{x})(x_i - \bar{x})^T \]

类相关定义

一个类就是数据集的一个子集

类内最远间距

\[ D_G = \underset{x_i,x_j \in G}{\operatorname{max}} d_{ij} \]

也就是所有样本的平均值

\[ \bar{x} = \frac{1}{n} \sum_{x_i \in G} x_i \]

可以使用两类中样的最短距离,最长距离,中心距离或者平均距离

聚合聚类

聚合聚类三要素为:

  • 样本间距
  • 合并规则
  • 停止条件

给定以上三要素,一般的聚合聚类的算法为:

  • 开始:每个样本为一个类
  • 重复:一句合并规则(一般为找到最小类间间距),合并两类
  • 停止:达到停止条件即返回,比如类的个数达到要求

该算法的复杂度为\(O(n^3m)\),其中 m 为维度数,n 为样本个数

聚合聚类属于层次聚类,因为我们可以得到从 n 类-1 类这一系列的分类结果

注意在过程中我们可以使用\([d_{ij}]\)矩阵来加速运算

K-means

时间复杂度为\(O(mnk)\)

k 的选取应该大到类直径不再减小为止

谱聚类

数学上,谱字一般跟特征值分解的方法有关

我们把数据集\(\{(x_i)\}\)中的每一个点都对应到一个无向完全图上的点,两点之间连边的权重设置为它们的相似度。

相似度

\[ w_{ij} = e^{-\frac{||x_i - x_j||^2}{2\sigma^2}} \]

显然,距离越近,相似度越大。

对于那些足够遥远的点,我们可以不再相连,直接把相似度置 0.如何确定这些足够遥远的点呢 - 用 k 近邻确定几个邻近的点 - 用一个\(\epsilon\)半径来区分远近

定义一个点的度为其所有边的权重和,那么我们可以得到下面三个矩阵

矩阵定义

\[ D_{ii} = \sum_{j=1}^n w_{ij} \]
\[ W = [w_{ij}] \]
\[ L = D - W \]

我们可以发现如下性质:

  • L 的行和为 0
  • L 有一个特征向量为 0,该特征值有一个特征向量为全 1 (1)
  • L 有 n 个非负特征值,n 是顶点数
  • L 办正定,且\(f^TLf = \frac{1}{2}\sum_{i,j=1}^n w_{ij}(f_i - f_j)^2\)
  • L 零特征值的重数等于连通子图的个数
  1. 这其实就是行和为 0 的直接推论,我们拿全 1 向量左乘 L 就得到 0 向量了

所以当 L 只有一个连通子图的时候,零特征值只有 1 重,也就是全 1 向量

当 L 的连通图多于一个的时候,加入 L 可以写成:

\[ L = \begin{bmatrix} L_1 & 0 & 0 \\ 0 & L_2 & 0 \\ 0 & 0 & \dots \\ \end{bmatrix} \]

那么其对应的零特征向量为:

\[ \begin{bmatrix} 1 \\ 1 \\ \vdots \\ 0 \\ 0 \\ \vdots \\ 0 \\ 0 \end{bmatrix} \begin{bmatrix} 0 \\ 0 \\ \vdots \\ 1 \\ 1 \\ \vdots \\ 0 \\ 0 \end{bmatrix}\dots \begin{bmatrix} 0 \\ 0 \\ \vdots \\ 0 \\ 0 \\ \vdots \\ 1 \\ 1 \end{bmatrix} \]

基本上可以认为,每个连通子图自己构成一个分块\(L_i\),这个\(L_i\)也有一个自己对应的特征零向量

那么我们将这些特征向量拼接成一个矩阵

\[ F = [f_1,f_2,\dots,f_n] \]

然后按照行对其进行聚类就可以(也就是说每个连通子图被聚成一类)

Comments