1.5.数据降维:PCA

    主成分分析(Principal Component Analysis,PCA)来实现降维,PCA降维不会出现在数据预处理,而是基于模型的一种降维技术,从这里考虑数据、特征、模型之间的界限会变得模糊。

1. 直观理解

    数据降维就是在保留重要信息的同时消除哪些“无信息量的信息”,无信息量有多重定义,而PCA关注的是线性相关性。我们将数据矩阵的列空间描述为所有特征向量的生成空间,如果列空间的秩小于特征总数,那么多数特征就是几个关键特征的线性组合;由于线性相关特征会浪费算力,为了避免这种开销,PCA试图将数据积压到一个维度大大小于原空间的线性子空间。

    参考下边图示:

    左图中特征线性不相关,而右图中特征可能线性相关——一般彼此完全相同的特征是很罕见的,更可能的情况是非常接近于相同但又不完全相同的特征。

    PCA的核心思想就是:使用一些新特征代替冗余特征,这些新特征能恰当地总结初始特征空间中包含的信息。如果只有两个特征,很容易找出新特征,如果有成千上万的维度时,就非常困难了,所以需要一种数学方法找出新特征并且优化。其数学定义是:新的数据点团应该尽量多地保持原数据集中的信息。

2. 数学推导

    使用XX表示n×dn \times d的矩阵:

  1. 其中nn是数据点的数量

  2. dd是特征的数量

  3. xx表示单个数据点的列向量(所以xxXX中一行的转置)

  4. vv是表示新特征的向量(即要找的主成分)

    奇异值分解:任意长方形矩阵都可以分解成3个具有特殊形状和性质的矩阵:

X=UΣVTX = U\Sigma V^T

    上述表达式中:

  1. UUVV是正交矩阵(UTU=IVTV=IU^TU = I,V^TV=I

  2. Σ\Sigma是一个包含XX的奇异值的对角阵,奇异值可以是正、负、零

  3. 假设XXnndd列,且ndn \ge d

    1. UU的形状是:n×dn \times d

    2. Σ,V\Sigma,V的形状是:d×dd \times d

2.1. 线性投影

  • a)特征空间中的初始数据

  • b)数据中心化

  • c)将数据向量XX投影到另一个向量vv

  • d)投影坐标方差最大的方向(等价于XTXX^TX的主特征向量)

公式1:投影坐标

z=xTvz = x^Tv

    当xx投影到vv上,投影的长度是这两个向量内积的一个比例,即通过vv的范数进行了归一化,然后限制vv具有单位范数。

公式2:投影坐标向量

z=Xvz = Xv

    尽管xxvv是列向量,但zz是个标量,因为有很多数据点,所以可构造一个向量zz,表示所有数据点在新特征vv上的投影,此处XX就是数据矩阵。

2.2. 方差和经验方差

    下一步是计算投影的方差,方差是与均值之间的距离的平方期望值。

公式3:随机变量ZZ的方差

Var(Z)=E[ZE(Z)]2Var(Z)=E[Z - E(Z)]^2

    前边讨论中从来没涉及过均值E(Z)E(Z),它是自由变量。所以此问题会从数据点中减去均值,从而将其从公式中除掉——这样结果集均值是0,方差就是Z2Z^2的期望值;从数学几何角度上考虑,减掉均值就是将数据中心化。一个和方差非常紧密的量是两个随机变量Z1Z_1Z2Z_2之间的协方差,可将其视为方差(单随机变量)概念在两个随机变量上的推广。

公式4:两个随机变量Z1Z_1Z2Z_2的协方差

Cov(Z1,Z2)=E[(Z1E(Z1))(Z2E(Z2))]Cov(Z_1,Z_2) = E[(Z_1 - E(Z_1))(Z_2 - E(Z_2))]

    若随机变量均值为0时,它们协方差与线性相关度E(Z1Z2)E(Z_1Z_2)一致。

    实际上,我们不可能有真正的数据分布,只有一系列观测到的数据点,z1,...,znz_1,...,z_n,这称为经验分布,它可以给出方差的经验估计。

公式5:ZZ的经验方差,基于观测zz计算

Varemp(Z)=1n1i=1nzi2Var_{emp}(Z) = \frac{1}{n - 1}\sum\limits_{i=1}^n z_i^2

2.3. 主成分:第一种表示

    结合公式1的定义,可以得到公式6中投影数据方差最大化的数学表示。

公式6:主成分目标函数

maxwi=1n(xiTw)2,wTw=1\max_w\sum\limits_{i=1}^n(x_i^Tw)^2, w^Tw=1

    此处限制条件是ww的内积为1,等价于它必须具有单位长度。我们只关心ww的方向,不关心大小,它的大小是一个不必要的自由度,所以可以设置成任意值。

2.4. 主城分:矩阵-向量表示

    公式6看起来太笨重,所以使用矩阵-向量形式会简洁许多。它的原理是平方和恒等式:多个项的平方和等于由这些项组成的向量的范数的平方,即这个向量和它自己的内积。

公式7:主成分目标函数(矩阵-向量)

