主成分分析(PCA)原理

降维就是一种对高维度特征数据预处理方法。降维是将高维度的数据保留下最重要的一些特征,去除噪声和不重要的特征,从而实现提升数据处理速度的目的。

在实际的生产和应用中,降维在一定的信息损失范围内,可以为我们节省大量的时间和成本。降维也成为应用非常广泛的数据预处理方法。

PCA(Principal Component Analysis),即主成分分析方法,是一种使用最广泛的数据降维算法。

设训练集数据如下:

$$T = \begin{bmatrix}
X_{1} & X_{2} & X_{3} & X_{4} \\
Y_{1} & Y_{1} & Y_{3} & Y_{4} \\
Z_{1} & Z_{2} & Z_{3} & Z_{4}
\end{bmatrix}$$

总体 $X,Y,Z$,该怎么解读这个 $3 \times 4$ 的矩阵呢?

    1)每一列代表一个样本点,一个样本点内的每个特征分别来自不同的总体,$4$ 列代表训练集中有 $4$ 个样本点;

    2)每一行的数据来自同一个总体,是对某一总体进行简单随机抽样的结果,$3$ 行代表有 $3$ 个维度/总体/特征,即一个样本点是由不同维度的数据构成的。

既然矩阵 $T$ 有几行代表几个维度,则 PCA 的目的就是:减少矩阵的行数。设 $C_{k \times 3},\; k \leq 3$,则变换后的数据集为

$$T^{'} = CT$$

上面举了一个简单的训练集的例子。

现在假设训练集为 $T_{m \times n}$,即有 $n$ 个样本点,每个样本点是 $m$ 维数据,现在找一个矩阵 $C_{k \times m}, \; k \leq m$ 将训练集从 $m$ 维降到 $k$ 维:

$$T^{'}_{k \times} = C_{k \times m}T_{m \times n}$$

对矩阵 $C$ 按行分块,矩阵 $T$ 按列分块,即

$$C_{k \times m} = \begin{bmatrix}
\beta_{1}  \\
\beta_{2}  \\
\vdots \\
\beta_{k}
\end{bmatrix} \;\;\;\;\;
T_{m \times n} = \begin{bmatrix}
\alpha_{1} & \alpha_{2} & \cdots & \alpha_{n}
\end{bmatrix}$$

对于矩阵 $T$,每一个向量 $\alpha_{i}$ 就代表一个样本点,是在 $m$ 维空间的一个向量,现在要把这些向量变换到 $k$ 维空间,那么首先就需要

找到 $k$ 个线性无关的向量构成一组 $k$ 维空间的基。我们要找的矩阵 $C$ 就是由这组基构成,每一行向量 $\beta_{i}$ 就是基中的一个向量,任意

两个行向量线性无关,矩阵 $C$ 行满秩,即 $r(C) = m$。考虑下面这个式子的含义:

$$\beta_{i} \cdot \alpha_{i}$$

向量内积表示:$\alpha_{i}$ 向 $\beta_{i}$ 所在直线投影的长度和 $|\beta_{i}|$ 的乘积。

向量 $\alpha_{i}$ 和 $\beta_{i}$ 所在的参考系是一样的,都是 $m$ 维空间中相同的一组基,现在我们想求各个样本点 $\alpha_{i}$ 以 $\beta_{i}, i = 1,2,...,k$ 作为参考系时的坐标。

当 $|\beta_{i}| = 1$ 时,$\beta_{i} \cdot \alpha_{i}$ 就是代表向量 $\alpha_{i}$ 在基向量 $\beta_{i}$ 上的分量或坐标。所以

$$C\alpha_{i}$$

表示 $m$ 维空间中的样本点 $\alpha_{i}$ 经过变换矩阵后在 $k$ 维空间中的坐标,基由 $\beta_{i},i=1,2,...,k$ 构成。

那么怎么选取 $k$ 个向量作为基呢?

PCA 的工作就是从原始的 $m$ 维空间中顺序地找一组两两正交的单位向量,即 $\beta_{i},i = 1,2,...,k$,因为它的参考系是在 $m$ 维空间,所以向量维度也是 $m$,

但向量组的秩是 $k$,即所在的空间的维度是 $k$,按下面的原则选择向量:

   1)在 $m$ 维空间中选择一个基向量,所有数据变换为这个基上的坐标表示后,方差值最大,选出的向量记为 $\beta_{1}$。

   2)在与 $\beta_{1}$ 正交的子空间中选择一个基向量,所有数据变换为这个基上的坐标表示后,方差值最大,选出的向量记为 $\beta_{2}$。

   3)$\beta_{3}$ 就是在与 $\beta_{1},\beta_{2}$ 正交的子空间里面选,以此类推选出所有向量。

我们已经知道样本点 $\alpha_{i}$ 在某个基向量 $x$ 下的坐标为:$(\alpha_{i}, x) = \alpha_{i}^{T}x$,于是我们有方差:

$$D(x) = \frac{1}{n - 1}\sum_{i=1}^{n} \big [ (\alpha_{i} - \bar{\alpha}_{i})^{T}x \big ]^{2}$$

每个 $\alpha_{i}$ 向量先减去它的均值向量 $\bar{\alpha}_{i}$,这样求出所有样本点在基向量 $x$ 上的分量后,可以直接求方差。因为常数的转置是本身,即

