Skip to content

Stanford机器学习笔记——PCA

1. 维数约减

有时候样本的特征数有许多,其中会有一些冗余的特征。因此需要通过维数约减(Dimensionality Reduction)用更少的特征来表示样本。好处是:

  • 节省计算资源
  • 提高算法运行速度

例如将二维数据 x1,x2 用一维数据 u1 来表示:

将三维数据映射到二维:

2. PCA

PCA 即主成分分析(Principal Component Analysis),是维数约减常用的一种方法。

首先是对数据进行预处理:

  1. 使每个特征的平均值为0,即对于每个特征,计算 μj=1mi=1mxj(i),然后令 xj(i):=xj(i)μj
  2. 如果不同特征之间的数量级差别很大,还需要进行特征缩放,参考线性回归的特征标准化

然后要将 n 维数据约减为 k 维:

首先求协方差矩阵:

Σ=1mi=1m(x(i))(x(i))T=1mXTX

可以得知协方差矩阵 Σ 是一个 n×n 的对称矩阵。

接下来求该协方差矩阵的特征向量,使用 svd (Singular Value Decomposition,即奇异值分解):

U,S,V=svd(Σ)

得到的 U 是一个 n×n 的矩阵:

U=[|||u(1)u(2)...u(n)|||]Rn×n

选取 U 的前 k 列,记作:

Ureduce=[|||u(1)u(2)...u(k)|||]Rn×k

记维度约减后每个样本为 z(i),则:

z(i)=UreduceTx(i)

即:

Z=XUreduce

3. Reconstruction

通过上面的步骤将数据进行了压缩,同样,可以通过逆向流程来恢复数据。由于:

Z=XUreduce

因此:

Xapprox=ZUreduceT

之所以用 Xapprox,是因为恢复后的数据会有一定的误差。如下图所示,左边为原始数据,右边为恢复后的数据。

4. 选择主成分数量

约减后的维度数 k 又称为主成分数量。那么应该如何选择 k 呢?选择最小的 k,使得:

1mi=1mx(i)xapprox(i)21mi=1mx(i)20.01

这里选择0.01,可以保证99%的差异性得以保留。

但是如果从 k=1 开始,逐个尝试的话,效率会很低。考虑到之前求协方差矩阵的特征向量的时候:

U,S,V=svd(Σ)

此处 S 是一个对角矩阵:

S=[S11Snn]Rn×n

并且:

1mi=1mx(i)xapprox(i)21mi=1mx(i)2=1i=1kSiii=1nSii

因此找到最小的 k,使得:

i=1kSiii=1nSii0.99