有趣有用的PCA——PCA压缩图片

PCA是数据降维的经典方法,本文给出了一个将PCA用于图片压缩的例子,并探索了标准化处理(normalization)对PCA的影响。文末还讨论了PCA推导第一主成分的过程。

PCA (Principal component analysis,主成分分析) 是一个经典的数据降维方法,可以将高维数据映射到低维空间中,使得低维空间中点在新坐标轴(主成分)上的坐标间方差尽可能大。PCA被广泛应用于各行各业的数据分析,其中当然也包括生物数据的分析。

讲解PCA的文章数不胜数,本文旨在作为一个学习笔记,不对PCA的原理和应用作过多重复的介绍;而是先给出一个将PCA用于图片压缩的例子,从而能够直观地感受PCA的效果;然后结合这个例子对PCA的推导做一些讨论。

目录
  • PCA压缩灰度图片
  • PCA压缩RGB图片
  • PCA推导第一主成分
  • 小结
  • 附录:相关代码和参考来源

PCA压缩灰度图片

我们可以将图片看作是一个 n × p n \times p n×p (灰度空间)或者 n × p × 3 n \times p \times 3 n×p×3 (RGB空间)的数组。以灰度图片为例,可以利用PCA将 n × p n \times p n×p的矩阵降维成 n × l n \times l n×l l < p l < p l<p)的矩阵,从而达到图片压缩的效果。

我们选择经典图片Lenna作展示 [来源参考附录六],Lenna图片的大小是 512 × 512 512 \times 512 512×512。在这个例子中,我们首先将彩色的图片转化为灰度图片。
在这里插入图片描述
(灰度原图)

我们看看在降维之前先对数据进行标准化(normalization)处理的话,会有怎样的结果 [代码见附录二]。所谓标准化处理,做过PCA的朋友应该很熟悉,就是将矩阵的每一列的数据进行缩放,使得每一列的平均值是0,标准差是1。

这里的 k k k就是保留多少个主成分。
在这里插入图片描述
(灰度效果图一)

如果降维前不做标准化处理,结果是这样的 [代码见附录三]。
)
(灰度效果图二)

很明显地,无论做不做标准化处理,保留的主成分越多,重建的图片越清晰。对于作标准化处理的情形,当我们保留50个主成分的时候,重建的图片已经有一个比较高的清晰度了,此时降维后数据大概是原数据大小的20% [附录一]。同时,比较上面两幅效果图,我们可以看出:降维前进行标准化处理对PCA效果有明显的提升。

PCA压缩RGB图片

当然,我们也可以直接对彩色图片进行压缩(降维)。
在这里插入图片描述
(彩色原图)

同样地,如果降维前作标准化处理,结果是这样的 [代码见附录四]。这里的 k k k依然是保留多少个主成分。
在这里插入图片描述
(彩色效果图一)

如果降维前不作标准化处理,结果是这样的 [代码见附录五]。
在这里插入图片描述
(彩色效果图二)

彩色图片压缩与灰度图片压缩类似,无论做不做标准化处理,保留的主成分越多,重建的图片越清晰。对于作标准化处理的情形,当我们保留50个主成分的时候,重建的图片已经有一个比较高的清晰度了,此时降维后数据大概是原数据大小的13% [附录一]。同时,比较上面两幅效果图,我们可以看出:降维前进行标准化处理对PCA效果有明显的提升。

PCA推导第一主成分

上面两小节中,我们了解了降维前对数据进行标准化处理是很重要的。那么,这个是不是可以在PCA的推导过程中体现出来呢?

对于一个 n × p n \times p n×p的矩阵 A \mathbf{A} A,可以看作是 n n n个样本, p p p个特征(feature)。对于生物数据而言,样本数量一般都是远小于特征数量的,也就是说 n ≪ p n \ll p np。自然地,我们希望降低特征的数量,将 n × p n \times p n×p的矩阵降维到 n × l n \times l n×l l < p l < p l<p)的新矩阵 T \mathbf{T} T,并且让低维空间中的数据尽量继承原始数据中的方差,这样低维空间中的点也可以尽可能分得开。这个从高维到低维的映射过程可以通过 l l l p p p维向量完成。这 l l l p p p维向量也就是我们通常所说的主成分(低维空间中新的坐标轴)。

首先我们来看看如何找第一个主成分。假设这里的矩阵 A \mathbf{A} A已经经过标准化处理,也就是说矩阵 A \mathbf{A} A每一列的平均值是0,标准差是1。我们的目标是找到一个 p p p维单位向量 w 1 \mathbf{w_1} w1,使得原来矩阵 A \mathbf{A} A n n n p p p维向量 a i , i = 1 , 2 , … , n \mathbf{a}_i, i=1,2,\ldots,n ai,i=1,2,,n在这个主成分上的得分(坐标) t i , i = 1 , 2 , … , n t_i,i=1,2,\ldots,n ti,i=1,2,,n之间的方差最大。这里不用单位向量也可以,我们的目标是找到一个新的 p p p维向量作为新坐标轴,用单位向量可以简化运算。我们知道一个向量 a i \mathbf{a}_i ai在单位向量 w 1 \mathbf{w_1} w1上的坐标是 a i ⋅ w 1 \mathbf{a}_i \cdot \mathbf{w_1} aiw1,也就是说, t i = a i ⋅ w 1 t_i = \mathbf{a}_i \cdot \mathbf{w_1} ti=aiw1

也就是说,我们要找的第一主成分 w 1 \mathbf{w_1} w1就是
w 1 = arg ⁡ max ⁡ w ∑ i = 1 n ( t i − t ˉ ) 2 (1) = arg ⁡ max ⁡ w ∑ i = 1 n t i 2  (2) = arg ⁡ max ⁡ w ∑ i = 1 n ( a i ⋅ w ) 2    (3) = arg ⁡ max ⁡ w ∥ A w ∥ 2      (4) = arg ⁡ max ⁡ w w T A T A w  (5) = q 1     (6) \begin{aligned} \displaystyle \mathbf{w_1} &= \mathop{\arg\max}\limits_{\mathbf{w}} \sum_{i=1}^{n} (t_i - \bar{t})^2 \qquad \qquad \text{(1)} \\ &= \mathop{\arg\max}\limits_{\mathbf{w}} \sum_{i=1}^{n} {t_i}^2 \qquad \qquad \qquad \ \text{(2)} \\ &= \mathop{\arg\max}\limits_{\mathbf{w}} \sum_{i=1}^{n} (\mathbf{a}_i \cdot \mathbf{w})^2 \qquad \quad \ \ \ \text{(3)} \\ &= \mathop{\arg\max}\limits_{\mathbf{w}} \|\mathbf{A}\mathbf{w}\|^2 \qquad \qquad \quad \ \ \, \text{(4)} \\ &= \mathop{\arg\max}\limits_{\mathbf{w}} \mathbf{w}^{\rm{T}}\mathbf{A}^{\rm{T}}\mathbf{A}\mathbf{w} \qquad \qquad \ \text{(5)} \\ &= \mathbf{q}_1 \qquad \qquad \qquad \qquad \qquad \quad \ \, \text{(6)} \end{aligned} w1=wargmaxi=1n(titˉ)2(1)=wargmaxi=1nti2 (2)=wargmaxi=1n(aiw)2   (3)=wargmaxAw2  (4)=wargmaxwT

  • 16
    点赞
  • 122
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值