maxwwTw,wTw=1\max_ww^Tw, w^Tw=1

    这种表示更加呈现了目标:找到一个能使输出向量的范数最大化的输入方向,实际就是矩阵XX奇异值分解(SVD),最终:

  • 最优的ww就是XX的主要左奇异向量,也就是XTXX^TX的主特征向量。

  • 投影数据就是原始数据的主成分。

2.5. 主成分通用解

    这个过程是可重复的,找到了第一个主成分,就可以重新执行公式7

公式8:第k+1个主成分的目标函数

maxwwTw,其中wTw=1wTw1=....=wTwk=0\max_ww^Tw,其中w^Tw = 1 且 w^Tw_1 = .... = w^Tw_k = 0

  • 解是XX的第k+1k+1个左奇异向量,按奇异值降序排列。

  • kk个主成分对应于XX的前kk个左奇异向量。

2.6. 特征转换

    找到主成分之后,就可以使用线性投影对特征进行转换。

  • X=UΣVTX = U\Sigma V^TXX的奇异值分解

  • VkV_k是列中包含前k个左奇异向量的矩阵

  • XX的维度是n×dn \times d

  • dd是初始特征的数量

  • VkV_k的维度是d×kd \times k

公式9:PCA投影矩阵

W=VkW = V_k

    投影坐标矩阵很容易计算,可以通过奇异向量彼此正交的性质进一步简化

公式10:简单PCA转换

Z=XW=XVk=UΣVTVk=UkΣkZ = XW = XV_k = U\Sigma V^TV_k = U_k\Sigma_k

    所以投影值就是前kk个右奇异向量乘以前kk个奇异值。

2.7. PCA实现

    PCA实现步骤:

  1. 数据矩阵中心化:C=XIμTC = X - I\mu^T,其中I是一个全1列向量,μ\mu是由XX中每行的平均值组成的列向量。

  2. 计算SVDSVDC=UΣVTC = U\Sigma V^T

  3. 找出主成分,前kk个主成分是VV的前kk列,也就是对应于kk个最大奇异值的右奇异向量。

  4. 转换数据,转换后的数据就是UU的前kk列。

3. PCA实战(略)

4. 白化与ZCA

    由于目标函数正交限制,PCA转换有一个很好的副作用:转换后的特征都是不相关的——每个特征向量之间的内积都是0。这点可使用奇异向量的正交性质证明:

ZTZ=ΣkUkTUkΣk=Σk2Z^TZ = \Sigma_kU_k^TU_k\Sigma_k = \Sigma_k^2

    这个结果是个对角阵,对角线上是奇异值的平方,表示每个特征向量与自己的相关度,也称为l2l^2范数。如果通过归一化把特征长度变成1,这种操作在信号领域称为白化。这种操作可得到一组特征,彼此相关度为0,与自身相关度为1。

公式11:PCA + 白化

Wwhite=VkΣk1W_{white} = V_k\Sigma_k^{-1}

Zwhite=XVkΣk1=UΣVTVkΣk1=UkZ_{white} = XV_k\Sigma_k^{-1} = U\Sigma V^TV_k\Sigma_k^{-1} = U_k

    白化和数据降维相互独立,可分别进行,零相位成分分析(Zero-Phase Component Analysis, ZCA)是一种和PCA联系非常金币的白化转换,它不会减少特征数量。

公式12:ZCA

WZCA=VΣ1VTW_{ZCA} = V\Sigma^{-1}V^T

ZZCA=XVΣ1VT=UΣVTVΣ1=UZ_{ZCA} = XV\Sigma^{-1}V^T = U\Sigma V^TV\Sigma^{-1} = U

    简单的PCA投影可以在新的特征空间中以主成分为基生成坐标。这些坐标只表示投影向量的长度而不表示方向。乘以主成分之后,才能得到长度和方向;另一个合理解释是,这次相乘可以将坐标转换回初始特征控件。

5. PCA局限性

    使用PCA进行数据降维时,必须确定要使用的主成分的数目(kk)。选择kk

  • 一种方法是要求主成分解释一定比例的总方差,投影的方差公式如:

    Xvk2=ukσk2=σk2||Xv_k||^2 = ||u_k\sigma_k||^2 = \sigma_k^2 这个方差就是XXkk大奇异值的平方,奇异值的排序列表称为矩阵的(spectrum),所以对矩阵进行谱分析,就可以选定解释足够方差的阈值。

  • 另一种方法涉及数据集的本征维数。如果中包含一些非常大的奇异值和一些非常小的奇异值,我们就可以只保留哪些非常大的奇异值,而舍弃其余奇异值。

    PCA缺点:

  • PCA的主要诟病是转换过程太复杂,得到的结果也难解释。

  • PCA的计算成本也很昂贵,它依赖SVD,SVD是一个对计算能力要求很高的过程。

  • 在流式数据、批量更新或完整的数据抽样中,很难执行PCA操作。

  • 最好不要对原始计数执行PCA。

    PCA应用场景:

  • 在时间序列中进行异常检测。

  • PCA可以用于金融建模中,作为一种因子分析。

  • 在图像学习中,可以在预处理阶段使用PCA。

  • 很多深度模型中使用PCA或ZCA作为预处理的第一步骤。

6. 补充

参考:PCA简化数据arrow-up-right

最后更新于