如何理解协方差矩阵?PCA降维是怎么使用到协方差矩阵的?

1.统计学的基本概念

统计学里最基本的概念就是样本的均值、方差、标准差。首先给定一个含有n个样本的集合,下面给出这些概念的公式描述:

  • 均值: x ‾ = ∑ i = 1 n x i n \overline{x}=\frac{\sum_{i=1}^nx_i}{n} x=ni=1nxi
  • 标准差: s = ∑ i = 1 n ( x i − x ‾ ) 2 n − 1 s = \sqrt{\frac{\sum_{i=1}^n(x_i-\overline{x})^2}{n-1}} s=n1i=1n(xix)2
  • 方差: s 2 = ∑ i = 1 n ( x i − x ‾ ) 2 n − 1 s^2=\frac{\sum_{i=1}^n(x_i-\overline{x})^2}{n-1} s2=n1i=1n(xix)2

均值描述的是样本集合的中间点,它告诉我们的信息是有限的,而标准差给我们描述的是样本集合的各个样本点到均值的距离之平均。

2.为什么需要协方差

标准差和方差一般是用来描述一维数据的,但现实生活中常常会遇到含有多维数据的数据集,最简单的是上学时需要统计多个学科的考试成绩。面对这样的数据集,当然可以按照每一维独立的计算其方差,但是通常我们还想了解更多。比如,一个男孩子的猥琐程度和他受到女孩子的欢迎程度是否存在一些联系。协方差就是这样一种用来衡量两个随机变量之间关系的统计量,我们可以仿照方差的定义 V a r ( x ) = ∑ i = 1 n ( x i − x ‾ ) ( x i − x ‾ ) n − 1 Var(x)=\frac{\sum_{i=1}^n(x_i-\overline{x})(x_i-\overline{x})}{n-1} Var(x)=n1i=1n(xix)(xix)来度量各个维度偏离其均值的程度,协方差可以这样来定义: c o v ( x , y ) = ∑ i = 1 n ( x i − x ‾ ) ( y i − y ‾ ) n − 1 cov(x,y)=\frac{\sum_{i=1}^n(x_i-\overline{x})(y_i-\overline{y})}{n-1} cov(x,y)=n1i=1n(xix)(yiy)协方差的结果有什么意义呢?如果结果为正值,则说明两则是正相关的(从协方差可以引出“相关系数的定义”),也就是说一个人越猥琐越受女孩欢迎。如果结果为负值,则说明两者是负相关,越猥琐女孩子越讨厌。如果为0,则两者之间没有关系,猥琐不猥琐和女孩子喜不喜欢之间没有关联,就是统计上说的“相互独立”。

从协方差的定义上我们可以看出一些显而易见的性质,如: c o v ( x , x ) = v a r ( x ) cov(x,x)=var(x) cov(x,x)=var(x) c o v ( x , y ) = c o v ( y , x ) cov(x,y)=cov(y,x) cov(x,y)=cov(y,x)

3.协方差矩阵

前面提到的猥琐和受欢迎的问题是典型的二维问题,而协方差也只能处理二维问题,那维数多了自然就需要计算多个协方差,比如n维的数据集就需要计算 n ! ( n − 1 ) ! ∗ 2 \frac{n!}{(n-1)!*2} (n1)!2n!个协方差,那自然而然我们就会想到使用矩阵来组织这些数据。给出协方差矩阵的定义: C n ∗ n = ( c i , j , c i , j = c o v ( D i m i , D i m j ) ) C_{n*n}=(c_{i,j},c_{i,j}=cov(Dim_i,Dim_j)) Cnn=(ci,j,ci,j=cov(Dimi,Dimj))这个定义还是很容易理解的,可以举一个三维的例子,假设数据集有三个维度,则协方差矩阵为: C = ( c o v ( x , x ) c o v ( x , y ) c o v ( x , z ) c o v ( y , x ) c o v ( y , y ) c o v ( y , z ) c o v ( z , x ) c o v ( z , y ) c o v ( z , z ) ) C=\begin{pmatrix} cov(x,x)& cov(x,y) &cov(x,z) \\ cov(y,x)&cov(y,y) &cov(y,z) \\ cov(z,x)&cov(z,y) &cov(z,z) \end{pmatrix} C=cov(x,x)cov(y,x)cov(z,x)cov(x,y)cov(y,y)cov(z,y)cov(x,z)cov(y,z)cov(z,z)可见,协方差矩阵是一个对称的矩阵,而且对角线是各个维度的方差。

4.PCA

在机器学习领域中,对原始数据进行特征提取,有时会得到比较高维的特征向量。在这些向量所处的高维空间中,包含很多的冗余和噪声。我们希望通过降维的方式来寻找数据内部的特性,从而提升特征表达能力,降低训练复杂度。

