利用主成分分析算法(PCA)可以进行图像压缩(准确的说法应该是“图像数据压缩”)。
将
x
\boldsymbol{x}
x降维成
z
^
\hat{\boldsymbol{z}}
z^后,通常是基于
z
^
\hat{\boldsymbol{z}}
z^继续后续的任务(存储、通信等环节),当然,若想从
z
^
\hat{\boldsymbol{z}}
z^绘出图片,则需要恢复
x
\boldsymbol{x}
x(参见第11章的恢复方法,压缩是有损的),再由
x
\boldsymbol{x}
x绘出图片,即
x
\boldsymbol{x}
x与
z
^
\hat{\boldsymbol{z}}
z^表示同一张图片,反过来说:它们是同一张图片的两种数据表示
变换式并不表明:图像坐标点
x
\boldsymbol{x}
x压缩成了新的图像坐标点
z
^
\hat{\boldsymbol{z}}
z^,因为,
z
^
\hat{\boldsymbol{z}}
z^的维度为
d
′
d'
d′,并不能依扫描生成图像,许多同学在这里弄错了。
图像压缩
彩色图像可视为多通道,所以仅需考虑单通道,即灰度矩形图片。 设图片像素为
l
×
s
l\times s
l×s,将图像进行向量化:定义一种对图片扫描的次序,变一个二维图像为一组一维数据(向量),如,“先横后直”(注:你也可以定义其他扫描方式,如,“先直后横”,“平行于某对角线扫”,“绕中心转圈”,等等方式,总之,规定次序每点取值一次),则得到向量
x
=
(
x
1
;
x
2
;
⋯
;
x
l
;
x
l
+
1
;
⋯
;
x
l
×
s
)
\begin{align} \boldsymbol{x}=(x^1;x^2;\cdots ;x^l;x^{l+1};\cdots ;x^{l\times s}) \tag{10.62} \end{align}
x=(x1;x2;⋯;xl;xl+1;⋯;xl×s)(10.62)
其中,
x
k
x^k
xk为图像在第
k
k
k个扫描点的灰度,向量
x
\boldsymbol{x}
x的维度为
d
=
l
×
s
d=l\times s
d=l×s。
再将向量
x
\boldsymbol{x}
x中心化,为方便不妨设向量
x
\boldsymbol{x}
x已中心化,即现在有
∑
k
=
1
d
x
k
=
0
\sum_{k=1}^dx^k=0
∑k=1dxk=0。
考虑某类图像(如,人脸)的样本空间,对其应用主成分分析算法(PCA)。
设有该类图像的一个图片集(作为训练集)
{
x
i
}
i
=
1
m
\{\boldsymbol{x}_i\}_{i=1}^m
{xi}i=1m,以图片向量为列,形成图片集的矩阵
X
\mathbf{X}
X,将其协方差按PCA方式进行分解
X
X
T
=
W
Λ
W
T
=
(
W
^
,
∗
)
(
Λ
^
0
0
∗
)
(
W
^
,
∗
)
T
≈
(
W
^
,
∗
)
(
Λ
^
0
0
0
)
(
W
^
T
∗
)
=
W
^
Λ
^
W
^
T
\begin{align} \mathbf{X}\mathbf{X}^{\mathrm{T}} & =\mathbf{W}\boldsymbol{\Lambda }\mathbf{W}^{\mathrm{T}}\notag \\ & =(\hat{\mathbf{W}},*) \begin{pmatrix} \hat{\boldsymbol{\Lambda }} & 0 \\ 0 & * \end{pmatrix} (\hat{\mathbf{W}},*)^{\mathrm{T}}\notag \\ & \approx (\hat{\mathbf{W}},*) \begin{pmatrix} \hat{\boldsymbol{\Lambda }} & 0 \\ 0 & 0 \end{pmatrix} \begin{pmatrix} \hat{\mathbf{W}}^{\mathrm{T}} \\ * \end{pmatrix}\notag \\ & =\hat{\mathbf{W}}\hat{\boldsymbol{\Lambda }}\hat{\mathbf{W}}^{\mathrm{T}} \tag{10.63} \end{align}
XXT=WΛWT=(W^,∗)(Λ^00∗)(W^,∗)T≈(W^,∗)(Λ^000)(W^T∗)=W^Λ^W^T(10.63)
其中,
W
\mathbf{W}
W中的列向量(特征向量)与
Λ
\boldsymbol{\Lambda }
Λ中的对角线(特征值)已按PCA的要求排序;
Λ
^
\hat{\boldsymbol{\Lambda }}
Λ^为保留的前
d
′
d'
d′个最大的特征值形成的
d
′
×
d
′
d'\times d'
d′×d′矩阵,“
∗
*
∗”为我们不关心的部分。
有了
W
^
\hat{\mathbf{W}}
W^,对于训练集中的图片或新图片(
d
d
d维向量
x
\boldsymbol{x}
x)通过变换式(10.64)得到对应的
d
′
d'
d′维向量
z
^
\hat{\boldsymbol{z}}
z^:
z
^
=
W
^
T
x
\begin{align} \hat{\boldsymbol{z}}=\hat{\mathbf{W}}^{\mathrm{T}}\boldsymbol{x} \tag{10.64} \end{align}
z^=W^Tx(10.64)
以向量
z
^
\hat{\boldsymbol{z}}
z^替代向量
x
\boldsymbol{x}
x,从而实现了降维。
现在,我们集中看一看各矩阵的维: X \mathbf{X} X为 d × m d\times m d×m, W \mathbf{W} W为 d × d d\times d d×d, Λ \boldsymbol{\Lambda} Λ为 d × d d\times d d×d, Λ ^ \hat{\boldsymbol{\Lambda }} Λ^为 d ′ × d ′ d'\times d' d′×d′, W ^ \hat{\mathbf{W}} W^为 d × d ′ d\times d' d×d′, x \boldsymbol{x} x为 d × 1 d\times 1 d×1, z ^ \hat{\boldsymbol{z}} z^为 d ′ × 1 d'\times 1 d′×1。
因 d = l × s d=l\times s d=l×s,任何 d d d维的向量,依原定义的扫描次序,反过来即可从 d d d维向量获得像素为 l × s l\times s l×s的图像。
综上可知:
(1) W {\mathbf{W}} W的每列(即协方差的特征值)均可以得到一个 l × s l\times s l×s的图像,每个图像视为训练集(原图片集)的某个特征的可视化;当然, W ^ \hat{\mathbf{W}} W^就可得到 d ′ d' d′个 l × s l\times s l×s的图像,即由图片集 X \mathbf{X} X通过PCA可得到其“主特征”图像集 W ^ \hat{\mathbf{W}} W^。
(2)式(10.64)并不表明:图像 x \boldsymbol{x} x压缩成了图像 z ^ \hat{\boldsymbol{z}} z^,因为, z ^ \hat{\boldsymbol{z}} z^的维度为 d ′ d' d′,并不能依扫描生成图像,许多同学在这里弄错了。
(3)存储 x \boldsymbol{x} x需要长度为 d = l × s d=l\times s d=l×s的数组(通常很大),而存储 z ^ \hat{\boldsymbol{z}} z^仅需要长度为 d ′ d' d′的数组,通常 d ′ ≪ d d' \ll d d′≪d,这在存储、通信等环节起到了数据压缩的效果。
(4)通过式(10.64)将 x \boldsymbol{x} x降维成 z ^ \hat{\boldsymbol{z}} z^后,通常是基于 z ^ \hat{\boldsymbol{z}} z^继续后续的任务,当然,若想从 z ^ \hat{\boldsymbol{z}} z^绘出图片,则需要通过式(10.64)恢复 x \boldsymbol{x} x(参见第11章的恢复方法,压缩是有损的),再由 x \boldsymbol{x} x绘出图片,即 x \boldsymbol{x} x与 z ^ \hat{\boldsymbol{z}} z^表示同一张图片,反过来说:它们是同一张图片的两种数据表示,由图片扫描直接得到 x \boldsymbol{x} x,再由式(10.64)得到其低维表示 z ^ \hat{\boldsymbol{z}} z^。
本文为原创,您可以:
- 点赞(支持博主)
- 收藏(待以后看)
- 转发(他考研或学习,正需要)
- 评论(或讨论)
- 引用(支持原创)
- 不侵权
上一篇:10.5 主成分分析的目标求解(“丢掉不重要属性”是错误的)
下一篇:10.7 核化线性降维(线性降维+“核技巧”)