$$\left [(\alpha_{i} - \bar{\alpha}_{i})^{T}x  \right ]^{T} = (\alpha_{i} - \bar{\alpha}_{i})^{T}x$$

所以上面式子可以进一步转化为

$$D(x) = \frac{1}{n - 1}\sum_{i=1}^{n} \left [(\alpha_{i} - \bar{\alpha}_{i})^{T}x  \right ]^{T} \left [(\alpha_{i} - \bar{\alpha}_{i})^{T}x  \right ]    \\
= \frac{1}{n - 1}\sum_{i=1}^{n}x^{T}(\alpha_{i} - \bar{\alpha}_{i})(\alpha_{i} - \bar{\alpha}_{i})^{T}x \\
= x^{T}\left (\frac{1}{n - 1} \sum_{i=1}^{n}(\alpha_{i} - \bar{\alpha}_{i})(\alpha_{i} - \bar{\alpha}_{i})^{T}  \right )x$$

$$S_{m \times n} = \begin{bmatrix}
\alpha_{1} & \alpha_{2} & \cdots & \alpha_{n}
\end{bmatrix} -
\begin{bmatrix}
\bar{\alpha}_{1} & \bar{\alpha}_{2} & \cdots & \bar{\alpha}_{n}
\end{bmatrix} =
\begin{bmatrix}
\alpha_{1}^{'} & \alpha_{2}^{'} & \cdots & \alpha_{n}^{'}
\end{bmatrix}$$

即 $S$ 是每个样本点去中心化后的数据集,因为

$$SS^{T} = \begin{bmatrix}
\alpha_{1}^{'} & \alpha_{2}^{'} & \cdots & \alpha_{n}^{'}
\end{bmatrix}\begin{bmatrix}
\alpha_{1}^{'T}\\
\alpha_{2}^{'T}\\
\vdots \\
\alpha_{n}^{'T}
\end{bmatrix} = \sum_{i = 1}^{n}\alpha_{i}^{'}\alpha_{i}^{'T}$$

则方差可以转化为

$$D(x) = x^{T}\left (\frac{1}{n - 1} \sum_{i=1}^{n}(\alpha_{i} - \bar{\alpha}_{i})(\alpha_{i} - \bar{\alpha}_{i})^{T}  \right )x = x^{T}\left ( SS^{T} \right )x$$

考虑一下 $SS^{T}$ 有什么意义?现在将矩阵 $S$ 按行分块得

$$S = \begin{bmatrix}
\gamma_{1} \\
\gamma_{2} \\
\vdots \\
\gamma_{m}
\end{bmatrix}  \;\;\;\;
S^{T} = \begin{bmatrix}
\gamma_{1}^{T} & \gamma_{2}^{T} & \cdots & \gamma_{m}^{T}
\end{bmatrix}
\Rightarrow \; SS^{T} = \begin{bmatrix}
\gamma_{1}\gamma_{1}^{T} & \gamma_{1}\gamma_{2}^{T} & \cdots & \gamma_{1}\gamma_{m}^{T} \\
\gamma_{2}\gamma_{1}^{T} & \gamma_{2}\gamma_{2}^{T} & \cdots & \gamma_{2}\gamma_{m}^{T} \\
\vdots & \vdots & \ddots & \vdots \\
\gamma_{m}\gamma_{1}^{T} & \gamma_{m}\gamma_{2}^{T} & \cdots & \gamma_{m}\gamma_{m}^{T}
\end{bmatrix}$$

按行解读的话,每一行都是来自一个总体的简单随机样本,那么 $SS^{T}$ 就是这 $m$ 个总体的样本协方差矩阵。

我们要求的是能使方差最大的那个向量,先不管向量两两相互正交,可建立如下最优化问题来求解 $x$:

$$max \;\; x^{T}\left ( SS^{T} \right )x \\
s.t. \;\;\; x^{T}x = 1$$

必须有 $x^{T}x = 1$ 这个约束,不然向量直接取 $x = (\infty, \infty, ..., \infty)$ 就可以了,显然这不是我们想要的解。

建立拉格朗日函数:

$$L(x, \lambda) = x^{T}\left ( SS^{T} \right )x + \lambda \left ( x^{T}x - 1 \right )$$

对列向量 $x$ 求偏导得(如果不知道怎么对向量求导,可先阅读博客):

$$\frac{\partial L}{\partial x} = 2SS^{T}x - 2\lambda  x = 0   \;\; \Rightarrow \;\; SS^{T}x = \lambda x$$

惊讶得发现,偏导函数为 $0$ 的解就是协方差矩阵 $SS^{T}$ 的特征向量,将每一个特征向量代入 $L(x, \lambda)$ 得

$$D(x) = x^{T}SS^{T}x = \lambda x^{T}x = \lambda$$

我们要找到最大方差就是协方差矩阵最大的特征值,最佳投影方向就是最大特征值所对应的特征向量,次佳就是第二大特征值对应的特征向量,

以此类推。然后将每个特征向量单位化,$C_{k \times m}$ 就是由前 $k$ 大的特征值所对应的单位特征向量构成。

 

posted @ 2020-10-10 16:27  _yanghh  阅读(463)  评论(0编辑  收藏  举报