主成分分析(PCA)作为降维中最经典的方法,是一种线性、非监督、全局的降维算法。

PCA旨在找到数据中的主成分,并利用这些主成分表征原始数据,从而达到降维的目的。PCA的目标是最大化投影方差,也就是让数据在主轴上投影的方差最大。

对于给定的一组数据点 { v 1 , v 2 , . . . , v n } \left \{v_1,v_2,...,v_n \right \} {v1,v2,...,vn},其中所有向量均为列向量,中心化后的表示为 { x 1 , x 2 , . . . , x n } = { v 1 − μ , v 2 − μ , . . . , v n − μ } \left \{x_1,x_2,...,x_n \right \}=\left \{v_1-\mu,v_2-\mu,...,v_n-\mu \right \} {x1,x2,...,xn}={v1μ,v2μ,...,vnμ},其中 μ = 1 n ∑ i = 1 n v i \mu=\frac{1}{n}\sum_{i=1}^nv_i μ=n1i=1nvi。我们知道,向量内积在几何上表示为一个向量投影到第二个向量上的长度,因此向量 x i x_i xi w w w(单位方向向量)上的投影坐标可以表示为 ( x i , w ) = x i T w (x_i,w)=x_i^Tw (xi,w)=xiTw。所以目标是找到一个投影方向 w w w,使得 x 1 . x 2 , . . . , x n x_1.x_2,...,x_n x1.x2,...,xn w w w上的投影方差尽可能大。易知,投影之后均值为0,因为 D ( x ) = 1 n ∑ i = 1 n x i T w = ( 1 n ∑ i = 1 n x i T ) w = 0 D(x)=\frac{1}{n}\sum_{i=1}^nx_i^Tw=(\frac{1}{n}\sum_{i=1}^nx_i^T)w=0 D(x)=n1i=1nxiTw=(n1i=1nxiT)w=0这也是我们进行中心化的意义。因此投影后的方差可以表示为 D ( x ) = 1 n ∑ i = 1 n ( x i T w ) 2 = 1 n ∑ i = 1 n ( x i T w ) T ( x i T w ) D(x)=\frac{1}{n}\sum_{i=1}^n(x_i^Tw)^2=\frac{1}{n}\sum_{i=1}^n(x_i^Tw)^T(x_i^Tw) D(x)=n1i=1n(xiTw)2=n1i=1n(xiTw)T(xiTw) = 1 n ∑ i = 1 n w T x i x i T w =\frac{1}{n}\sum_{i=1}^nw^Tx_ix_i^Tw =n1i=1nwTxixiTw = w T ( 1 n ∑ i = 1 n x i x i T ) w =w^T(\frac{1}{n}\sum_{i=1}^nx_ix_i^T)w =wT(n1i=1nxixiT)w仔细一看,公式中的 ( 1 n ∑ i = 1 n x i x i T ) (\frac{1}{n}\sum_{i=1}^nx_ix_i^T) (n1i=1nxixiT)其实就是样本协方差矩阵,注意这个矩阵的维度为 n ∗ n n*n nn,我们将其写为 ∑ \sum 。另外,由于 w w w是单位方向向量,即有 w T w = 1 w^Tw=1 wTw=1。因此我们要求解一个最大化问题,可表示为: { m a x { w T ∑ w } s . t . w T w = 1 \left\{\begin{matrix} max\left \{ w^T\sum w\right \}\\ s.t. w^Tw=1 \end{matrix}\right. {max{wTw}s.t.wTw=1引入拉格朗日乘子,并对 w w w求导令其等于零,便可推出 ∑ w = λ w \sum w=\lambda w w=λw,此时 D ( x ) = w T ∑ w = λ w T w = λ D(x)=w^T\sum w=\lambda w^Tw=\lambda D(x)=wTw=λwTw=λ从推导过程可以发现,x投影后的方差就是协方差矩阵的特征值。我们要找到最大的方差也就是协方差矩阵最大的特征值,最佳投影方向就是最大特征值所对应的特征向量。次佳投影方向位于最佳投影方向的正交空间中,是第二大特征值对应的特征向量,以此类推。至此,我们得到了以下几种PCA的求解方法。

  1. 对样本数据进行中心化处理;
  2. 求样本协方差矩阵;
  3. 对协方差矩阵进行特征值分解,将特征值从大到小排列;
  4. 取特征值前 d d d大对应的特征向量 w 1 , w 2 , . . . , w d w_1,w_2,...,w_d w1,w2,...,wd,通过以下映射将n维样本映射到d维 x i ′ = [ w 1 T x i w 2 T x i ⋮ w d T x i ] x_i'=\begin{bmatrix} w_1^Tx_i\\ w_2^Tx_i\\ \vdots \\ w_d^Tx_i \end{bmatrix} xi=w1Txiw2TxiwdTxi新的 x i ′ x_i' xi的第d维就是 x i x_i xi在第d个主成分 w d w_d wd方向上的投影,通过选取最大的d个特征值对应的特征向量,我们将方差较小的特征(噪声)抛弃,使得每个 n n n维列向量 x i x_i xi被映射为d维列向量 x i ′ x_i' xi,定义降维后的信息占比为 η = ∑ i = 1 d λ i 2 ∑ i = 1 n λ i 2 \eta=\sqrt{\frac{\sum_{i=1}^d\lambda_i^2}{\sum_{i=1}^n \lambda_i^2}} η=i=1nλi2i=1dλi2

从上面的推导过程可以看到,主成分分析的设计出发点是使降维后的数据保留尽可能多的信息。其实可以从另一个角度来理解降维这个问题:如何使降维过程中的信息损失达到最小。对于第i点,假设降维直线的单位向量为W,则降维后的数据为 X i ~ = ( X i W T ) W \tilde{X_i}=(X_iW^T)W Xi~=(XiWT)W,那么损失的信息为 L i = X i − X i ~ L_i=X_i-\tilde{X_i} Li=XiXi~。从直观上来讲,原始数据到降维直线的距离就为损失的信息量。根据最小损失信息的原则,最佳降维向量的估算公式如下所示: U ~ = a r g m i n ∣ ∣ U ∣ ∣ = 1 ∑ i = 1 n ∣ ∣ L i ∣ ∣ 2 \tilde{U}=argmin_{||U||=1}\sum_{i=1}^n||L_i||^2 U~=argminU=1i=1nLi2根据勾股定理有: ∣ ∣ X i ∣ ∣ 2 = ∣ ∣ X i − ( X i U T ) U ∣ ∣ 2 + ∣ ∣ ( X i U T ) U ∣ ∣ 2 ||X_i||^2=||X_i-(X_iU^T)U||^2+||(X_iU^T)U||^2 Xi2=Xi(XiUT)U2+(XiUT)U2数学上可以证明最小损失函数和最大投影方差这两个最优化问题是等价的,因此主成分分析在降维过程中同时达到了两个目的,一是尽可能地保留数据间的差异,二是尽可能地减少信息的损失。

至此,我们从最大化投影方差的角度解释了PCA的原理、目标函数和求解方法。其实,PCA还可以用其它思路进行分析,比如从最小回归误差的角度得到新的目标函数。但最终我们会发现其对应的原理和求解方法和这里是等价的。

另外,由于PCA是一种线性降维方法,虽然经典,但具有一定的局限性。我们可以通过核映射对PCA进行扩展得到核主成分分析(KPCA),也可以通过流形映射的降维方法,比如等距映射、局部线性嵌入、拉普拉斯特征映射等,对于一些PCA效果不好的复杂数据集进行非线性降维操作。、

5、模型实现

主成分分析的代码实现也比较简单,程序如下所示。
(1)scikit-learn使用PCA类来实现主成分分析,如代码中第一行所示。
(2)在PCA类中,参数“n_components”表示降维后的维度,如代码中第七行所示,代码中表示将数据降到二维。
(3)从上面的推导过程可以知道,主成分分析要求数据的中心是原点,对于中心不是原点的数据,需要先做数据平移(减去数据的中心点),再进行降维。scikit-learn已经在PCA类的实现中考虑到这一点,因此对于任何数据,都可以直接调用它的fit函数训练模型,如第八行代码所示。

from sklearn.decomposition import PCA

def trainModel(data):
    """
    使用PCA对数据进行降维
    """
    model = PCA(n_components = 2)
    model.fit(data)
    return model

主成分分析可以把数据降到看、维,我们需要选择最合适数据的k值。具体地,首先需要定义评估降维效果的指标,由于主成分分析的目的是尽可能地保留数据的差异,因此降维后数据方差占原始数据方差的比例是一个很自然的评估指标。

数学上可以证明,数据降维后,它在每一维度的方差与相应的特征值成正比。因此只要将数据协方差矩阵的特征值从大到小排列,然后使用elbow method选择最佳的k值。

最后需要注意的是,在主成分分析中,k的取值不是任意的:它需要同时小于原始数据的维度m以及原始数据的个数n。这很容易理解,因为n个数据确定一个n维平面,如果三维空间的两个点降维到二维,可以得到无数个二维平面,没有意义。同样,易知降维要小于原始数据的维度是正常的。具体可以看一下这篇博客

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值