PCA 降维完整教程
无复杂前置知识(无需线性代数、AI基础),包含均值/方差/协方差公式、数据中心化、协方差矩阵、特征值/特征向量手工推导、投影降维手工计算、PCA完整步骤
一、PCA 是什么?一句话理解
PCA(主成分分析)是一种数据降维方法 :把高维数据(如 3D、2D)"压扁"到低维(2D、1D),尽可能保留数据中的信息(变化),丢掉最少信息。
-
信息 ≈ 数据的波动大小(方差)
-
PCA 核心:找到数据变化最大的方向,只保留这个方向,完成降维
二、使用示例数据
2 维数据点 3 个,我们将其从 2D 降到 1D,全程手工计算:
-
A(1,2)A(1, 2)A(1,2)
-
B(2,2)B(2, 2)B(2,2)
-
C(3,4)C(3, 4)C(3,4)
三、基础概念:均值、方差、协方差(必备公式,Obsidian适配)
1. 均值
所有计算的基础,单个变量所有样本的平均值:
xˉ=1n∑i=1nxi\bar{x} = \frac{1}{n}\sum_{i=1}^n x_ixˉ=n1i=1∑nxi
本例(n=3,x为横坐标,y为纵坐标):
xˉ=1+2+33=2,yˉ=2+2+43=83≈2.6667\bar{x} = \frac{1+2+3}{3} = 2,\quad \bar{y} = \frac{2+2+4}{3} = \frac{8}{3} \approx 2.6667xˉ=31+2+3=2,yˉ=32+2+4=38≈2.6667
2. 方差(Variance)
描述单个变量自身波动大小 (波动越大,信息越多),我们用样本方差(除以 n−1n-1n−1,更贴合实际数据):
Var(x)=1n−1∑i=1n(xi−xˉ)2Var(x) = \frac{1}{n-1}\sum_{i=1}^n (x_i - \bar{x})^2Var(x)=n−11i=1∑n(xi−xˉ)2
3. 协方差(Covariance)
描述两个变量是否一起变化,判断变量间的关联程度:
-
协方差 > 0:两个变量同增同减
-
协方差 < 0:两个变量一增一减
-
协方差 = 0:两个变量无关联
公式:
Cov(x,y)=1n−1∑i=1n(xi−xˉ)(yi−yˉ)Cov(x,y) = \frac{1}{n-1}\sum_{i=1}^n (x_i - \bar{x})(y_i - \bar{y})Cov(x,y)=n−11i=1∑n(xi−xˉ)(yi−yˉ)
4. 协方差矩阵(PCA 核心矩阵)
对二维数据(两个变量x、y),协方差矩阵是 2×2 矩阵,整合了方差和协方差,用于后续找数据变化最大的方向:
Σ=[Var(x)Cov(x,y)Cov(x,y)Var(y)]\Sigma = \begin{bmatrix} Var(x) & Cov(x,y) \\ Cov(x,y) & Var(y) \end{bmatrix}Σ=[Var(x)Cov(x,y)Cov(x,y)Var(y)]
四、步骤 1:数据中心化(必须做)
中心化的目的:让数据中心移到原点 (0,0)(0,0)(0,0),消除数据的整体偏移,只关注数据之间的相对变化(不影响数据的波动规律)。
计算公式(每个样本减去对应变量的均值):
xi′=xi−xˉ,yi′=yi−yˉx'_i = x_i - \bar{x},\quad y'_i = y_i - \bar{y}xi′=xi−xˉ,yi′=yi−yˉ
代入本例计算(中心化后的数据用 A′、B′、C′A'、B'、C'A′、B′、C′ 表示):
-
A′=(1−2,2−83)=(−1,−23)≈(−1,−0.6667)A' = (1-2, 2-\frac{8}{3}) = (-1, -\frac{2}{3}) \approx (-1, -0.6667)A′=(1−2,2−38)=(−1,−32)≈(−1,−0.6667)
-
B′=(2−2,2−83)=(0,−23)≈(0,−0.6667)B' = (2-2, 2-\frac{8}{3}) = (0, -\frac{2}{3}) \approx (0, -0.6667)B′=(2−2,2−38)=(0,−32)≈(0,−0.6667)
-
C′=(3−2,4−83)=(1,43)≈(1,1.3333)C' = (3-2, 4-\frac{8}{3}) = (1, \frac{4}{3}) \approx (1, 1.3333)C′=(3−2,4−38)=(1,34)≈(1,1.3333)
五、步骤 2:手工计算协方差矩阵
用中心化后的数据,逐个计算 Var(x)、Var(y)、Cov(x,y)Var(x)、Var(y)、Cov(x,y)Var(x)、Var(y)、Cov(x,y),再构造协方差矩阵。
1. 计算 Var(x)Var(x)Var(x)(x的方差)
代入样本方差公式,n=3,中心化后x的取值:−1、0、1-1、0、1−1、0、1
Var(x)=(−1)2+02+123−1=1+0+12=22=1Var(x) = \frac{(-1)^2 + 0^2 + 1^2}{3-1} = \frac{1 + 0 + 1}{2} = \frac{2}{2} = 1Var(x)=3−1(−1)2+02+12=21+0+1=22=1
2. 计算 Var(y)Var(y)Var(y)(y的方差)
中心化后y的取值:−23、−23、43-\frac{2}{3}、-\frac{2}{3}、\frac{4}{3}−32、−32、34(≈-0.6667、-0.6667、1.3333)
Var(y)=(−23)2+(−23)2+(43)23−1=49+49+1692=2492=43≈1.3333Var(y) = \frac{(-\frac{2}{3})^2 + (-\frac{2}{3})^2 + (\frac{4}{3})^2}{3-1} = \frac{\frac{4}{9} + \frac{4}{9} + \frac{16}{9}}{2} = \frac{\frac{24}{9}}{2} = \frac{4}{3} \approx 1.3333Var(y)=3−1(−32)2+(−32)2+(34)2=294+94+916=2924=34≈1.3333
3. 计算 Cov(x,y)Cov(x,y)Cov(x,y)(x和y的协方差)
代入协方差公式,对应相乘后求和:
Cov(x,y)=(−1)(−23)+0×(−23)+1×433−1=23+0+432=22=1Cov(x,y) = \frac{(-1)(-\frac{2}{3}) + 0 \times (-\frac{2}{3}) + 1 \times \frac{4}{3}}{3-1} = \frac{\frac{2}{3} + 0 + \frac{4}{3}}{2} = \frac{2}{2} = 1Cov(x,y)=3−1(−1)(−32)+0×(−32)+1×34=232+0+34=22=1
4. 最终协方差矩阵
将计算出的方差、协方差代入矩阵公式:
Σ=[11143]≈[1111.3333]\Sigma = \begin{bmatrix} 1 & 1 \\ 1 & \dfrac{4}{3} \end{bmatrix} \approx \begin{bmatrix} 1 & 1 \\ 1 & 1.3333 \end{bmatrix}Σ=[11134]≈[1111.3333]
六、步骤 3:求特征值与特征向量(PCA 核心推导)
不用理解复杂定义,记住核心结论:
-
特征向量:数据变化最大的方向(就是我们要找的"主方向")
-
特征值:该方向上变化的大小(特征值越大,这个方向的信息越多)
我们只需要找到最大的特征值对应的特征向量,就是PCA要保留的主方向(PC1)。
1. 2×2 矩阵特征方程(直接套用,无需推导)
对任意 2×2 矩阵 A=[abcd]A = \begin{bmatrix}a & b \\ c & d\end{bmatrix}A=[acbd],特征方程为:
λ2−(a+d)λ+(ad−bc)=0\lambda^2 - (a+d)\lambda + (ad - bc) = 0λ2−(a+d)λ+(ad−bc)=0
其中 λ\lambdaλ(lambda)就是特征值,解这个一元二次方程,就能得到两个特征值。
2. 代入本例协方差矩阵计算
我们的协方差矩阵 Σ=[11143]\Sigma = \begin{bmatrix}1 & 1 \\ 1 & \frac{4}{3}\end{bmatrix}Σ=[11134],对应:
- a=1a = 1a=1,b=1b = 1b=1,c=1c = 1c=1,d=43d = \frac{4}{3}d=34
第一步:计算 a+da+da+d(矩阵的"迹"):
a+d=1+43=73≈2.3333a+d = 1 + \frac{4}{3} = \frac{7}{3} \approx 2.3333a+d=1+34=37≈2.3333
第二步:计算 ad−bcad - bcad−bc(矩阵的"行列式"):
ad−bc=1×43−1×1=43−1=13≈0.3333ad - bc = 1 \times \frac{4}{3} - 1 \times 1 = \frac{4}{3} - 1 = \frac{1}{3} \approx 0.3333ad−bc=1×34−1×1=34−1=31≈0.3333
第三步:代入特征方程,得到:
λ2−73λ+13=0\lambda^2 - \frac{7}{3}\lambda + \frac{1}{3} = 0λ2−37λ+31=0
为了方便计算,两边同乘 3,消去分母:
3λ2−7λ+1=03\lambda^2 - 7\lambda + 1 = 03λ2−7λ+1=0
3. 用一元二次方程求根公式解特征值
一元二次方程通用形式:Aλ2+Bλ+C=0A\lambda^2 + B\lambda + C = 0Aλ2+Bλ+C=0,求根公式为:
λ=−B±B2−4AC2A\lambda = \frac{-B \pm \sqrt{B^2 - 4AC}}{2A}λ=2A−B±B2−4AC
代入本例方程 3λ2−7λ+1=03\lambda^2 -7\lambda +1 = 03λ2−7λ+1=0,其中:
- A=3A = 3A=3,B=−7B = -7B=−7,C=1C = 1C=1
计算过程:
λ=−(−7)±(−7)2−4×3×12×3=7±49−126=7±376\lambda = \frac{-(-7) \pm \sqrt{(-7)^2 - 4 \times 3 \times 1}}{2 \times 3} = \frac{7 \pm \sqrt{49 - 12}}{6} = \frac{7 \pm \sqrt{37}}{6}λ=2×3−(−7)±(−7)2−4×3×1 =67±49−12 =67±37
已知 37≈6.082\sqrt{37} \approx 6.08237 ≈6.082,代入计算两个特征值:
-
第一个特征值(最大,主成分 PC1):λ1=7+6.0826≈13.0826≈2.18\lambda_1 = \frac{7 + 6.082}{6} \approx \frac{13.082}{6} \approx 2.18λ1=67+6.082≈613.082≈2.18
-
第二个特征值(最小,次要成分 PC2):λ2=7−6.0826≈0.9186≈0.15\lambda_2 = \frac{7 - 6.082}{6} \approx \frac{0.918}{6} \approx 0.15λ2=67−6.082≈60.918≈0.15
核心:我们只保留 λ1\lambda_1λ1 对应的特征向量(主方向),用于后续投影降维。
4. 求主方向特征向量(PC1 方向)
特征向量 v=[xy]\mathbf{v} = \begin{bmatrix}x \\ y\end{bmatrix}v=[xy] 满足方程:(Σ−λ1I)[xy]=0(\Sigma - \lambda_1 I)\begin{bmatrix}x \\ y\end{bmatrix} = 0(Σ−λ1I)[xy]=0
其中 III 是单位矩阵 [1001]\begin{bmatrix}1 & 0 \\ 0 & 1\end{bmatrix}[1001],代入 λ1≈2.18\lambda_1 \approx 2.18λ1≈2.18,计算:
Σ−λ1I=[1−2.181143−2.18]≈[−1.1811−0.847]\Sigma - \lambda_1 I = \begin{bmatrix}1 - 2.18 & 1 \\ 1 & \frac{4}{3} - 2.18\end{bmatrix} \approx \begin{bmatrix}-1.18 & 1 \\ 1 & -0.847\end{bmatrix}Σ−λ1I=[1−2.181134−2.18]≈[−1.1811−0.847]
代入方程后,得到方程组:
-
−1.18x+y=0-1.18x + y = 0−1.18x+y=0
-
x−0.847y=0x - 0.847y = 0x−0.847y=0
由第一个方程可得:y≈1.18xy \approx 1.18xy≈1.18x
我们取 x=1x = 1x=1,则 y≈1.18y \approx 1.18y≈1.18,因此主方向特征向量为:
v1=[11.18]\mathbf{v}_1 = \begin{bmatrix} 1 \\ 1.18 \end{bmatrix}v1=[11.18]
七、步骤 4:投影降维(手工详细计算)
我们将中心化后的 3 个点 ,投影到第一主成分方向 v1\mathbf{v}_1v1 上,把 2D 数据转化为 1D 数据,这就是 PCA 降维的最终步骤。
1. 回顾已知量
-
主方向特征向量(PC1):v1=[11.18]\mathbf{v}_1 = \begin{bmatrix} 1 \\ 1.18 \end{bmatrix}v1=[11.18]
-
中心化后的三个点:
-
A′=[−1−23]≈[−1−0.6667]A' = \begin{bmatrix} -1 \\ -\dfrac{2}{3} \end{bmatrix} \approx \begin{bmatrix} -1 \\ -0.6667 \end{bmatrix}A′=[−1−32]≈[−1−0.6667]
-
B′=[0−23]≈[0−0.6667]B' = \begin{bmatrix} 0 \\ -\dfrac{2}{3} \end{bmatrix} \approx \begin{bmatrix} 0 \\ -0.6667 \end{bmatrix}B′=[0−32]≈[0−0.6667]
-
C′=[143]≈[11.3333]C' = \begin{bmatrix} 1 \\ \dfrac{4}{3} \end{bmatrix} \approx \begin{bmatrix} 1 \\ 1.3333 \end{bmatrix}C′=[134]≈[11.3333]
-
2. 投影公式(标量投影,Obsidian适配)
向量 x\mathbf{x}x 在方向 v\mathbf{v}v 上的标量投影(即降维后的 1D 数值),公式为:
projv(x)=x⋅v∥v∥\text{proj}_{\mathbf{v}}(\mathbf{x}) = \frac{\mathbf{x} \cdot \mathbf{v}}{\|\mathbf{v}\|}projv(x)=∥v∥x⋅v
拆解为 3 步计算:
-
计算点积 x⋅v1\mathbf{x} \cdot \mathbf{v}_1x⋅v1(两个向量对应元素相乘,再求和);
-
计算向量长度 ∥v1∥\|\mathbf{v}_1\|∥v1∥(向量各元素平方和的平方根);
-
用点积除以向量长度,得到投影值(降维后的数值)。
3. 先计算 ∥v1∥\|\mathbf{v}_1\|∥v1∥(主方向向量的长度)
代入 v1=[11.18]\mathbf{v}_1 = \begin{bmatrix}1 \\ 1.18\end{bmatrix}v1=[11.18]:
∥v1∥=12+1.182=1+1.3924=2.3924≈1.5467\|\mathbf{v}_1\| = \sqrt{1^2 + 1.18^2} = \sqrt{1 + 1.3924} = \sqrt{2.3924} \approx 1.5467∥v1∥=12+1.182 =1+1.3924 =2.3924 ≈1.5467
4. 逐个点手工投影计算(核心步骤)
(1)投影 A′A'A′(中心化后的A点)
第一步:计算点积 A′⋅v1A' \cdot \mathbf{v}_1A′⋅v1
A′⋅v1=(−1)×1+(−0.6667)×1.18≈−1−0.7867=−1.7867A' \cdot \mathbf{v}_1 = (-1) \times 1 + (-0.6667) \times 1.18 \approx -1 - 0.7867 = -1.7867A′⋅v1=(−1)×1+(−0.6667)×1.18≈−1−0.7867=−1.7867
第二步:计算投影值
proj(A′)=−1.78671.5467≈−1.155\text{proj}(A') = \frac{-1.7867}{1.5467} \approx -1.155proj(A′)=1.5467−1.7867≈−1.155
(2)投影 B′B'B′(中心化后的B点)
第一步:计算点积 B′⋅v1B' \cdot \mathbf{v}_1B′⋅v1
B′⋅v1=0×1+(−0.6667)×1.18≈−0.7867B' \cdot \mathbf{v}_1 = 0 \times 1 + (-0.6667) \times 1.18 \approx -0.7867B′⋅v1=0×1+(−0.6667)×1.18≈−0.7867
第二步:计算投影值
proj(B′)=−0.78671.5467≈−0.509\text{proj}(B') = \frac{-0.7867}{1.5467} \approx -0.509proj(B′)=1.5467−0.7867≈−0.509
(3)投影 C′C'C′(中心化后的C点)
第一步:计算点积 C′⋅v1C' \cdot \mathbf{v}_1C′⋅v1
C′⋅v1=1×1+1.3333×1.18≈1+1.5733=2.5733C' \cdot \mathbf{v}_1 = 1 \times 1 + 1.3333 \times 1.18 \approx 1 + 1.5733 = 2.5733C′⋅v1=1×1+1.3333×1.18≈1+1.5733=2.5733
第二步:计算投影值
proj(C′)=2.57331.5467≈1.664\text{proj}(C') = \frac{2.5733}{1.5467} \approx 1.664proj(C′)=1.54672.5733≈1.664
5. 最终降维结果(1D 数据)
将原始 2D 点,通过 PCA 降维到 1D 后的数值的:
-
原始点 A(1,2)A(1,2)A(1,2) → 降维后:−1.155\boldsymbol{-1.155}−1.155
-
原始点 B(2,2)B(2,2)B(2,2) → 降维后:−0.509\boldsymbol{-0.509}−0.509
-
原始点 C(3,4)C(3,4)C(3,4) → 降维后:1.664\boldsymbol{1.664}1.664
6. 投影结果含义
-
投影后的数值,代表原始点在"主方向 v1\mathbf{v}_1v1"上的位置;
-
数值越大,说明点在主方向上越靠前;数值越小,越靠后;
-
这组 1D 数据,尽可能保留了原始 2D 点之间的相对距离和分布规律(信息损失最少);
-
至此,PCA 从 2D 降到 1D 完成。
八、PCA 完整流程总结(Obsidian 简洁版)
-
数据中心化:每个样本减去对应变量的均值,移到原点,消除整体偏移;
-
计算协方差矩阵:整合方差和协方差,反映数据的波动和变量关联;
-
求特征值与特征向量:特征值决定方向的信息多少,特征向量是数据变化最大的方向;
-
按特征值排序:保留前 k 个最大特征值对应的特征向量(k 是降维后的维度);
-
投影降维:将中心化后的样本,投影到保留的特征向量方向上,得到低维数据。
九、直观理解(小白必看)
把我们的 3 个 2D 点,想象成一个被拉长的椭圆(或气球):
-
椭圆的最长轴 → 第一主成分 PC1(特征值最大,信息最多);
-
椭圆的最短轴 → 第二主成分 PC2(特征值最小,信息最少);
-
PCA 降维,就是沿着最长轴把椭圆压扁,保留椭圆的"长度"(核心信息),丢掉"宽度"(无关信息),实现从 2D 到 1D 的转换。