想法:转到方差最大的那些轴上
想象一团数据点的云。它在某些方向上比别的方向更宽。主成分分析先找出散布最大的方向(第一主成分),再找与之垂直的次大方向,如此继续。它无非就是选一套更好的坐标轴——一个与数据形状对齐的旋转。
从计算上看,PCA 就是把数据中心化(减去每个特征的均值)之后做SVD。主成分就是最靠前的右奇异向量;奇异值告诉你每个主成分捕获了多少方差。
- 中心化数据:减去每个特征的均值,让点云落在原点。
- 对中心化后的数据矩阵做 SVD,A = U*S*V^T。
- V 的各列就是主成分;sigma_i^2 是沿各主成分的方差。
- 把数据投影到前 k 个主成分上,将其降到 k 维。
压缩与可视化
只保留前几个主成分,就是把数据投影到对方差最要紧的那些方向上。一个一千维特征的数据集,常常只用少数几个主成分就抓住了形状,于是你能把它画成二维图,或喂给一个更小更快的模型。这与低秩逼近是同一招:扔掉小奇异值,留下大的。
variance kept = (sigma_1^2 + ... + sigma_k^2) / (sigma_1^2 + ... + sigma_r^2) # pick the smallest k that keeps, say, 95% of the variance