SciTech-Mathmatics-BigDataAIML: PCA(Principle Component Analysis)主成分分析 的 数学原理 + 应用示例
SciTech-Mathmatics-BigDataAIML:
PCA(Principle Component Analysis)主成分分析
参考链接
- How to Calculate Principal Component Analysis (PCA) from Scratch in Python
https://www.kaggle.com/code/aurbcd/pca-using-numpy-from-scratch - PCA using Numpy from scratch
https://www.kaggle.com/code/aurbcd/pca-using-numpy-from-scratch
应用示例
例子背景
假设:有一个包含10个x(sample,样本)和4个f(feature, 特征)的dataset(数据集)。特征为:
$\large \bm{X_1}\text{, } \bm{X_2}\text{, } \bm{X_3}\text{, } \bm{X_4} $
| \(\large Feature \rightarrow\) \(\large Sample \downarrow\) |
\(\large \bm{X_1}\) | \(\large \bm{X_2}\) | \(\large \bm{X_3}\) | \(\large \bm{X_4}\) |
|---|---|---|---|---|
| 1 | 2.5 | 2.4 | 3.5 | 4.2 |
| 2 | 0.5 | 0.7 | 1.2 | 1.5 |
| 3 | 2.2 | 2.9 | 3.1 | 3.8 |
| 4 | 1.9 | 2.2 | 2.9 | 3.2 |
| 5 | 3.1 | 3.0 | 3.8 | 4.0 |
| 6 | 2.3 | 2.7 | 3.3 | 3.9 |
| 7 | 2.0 | 1.6 | 2.7 | 3.0 |
| 8 | 1.0 | 1.1 | 1.5 | 1.8 |
| 9 | 1.5 | 1.6 | 2.2 | 2.5 |
| 10 | 1.1 | 0.9 | 1.4 | 1.7 |
| \(\large \bm{\mu}\) | 1.81 | 1.91 | 2.76 | 3.06 |
| \(\large \bm{\sigma}\) | 0.834 | 0.828 | 0.823 | 0.8574 |
数据标准化
对数据进行标准化处理。
-
计算每个f(feature, 特征)的: \(\large \bm{\mu}(均值) 和 \bm{\sigma}(标准差)\),
\(\large \begin{array}{lll} \\ \bm{\mu}_{X_1} & =1.81,\ \bm{\sigma}_{X_1} &=0.834 \\ \bm{\mu}_{X_2} &=1.91,\ \bm{\sigma}_{X_2} &=0.828 \\ \bm{\mu}_{X_3} &=2.76,\ \bm{\sigma}_{X_3} &=0.823 \\ \bm{\mu}_{X_4} &=3.06,\ \bm{\sigma}_{X_4} &=0.8574 \\ \end{array}\) -
Normalization(标准化, 用公式 \(\large \bm{X^{'}} = \dfrac{ \bm{X} - \bm{\mu} }{ \bm{\sigma} }\)):
标准化后的数据集,特征值都在0值附近;
对Dataset做的第一次数据变换:\(\large Normed. Fs. \rightarrow\)
\(\large Sample \downarrow\)\(\large \bm{X^{'}_1}\) \(\large \bm{X^{'}_2}\) \(\large \bm{X^{'}_3}\) \(\large \bm{X^{'}_4}\) 1 0.827 0.592 0.902 1.334 2 -1.569 -1.455 -1.896 -1.821 3 0.469 1.195 0.423 0.866 4 0.107 0.351 0.157 0.163 5 1.549 1.318 1.258 1.093 6 0.588 0.967 0.671 0.976 7 0.227 -0.340 -0.085 -0.070 8 -0.969 -0.972 -1.524 -1.455 9 -0.377 -0.340 -0.683 -0.655 10 -0.847 -1.216 -1.626 -1.589 \(\large \bm{\mu}\) 0 0 0 0 \(\large \bm{\sigma}\) 1 1 1 1
-
计算 Covarianve Matrix(协方差矩阵), 也即: 任意两个f(feature,特征)的“线性相关性”:
-
Formula(公式, Normed(标准化) Fs.数据的协方差矩阵) :
\(\large \sum = \dfrac{1}{n-1} ({X^{'}}^{T}) X^{'}\) -
计算得到的\(\large Cov.\ Maxtrix\) 为:
\(\large \begin{array}{lll} \\ CovM_{n \times n} = \dfrac{1}{n-1} ({X_{m \times n}^{'}}^{T}) X_{m \times n}^{'} \\ \begin{bmatrix} 1.000 & 0.978 & 0.923 & 0.899 \\ 0.978 & 1.000 & 0.934 & 0.900 \\ 0.923 & 0.934 & 1.000 & 0.943 \\ 0.899 & 0.900 & 0.943 & 1.000 \\ \end{bmatrix} \\ \end{array}\)
-
-
\(\large Eigenvaue\ Decomposition\) of \(\large Cov.\ Maxtrix\) (分解 协方差分矩阵):
通过\(\large Eigenvaue\ Decomposition\)的方式找到\(\large Cov.\ Maxtrix\)投影后方差最大的方向,
即\(\large Eigenvector(特征向量)\)的方向, 而且投影在Eigenvector方向上的\(\large Eigenvaue\)即为其"变异程度".-
\(\large Eigenvector(特征向量)\)
- 定义: \(\large Eigenvector\) 是 协方差矩阵 的 特征值对应的方向。
它表示数据在这个高维向量方向上的主要分布方向。 - 含义: \(\large Eigenvector\) 表示 数据 在 某个高维向量方向上 的 分布特征。
通过这些\(\large Eigenvector\),我们可以确定数据的主成分方向。
- 定义: \(\large Eigenvector\) 是 协方差矩阵 的 特征值对应的方向。
-
\(\large Eigenvaue(特征值)\) 定义:
(特征值)表示数据在 对应的 eigenvector(特征向量)方向 上的方差大小.
"本示例"则是 Normed. Fs(标准化特征数据) 的 \(\large Cov.\ Maxtrix\) 在 某个向量方向上的 变异量.- \(\large Eigenvaue(特征值)\) 含义:
Eigenvaue越大,表示数据在对应特征向量方向上的方差(变异)越大,即该方向上包含的信息越多。
Eigenvaue用途:排序Principle Component(主成分)的重要性(前述"最大方差理论").
- \(\large Eigenvaue(特征值)\) 含义:
计算 eigenvalue(特征值) 和 eigenvector(特征向量)
- 对 \(\large Cov.\ Maxtrix\) 进行 eigenvalue decomposition(特征值分解),
即: $\large CovM_{n \times n} \ V = \lambda V, $
得到特征值和特征向量, 特征值 表示每个 特征向量(主成分)解释的数据变异量; - 计算结果(eigenvalue 和 eigenvector)为:
\(\large \begin{array}{llll} \\ \bm{\lambda_1}=3.706 , & \ \bm{\lambda_2}=0.264 , & \ \bm{\lambda_3}=0.028 , & \ \bm{\lambda_4}=0.002 \\ \bm{v_1} = \begin{bmatrix} 0.509 \\ 0.510 \\ 0.507 \\ 0.494 \\ \end{bmatrix}, & \ \bm{v_2} = \begin{bmatrix} 0.227 \\ 0.056 \\ -0.647 \\ 0.724 \\ \end{bmatrix} , & \ \bm{v_3} = \begin{bmatrix} 0.435 \\ 0.786 \\ -0.306 \\ -0.314 \\ \end{bmatrix} , & \ \bm{v_4} = \begin{bmatrix} 0.703 \\ 0.347 \\ 0.472 \\ -0.419 \\ \end{bmatrix} \\ \end{array}\)
-
-
选择PC(Principle Component, 主成分):
- 目标: 总之“精简维度”:保障"信息保真度"为前提,降维;
可选择前2,前3, 要少于"原始数据维度"。 - 选择方法:
选择\(\large \bm{eigenvalue}(特征值)最大** 的 **前\)\large \bm{k}$个** $\large \bm{eigenvector}** 作为P.C.(主成分)。
本例, 因为eigenvalue 的 \(\large \bm{\lambda_1}\) \(\large \bm{\lambda_2}\)是最大的两个,
所以, 我们选 \(\large \bm{v_1}\) \(\large \bm{v_2}\)作为PC(Principle Component,主成分)。
- 目标: 总之“精简维度”:保障"信息保真度"为前提,降维;
-
数据投影(投影就是做一个线性变换)
将原始数据投影到选择的PC(主成分)上,得到降维后的数据。投影公式为:\[\large Y = X^{'} V, \ where\ V \text{ is a } Matrix \text{ composed by the }top\ k \ Principle\ Components \]特征值就由四个\(\large \bm{X_1}\text{, } \bm{X_2}\text{, } \bm{X_3}\text{, } \bm{X_4}\) 变成\(\large \bm{PC_1}\text{, } \bm{PC_2}\) 这两个(主成分特征维度).
\(\large Transformed. PCs. \rightarrow\)
\(\large Sample \downarrow\)\(\large PC_1\) \(\large PC_2\) 1 1.713 0.762 2 -3.479 0.930 3 2.023 0.610 4 0.456 0.178 5 2.883 -0.243 6 1.798 0.224 7 0.334 -0.487 8 -2.768 0.875 9 -1.289 0.079 10 -2.671 1.078
总结
- 降维概念:降维旨在减少数据集的特征数量,同时有效的
保留原始数据的重要信息 - 常见方法:\(\large \bm{PCA}\)(主成分分析)、\(\large \bm{LDA}\)(线性判别分析)和\(\large \bm{SVD}\)(奇异值分解)等
为何降维
- 降维 的一个 重要目的 是为了 数据可视化
简化模型的复杂性,减少拟合噪声的风险,提高模型在 新数据的泛化能力,有效地控制过拟合- 特征数据
本身就存在相关性和冗余
数学原理
\(\large Eigenvaue\) 和 \(\large Eigenvector\) 的 \(\large Mathmatical\ Definition\):
设 \(\large A\)是 \(\large 数域K\) 上的 \(\large n级矩阵\), 如果 \(\large K^n\)有\(\large 非零列向量\alpha\) 使得:
$$ \large A \alpha = \lambda_0 \alpha,\ 且 \lambda_0 \in K,$$
则称:
- $\large \lambda_0 $ 是 \(\large A\) 的一个 \(\large Eigenvaue(特征值)\),
- \(\large \alpha\) 是 \(\large A\) 的 \(\large Eigenvaue\ \lambda_0\) 的一个\(\large Eigenvector(特征向量)\)。
或换一种表达:
- \(\large \alpha\) 是 \(\large A\) 的一个 \(\large Eigenvector\)(特征向量, "特别"的"投射变换列向量")
- $\large \lambda_0 $ 是 \(\large A\) 投射变换在\(\large \alpha\)向量方向上的一个 \(\large Eigenvaue\)(特征值, scalar)
因为 矩阵 \(\large A_{m \times n}\)(设m<n),右乘(矩阵乘法) 一个\(\large \alpha_{n \times 1}\)("变换列向量"),
- 其变换结果将会是 \(\large X_{m \times 1}\)(结果列向量),
- 若\(\large X_{m \times 1}(结果列向量)\) 与 \(\large \alpha_{n \times 1}(变换列向量)\) 存在\(\large X_{m \times 1} = \lambda_0 \alpha_{n \times 1}\),
- 则
右乘变换列向量 的 高维几何意义就是将:
\(\large A_{m \times n}\)投射到 \(\large \alpha_{n \times 1}\)(变换列向量)的向量方向上。
并且 \(\large \lambda_0\) 是 \(\large A_{m \times n}\)投射在\(\large \alpha_{n \times 1}\)变换列向量方向上的 \(\large Eigenvaue\)(特征值). - AI/ML上的意义 就是 将

浙公网安备 33010602011771号