如何手动计算10个三维向量数组的两个主成分向量?
手动求解三维向量PCA主成分的完整步骤
没问题!我来一步步教你手动计算这10个三维向量的前两个主成分,全程都是基础线性代数运算,不用依赖任何库,跟着走就行:
1. 数据准备与去中心化
首先把你的10个三维向量整理成矩阵:建议按行代表特征(x/y/z),列代表单个样本来排列(比如10个样本就是3行10列的矩阵$X$)。
接下来必须做去中心化操作(这是PCA的关键前提):
- 分别计算x、y、z三个特征的平均值:$\bar{x} = \frac{1}{10}\sum_{i=1}^{10}x_i$,$\bar{y}$、$\bar{z}$同理
- 用每个样本的特征值减去对应平均值,得到去中心化后的矩阵$X_{centered}$:
X_centered[p][i] = X[p][i] - mean(p)
这里p对应x/y/z的行索引,i是第i个样本的列索引。
2. 计算协方差矩阵
基于去中心化后的矩阵,计算3×3的协方差矩阵$C$:
协方差矩阵的元素$C_{pq}$表示第p个特征和第q个特征的协方差,计算公式为:C[p][q] = (1/(10-1)) * sum(X_centered[p][i] * X_centered[q][i] for i in 0..9)
- 除以9是无偏估计,如果你图省事除以10也可以,只是结果会缩放一点,完全不影响主成分的方向
- 对角线元素$C_{pp}$就是对应特征的方差
3. 求解特征值与特征向量
这是PCA的核心步骤,需要解协方差矩阵的特征问题:
- 先解特征方程:$\det(C - \lambda I) = 0$,其中$I$是3×3单位矩阵,解出来的$\lambda$就是特征值
- 三次方程的解法可以用因式分解或者求根公式,最终会得到3个特征值,按从大到小排序为$\lambda_1 \geq \lambda_2 \geq \lambda_3$
- 对每个特征值$\lambda_k$,解线性方程组:$(C - \lambda_k I)\vec{v} = 0$,得到对应的特征向量$\vec{v}_k$
- 把每个特征向量单位化:将向量的每个元素除以它的L2范数(也就是向量的长度),确保向量模长为1
4. 提取主成分
把特征值从大到小排序后,对应的特征向量就是主成分:
- 最大的特征值$\lambda_1$对应的单位特征向量$\vec{v}_1$,就是第一主成分
- 第二大的特征值$\lambda_2$对应的单位特征向量$\vec{v}_2$,就是第二主成分
小验证技巧
算完后可以简单检查:
- 任意两个主成分向量的点积为0(正交性)
- 三个特征值的和等于协方差矩阵对角线元素的和(迹)
如果满足这两点,基本说明你算对了!
内容的提问来源于stack exchange,提问作者mustaphos
相关产品推荐
相关产品推荐

