首先声明一下,我这只有干货,没有啥多余的,可能大家比较不适应, 建议有一定大学数学基础的读者来看这篇水文,若有哪点讲的不好的地方,请大家多多吐槽。
拿到的原始的数据的维度很大,而且其中有很多冗余的信息,需要把这些信息过滤掉,但同时必须最大限度的保留原始信息,举个栗子,本来数据中有性别这一项,而且这一项很重要,但是降维之后发现性别这一项没有了,或者根据降维后的信息无法区分这个是男还是女,这样的降维就是失败的。因而根据上述的描述,我们已经明确了目标。
而如今的问题就是如何降维,在这里介绍一个最大方差的概念,可能有些概率基础的人都知道,方差越大蕴含的信息越多,这里所说的信息就是上文中提到的信息,因而如果能够保证降维后的数据和原始数据的方差相差不多或者下降的不会太少,这些都是可以容忍的,因而可以从这个角度来考虑问题。
数据降维前的预处理就是要把数据在每一个维度上都减掉均值,而后再去降维,所谓的降维,就是把数据从高维空间投影到低维空间,且能够保证投影后的数据方差最大,下面的图片就解释了什么是投影,
给出一个具体的实例见下图,有已经预处理好的五个点,即减掉了均值之后的数据,
而可以很明显的看出,下面两张图中,左边这张图的投影效果比较好,因为投影之后方差比较大,
这里还要说明一下,投影前已经减掉过均值,即数据在每个维度上的均值都为0,那么降维后的均值也是为0的,那么降维后的数据方差为如下公式,
1
m
∑
i
=
1
n
(
x
T
⋅
u
)
2
=
1
m
∑
i
=
1
n
u
T
x
⋅
x
T
u
=
u
T
(
1
m
x
⋅
x
T
)
u
\frac{1}{m}\sum_{i=1}^{n}(x^{T}\cdot u)^{2}=\frac{1}{m}\sum_{i=1}^{n}u^{T}x\cdot x^{T}u=u^{T}(\frac{1}{m}x\cdot x^{T})u
m1i=1∑n(xT⋅u)2=m1i=1∑nuTx⋅xTu=uT(m1x⋅xT)u
中间的那部分就是
x
x
x的协方差,用
λ
\lambda
λ来表示
1
m
∑
i
=
1
n
(
x
T
⋅
u
)
2
\frac{1}{m}\sum_{i=1}^{n}(x^{T}\cdot u)^{2}
m1∑i=1n(xT⋅u)2,用
∑
\sum
∑ 来表示
1
m
x
⋅
x
T
\frac{1}{m}x\cdot x^{T}
m1x⋅xT, 可以得到如下神奇的结果,
∑
u
=
λ
u
\sum u = \lambda u
∑u=λu
可以得到
λ
\lambda
λ是预处理数据的特征值,
u
u
u是特征向量,而且特征值越大,就代表
1
m
∑
i
=
1
n
(
x
T
⋅
u
)
2
\frac{1}{m}\sum_{i=1}^{n}(x^{T}\cdot u)^{2}
m1∑i=1n(xT⋅u)2越大,即降维后的数据的方差越大,因而取几个最大的特征对应的特征向量和原先的数据再乘回去,就变成了降维后的数据,既有如下结果,可能形式不是很正确,但是意思大家都能够理解,
y
=
[
u
1
T
x
u
2
T
x
.
.
.
u
n
T
x
]
y=\begin{bmatrix} u_{1}^{T}x\\ u_{2}^{T}x\\ ...\\ u_{n}^{T}x\\ \end{bmatrix}
y=⎣⎢⎢⎡u1Txu2Tx...unTx⎦⎥⎥⎤
如果有哪点解释的不对,希望大家能够多多指出来,由于这里只讲了方法,没有讲实例,但是我相信原理懂了,实例自然就不会太难了。