番外篇——关于PCA的推导与思考
前言:本文适合对PCA有一定了解,大致知道PCA的目的与求法,且线性代数基础扎实的读者阅读。PCA困扰了我一段时间,本文将详细阐述我在学习PCA过程中的迷惑、思考与计算推到。不严谨之处还望各位读者指出,欢迎交流讨论。
PCA是数据降维领域中非常基础又常见的算法,CSDN、知乎随便一搜都有大量相关知识。然而经过我的考查,我觉得至少我看到的关于PCA的讲解都是不完整的。关于PCA的原理和目的,可以从两方面理解,网上也有人提到,1)是降维后的数据在相同维度上方差最大且不同维度的数据线性无关,协方差矩阵可以很轻松描述这种状态,2)是投影误差最小。不论从那种理解出发去求解PCA,最终的优化目标是等价的,也就是说上面两条导致的结果是一致的。
网上关于PCA的求解方法,很多都是从上述第一种理解方式出发的(至少我没有看到从第二种理解方式出发求解PCA的),当然了第一种理解方式也很直观。我看的教学也都是针对第一种理解方式进行求解的。但是,不知道是因为作者本身就没有理解透彻PCA,还是懒得写,我看到的教学中对PCA求解过程的解释都是不完整的。比如在学的过程中我始终有些问题得不到解答:
- 为什么投影矩阵 P P P一定要 P P T = I PP^T=I PPT=I?
- 为什么降维后的数据的协方差矩阵就一定能是对角阵?即为什么 Y = P X X T P T Y=PXX^TP^T Y=PXXTPT一定可以通过改变 P P P来变成对角阵?即为什么一定有解使Y为对角阵?
- 为什么 P P P从 X X T XX^T XXT的特征矩阵中选择?
- 降维后,怎么把数据(有损)恢复出来呢?
- 为什么要选择使投影后的数据方差最大的几个方向作为投影向量方向呢?
本文将分别推导从PCA的两种理解方式出发的PCA解法。
理解一:降维后数据在相同维度方差尽可能大,不同维度相关性为0
降维,用线代的方式理解,其实就是将原始数据投影到一组新的基坐标下,得到原始数据在新基坐标下的坐标。
首先我们来定性地解释一下为什么PCA可以这样理解。
非常直观的一个想法,投影后的数据要尽可能分散啊,假如我选了个不好的投影面,数据投下来都堆在一块了,那还有啥区分度啊,完全分不清哪个数据对应原来的哪个数据,这可不行。
另外一个想法也很直观,我们来思考一个这样的问题。假如我现在有一组数据,每个样本点都是二维的,即
(
a
1
,
b
1
)
,
(
a
2
,
b
2
)
,
.
.
.
(
a
i
,
b
i
)
(a_1,b_1),(a_2,b_2),...(a_i,b_i)
(a1,b1),(a2,b2),...(ai,bi)。你看我这个数据是二维的对吧,那我存他的时候自然就要占用2i的存储空间。但是假如我们发现,所有样本的两个维度之间都有这样的线性关系
a
i
=
2
b
i
a_i=2b_i
ai=2bi,那我在保存的时候只存一维的数据就够了,因为知道一个维度,就可以求出样本点的所有信息了啊。这就叫,数据是线性相关的,或者说,数据是胖的,多了冗余的肥肉。怎么说,数据能够降维啊,就是因为它们之间存在相关性,有肥肉,所以能减肥。但是在我们PCA降维问题里,降维后的数据可不能有相关性。这是为啥?我降维本来的目的就是压缩数据,那当然不能有任何冗余信息啊。
下面进行数学推导。
设样本数据为
X
X
X,为
m
×
n
m\times n
m×n的矩阵,矩阵中的每个列向量是一个样本点,即总共有
n
n
n个样本,样本的维度为
m
m
m。设投影矩阵为
P
P
P,大小为
k
×
m
k\times m
k×m,矩阵中的行向量是各个方向的基向量,行向量正交,即
P
P
P行满秩(思考为什么行向量要正交)。那么
P
X
PX
PX就将原始
m
m
m维数据压缩为
k
k
k维数据。
我们先设样本点已经去中心化了,即
∑
x
i
=
0
\sum x_i=0
∑xi=0,其中
x
i
x_i
xi是
X
X
X中的第
i
i
i个向量,即第
i
i
i个样本点。我们的目的是,第一,投影后的数据在相同维度的方差最大;第二,不同维度的数据相关性尽可能小(当然为0最好),那么容易想到,协方差矩阵是个很好用的工具,因为它同时描述了数据的方差和协方差。记住,投影后的数据为
P
X
PX
PX,矩阵
P
X
PX
PX的每个列向量是被压缩后的样本点。则可知
D
=
1
n
(
P
X
)
(
P
X
)
T
=
1
n
P
X
X
T
P
T
D=\frac{1}{n}(PX)(PX)^T=\frac{1}{n}PXX^TP^T
D=n1(PX)(PX)T=n1PXXTPT是投影后数据的协方差矩阵。协方差矩阵对角线上的元素描述的就是投影后各个维度数据的方差,对角线外的元素描述的是不同维度间数据的相关性。我们的目的就是,首先看看能不能让
D
D
D变成对角阵,这样投影后各个维度间的数据线性不相关,精瘦肉,没有一点冗余。在这个基础上,我们尽量让
D
D
D对角线上元素之和尽可能大,这样投影后各个维度数据的方差就尽可能大,数据也就尽可能分散了。也就是说,使
D
D
D的迹(trace)尽可能大。
首先我们看看,
P
P
P能不能让
D
D
D对角化。直接说结论好了,当
P
P
P行向量正交时,
D
=
1
n
P
X
X
T
P
T
D=\frac{1}{n}PXX^TP^T
D=n1PXXTPT就是对角阵。但是我还没想出来怎么证。
下面就是使该对角阵的对角元素之和最大,即优化目标是
m
a
x
p
t
r
(
P
X
X
T
P
T
)
max_ptr(PXX^TP^T)
maxptr(PXXTPT)
s
.
t
.
P
P
T
=
I
s.t. PP^T=I
s.t.PPT=I
推导到这里先停一下,我们继续第二种理解。
理解二:将原始数据投影到低维超面实现降维,且投影误差要尽可能小
这种方式更直观了,我们就是要找个超平面,然后把数据投到这个超平面上,用投影后的数据点来近似表达原来的数据。那优化目标也显而易见,即让投影误差尽可能小。
依旧,我们第一步要做的还是数据的去中心化。为啥?如果不去中心化的话,最优超平面就不通过原点了,优化参数中就还需要求一个超平面的平移量,太麻烦。但是去中心化后就不存在这个问题了。好了啊我们认为
X
X
X已经去中心化了。那么,我们用一组不相关的向量来描述这个超平面,把它们放在矩阵
P
P
P中,P的所有行向量张成了这个超平面。
这样理解
P
P
P的话,就很容易理解为啥
P
P
P要行向量正交了。因为方便啊!描述一个平面,肯定是用一组正交的向量最方便啊!不过当然,我大胆猜测,就算只假定
P
P
P行满秩,最后优化的结果也一定是
P
P
P行正交。先不管这个了,继续推。对于单个样本点
x
i
x_i
xi,其在新基坐标下的坐标为
P
x
i
Px_i
Pxi,那么投影点的坐标就是
P
T
P
x
i
P^TPx_i
PTPxi,所以但个样本点的投影误差为
单个样本投影误差的第一项
x
i
T
x
i
x_i^Tx_i
xiTxi是由样本确定的不能改变,所以我们的优化目标是通过改变
P
P
P,使
∣
∣
P
x
i
∣
∣
2
||Px_i||^2
∣∣Pxi∣∣2最大。对于总体误差而言,我们的优化目标就是
m
a
x
p
∑
i
∣
∣
P
x
i
∣
∣
2
max_p\sum_i ||Px_i||^2
maxpi∑∣∣Pxi∣∣2
到这就需要一点技巧了,
∑
i
∣
∣
P
x
i
∣
∣
2
=
t
r
a
c
e
(
X
T
P
T
P
X
)
=
t
r
a
c
e
(
P
X
X
T
P
T
)
\sum_i ||Px_i||^2=trace(X^TP^TPX)=trace(PXX^TP^T)
i∑∣∣Pxi∣∣2=trace(XTPTPX)=trace(PXXTPT),所以优化目标就是
m
a
x
p
t
r
(
P
X
X
T
P
T
)
max_ptr(PXX^TP^T)
maxptr(PXXTPT)
s
.
t
.
P
P
T
=
I
s.t. PP^T=I
s.t.PPT=I
殊途同归!!!
这个优化问题的解法网上都有,就不再说了,主要操作是特征值分解。看到没,特征值分解在最后这一步求解的时候才出来!不是拍脑门想出来特征值分解在这有啥物理意义所以才用的!特征值分解在这就是数学工具!没有物理意义!
那降维之后的数据要证明有损恢复出来呢?样本点
X
X
X投影在基坐标系
P
P
P下的坐标为
P
X
PX
PX,那么投影点在原始坐标系下的坐标就是
P
T
P
X
P^TPX
PTPX。
从第二种理解方式出发,很容易想到PCA在什么情况下的表现不会好。比如,球状分布的数据。并且也很容易理解,降维越多,误差越大,恢复出来损失就越大。
咋肥四,感觉PCA就是找超平面投影啊晕!这个思想也太简单了吧!
我对PCA的理解还是比较浅层的,有关PCA,再参看这篇博客https://blog.csdn.net/hustqb/article/details/78394058