基变换、特征分解和SVD分解
对于下面用到的线性代数知识的可视化视频放到最后
基变换
在了解特征分解和SVD分解之前,我们需要先了解什么是基变换。
首先我们沿用推荐视频中的称呼,假设你有一个平行世界中的好朋友叫珍尼佛。在我们的世界中,我们很自然地利用垂直坐标系描述一个二维世界,而珍尼佛也有自己的坐标系,只不过我们坐标系的唯一相同点就是我们有相同的原点。这里我们假设珍尼佛的坐标系(在下图中是黄色的基向量)只进行了135°的旋转(和推荐视频中的假设不一样)。我们想要去珍尼佛的世界做客,而且必须通过我们的世界和她的世界互通的唯一通道——虫洞(蓝色圆),对于珍尼佛来说,这个点是(0, -2)。
蓝色是我们世界中的基向量,是为
[
1
0
0
1
]
\left[ \begin{matrix} 1 & 0\\ 0 & 1\end{matrix}\right]
[1001]
她告诉我们黄色的就是她的基向量,在我们的世界看来,是为
[
−
2
2
−
2
2
2
2
−
2
2
]
\left[ \begin{matrix} -\frac{\sqrt2}{2} & -\frac{\sqrt2}{2}\\ \frac{\sqrt2}{2} & -\frac{\sqrt2}{2}\end{matrix}\right]
[−2222−22−22]
她告诉我们在她的坐标系下,虫洞的位置是(0, -2)。
我们需要通过这两个信息求出在我们的世界中,我们应该如何去往虫洞。
[
−
2
2
−
2
2
2
2
−
2
2
]
[
0
−
2
]
=
[
2
2
]
\left[ \begin{matrix} -\frac{\sqrt2}{2} & -\frac{\sqrt2}{2}\\ \frac{\sqrt2}{2} & -\frac{\sqrt2}{2}\end{matrix}\right]\left[ \begin{matrix} 0\\ -2 \end{matrix}\right] = \left[ \begin{matrix} \sqrt2\\ \sqrt2\end{matrix}\right]
[−2222−22−22][0−2]=[22]
这个应用勾股定理都很容易看得出来。
然而这其中还有个隐藏的矩阵没有显示出来,我们将其完全显式
[
−
2
2
−
2
2
2
2
−
2
2
]
[
0
−
2
]
=
[
1
0
0
1
]
[
2
2
]
\left[ \begin{matrix} -\frac{\sqrt2}{2} & -\frac{\sqrt2}{2}\\ \frac{\sqrt2}{2} & -\frac{\sqrt2}{2}\end{matrix}\right]\left[ \begin{matrix} 0\\ -2 \end{matrix}\right] = \left[ \begin{matrix} 1 & 0\\ 0 & 1\end{matrix}\right]\left[ \begin{matrix} \sqrt2\\ \sqrt2\end{matrix}\right]
[−2222−22−22][0−2]=[1001][22]
很明显显式表示的这个矩阵实际上我们世界中的基向量。
我们将得出一个公式
我
们
视
角
下
的
珍
尼
佛
基
向
量
矩
阵
∗
珍
尼
佛
视
角
下
的
向
量
=
我
们
的
基
向
量
矩
阵
∗
我
们
视
角
下
的
向
量
我们视角下的珍尼佛基向量矩阵*珍尼佛视角下的向量 = 我们的基向量矩阵 * 我们视角下的向量
我们视角下的珍尼佛基向量矩阵∗珍尼佛视角下的向量=我们的基向量矩阵∗我们视角下的向量
而我们视角下的珍尼佛基向量,也就是
[
−
2
2
−
2
2
2
2
−
2
2
]
\left[ \begin{matrix} -\frac{\sqrt2}{2} & -\frac{\sqrt2}{2}\\ \frac{\sqrt2}{2} & -\frac{\sqrt2}{2}\end{matrix}\right]
[−2222−22−22]
就是基变换矩阵。她的作用是能够将珍尼佛视角下的向量变成我们视角下的向量,而这个矩阵的逆则恰好相反。
∵
[
−
2
2
−
2
2
2
2
−
2
2
]
[
0
−
2
]
=
[
2
2
]
∴
[
0
−
2
]
=
[
−
2
2
−
2
2
2
2
−
2
2
]
−
1
[
2
2
]
\because \left[ \begin{matrix} -\frac{\sqrt2}{2} & -\frac{\sqrt2}{2}\\ \frac{\sqrt2}{2} & -\frac{\sqrt2}{2}\end{matrix}\right]\left[ \begin{matrix} 0\\ -2 \end{matrix}\right] = \left[ \begin{matrix} \sqrt2\\ \sqrt2\end{matrix}\right]\\ \therefore \left[ \begin{matrix} 0\\ -2 \end{matrix}\right] = \left[ \begin{matrix} -\frac{\sqrt2}{2} & -\frac{\sqrt2}{2}\\ \frac{\sqrt2}{2} & -\frac{\sqrt2}{2}\end{matrix}\right]^{-1}\left[ \begin{matrix} \sqrt2\\ \sqrt2\end{matrix}\right]
∵[−2222−22−22][0−2]=[22]∴[0−2]=[−2222−22−22]−1[22]
通过上面的简单矩阵运算,很明显能看出这个逆矩阵实际上就是珍尼佛视角下的我们的基向量。如果我们的科技先进过珍尼佛的话,我们就可以提供给珍尼佛等式右边的两个信息,她就可以知道她在她的世界中应该怎么到达虫洞中心。
上面的两个等式就是为我们展示了如何将同一个向量在不同的基向量下表示,进行了基变换。
特征分解
我 们 用 A ^ 表 示 我 们 视 角 下 的 珍 尼 佛 基 向 量 矩 阵 , x ^ 表 示 珍 尼 佛 视 角 下 的 向 量 , x 表 示 我 们 视 角 下 的 向 量 , 则 有 A ^ x ^ = x 。 现 在 虫 洞 的 位 置 发 生 了 改 变 , 进 行 了 一 次 线 性 变 换 , 变 换 矩 阵 为 T , 那 么 变 换 后 的 向 量 为 T x 。 我 们 打 算 告 诉 珍 尼 佛 , 让 珍 尼 佛 在 她 的 世 界 中 找 到 新 的 虫 洞 位 置 。 在 此 , 我 们 回 忆 一 下 上 面 说 过 的 , 我 们 可 以 告 诉 珍 尼 佛 在 她 的 视 角 下 我 们 的 基 向 量 是 什 么 样 的 , 以 及 我 们 现 在 视 角 下 的 向 量 T x 。 那 么 T x 在 珍 尼 佛 的 视 角 下 应 该 是 A ^ − 1 T x , 她 就 可 以 根 据 这 个 结 果 找 到 了 新 的 虫 洞 位 置 , 但 是 她 想 知 道 在 她 的 世 界 中 发 生 了 什 么 样 的 线 性 变 化 , 怎 么 求 呢 ? 我 们 将 A ^ − 1 T x 完 全 展 开 为 A ^ − 1 T A ^ x ^ , 发 现 虫 洞 原 来 的 位 置 是 x ^ , 变 换 后 是 A ^ − 1 T A ^ x ^ , 那 么 显 然 这 次 线 性 变 换 在 她 的 世 界 中 是 A ^ − 1 T A ^ , 我 们 称 为 T ^ , T 和 T ^ 描 述 的 都 是 同 一 次 的 线 性 变 化 , 只 是 视 角 不 同 , 这 给 我 们 带 来 了 启 发 , 对 于 T ^ = A ^ − 1 T A ^ , 也 就 是 T = A ^ T ^ A ^ − 1 , 我 们 视 角 下 的 一 个 矩 阵 T 可 以 转 移 到 另 一 个 视 角 下 , 从 而 进 行 分 解 。 但 是 我 们 更 希 望 的 是 找 到 对 我 们 有 用 的 分 解 , 可 以 想 象 , 如 果 T ^ 是 对 角 矩 阵 , 会 让 我 们 在 做 T 的 幂 运 算 的 时 候 带 来 极 大 的 好 处 。 \begin{aligned} & 我们用\hat A表示我们视角下的珍尼佛基向量矩阵,\hat x表示珍尼佛视角下的向量,x表示我们视角下的向量,\\ & 则有\hat A \hat x = x。\\ & 现在虫洞的位置发生了改变,进行了一次线性变换,变换矩阵为T,那么变换后的向量为Tx。\\ & 我们打算告诉珍尼佛,让珍尼佛在她的世界中找到新的虫洞位置。\\ & 在此,我们回忆一下上面说过的,我们可以告诉珍尼佛在她的视角下我们的基向量是什么样的,以及我们现在视角下的向量Tx。\\ & 那么Tx在珍尼佛的视角下应该是\hat A^{-1}Tx,她就可以根据这个结果找到了新的虫洞位置,\\ & 但是她想知道在她的世界中发生了什么样的线性变化,怎么求呢?\\ & 我们将\hat A^{-1}Tx完全展开为 \hat A^{-1}T\hat A\hat x,\\ & 发现虫洞原来的位置是\hat x,变换后是\hat A^{-1}T\hat A\hat x,那么显然这次线性变换在她的世界中是\hat A^{-1}T\hat A,我们称为\hat T,\\ & T和\hat T描述的都是同一次的线性变化,只是视角不同,这给我们带来了启发,对于\hat T = \hat A^{-1}T\hat A,也就是T = \hat A\hat T\hat A^{-1},\\ & 我们视角下的一个矩阵T可以转移到另一个视角下,从而进行分解。\\ & 但是我们更希望的是找到对我们有用的分解,\\ & 可以想象,如果\hat T是对角矩阵,会让我们在做T的幂运算的时候带来极大的好处。\\ \end{aligned} 我们用A^表示我们视角下的珍尼佛基向量矩阵,x^表示珍尼佛视角下的向量,x表示我们视角下的向量,则有A^x^=x。现在虫洞的位置发生了改变,进行了一次线性变换,变换矩阵为T,那么变换后的向量为Tx。我们打算告诉珍尼佛,让珍尼佛在她的世界中找到新的虫洞位置。在此,我们回忆一下上面说过的,我们可以告诉珍尼佛在她的视角下我们的基向量是什么样的,以及我们现在视角下的向量Tx。那么Tx在珍尼佛的视角下应该是A^−1Tx,她就可以根据这个结果找到了新的虫洞位置,但是她想知道在她的世界中发生了什么样的线性变化,怎么求呢?我们将A^−1Tx完全展开为A^−1TA^x^,发现虫洞原来的位置是x^,变换后是A^−1TA^x^,那么显然这次线性变换在她的世界中是A^−1TA^,我们称为T^,T和T^描述的都是同一次的线性变化,只是视角不同,这给我们带来了启发,对于T^=A^−1TA^,也就是T=A^T^A^−1,我们视角下的一个矩阵T可以转移到另一个视角下,从而进行分解。但是我们更希望的是找到对我们有用的分解,可以想象,如果T^是对角矩阵,会让我们在做T的幂运算的时候带来极大的好处。
那么什么时候它才会是一个对角矩阵呢?让我们先回忆一下特征值和特征向量,在我们的坐标系下应用一次线性变换,有一些向量只进行了伸缩,而没进行旋转,它们就是特征向量。假设珍尼佛的世界就是这次线性变换中的特征向量张成的空间,那么她的基向量就是我们眼中的特征向量。在珍尼佛基向量所张成的空间中,我们眼里可能发生的旋转和伸缩,而在珍尼佛的世界中,所有向量只是在不同的特征向量上做了该维度的特征值个单位的伸缩。那么在他们眼中的这次变换就是
T
^
=
[
x
1
.
.
.
0
.
x
2
.
.
0
.
.
.
.
.
.
.
.
.
x
n
]
\hat T = \left[ \begin{matrix} x_1 & . & . & . & 0 \\ . & x_2 & . & . & 0 \\ . & . & . & . & . \\. & . & . & . & x_n \end{matrix}\right]
T^=⎣⎢⎢⎡x1....x2..........00.xn⎦⎥⎥⎤
那么如何才能分解成用珍尼佛的世界中的变换表示呢?那就是通过基变换变成珍尼佛的世界,因此我们需要知道在我们的视角下的珍尼佛的基向量矩阵,套到上面的说法中,我们视角下的珍尼佛基向量矩阵**\hat A就是这次线性变换T中的特征向量矩阵**,就可以分解成三个矩阵了。
举例
求特征向量和特征值的例子可以看:特征值和特征向量及其在机器学习中的应用
设 T = [ 3 1 0 2 ] , 对 T 进 行 特 征 分 解 解 : 先 求 特 征 向 量 和 特 征 值 , ( 有 一 些 跳 步 , 具 体 例 子 看 上 面 的 链 接 ) ( 3 − λ ) ( 2 − λ ) − 1 ∗ 0 = 0 , 解 得 λ 1 = 3 , λ 2 = 2 特 征 向 量 组 成 的 矩 阵 为 [ 1 − 1 0 1 ] 因 此 , T 可 以 化 简 成 如 下 形 式 : [ 3 1 0 2 ] = [ 1 − 1 0 1 ] [ 3 0 0 2 ] [ 1 − 1 0 1 ] − 1 对 于 T 的 幂 , 就 可 以 变 成 计 算 : [ 3 1 0 2 ] m = [ 1 − 1 0 1 ] [ 3 0 0 2 ] [ 1 − 1 0 1 ] − 1 ∗ . . . . . . ∗ [ 1 − 1 0 1 ] [ 3 0 0 2 ] [ 1 − 1 0 1 ] − 1 矩 阵 的 逆 和 原 矩 阵 相 乘 是 单 位 矩 阵 , 化 简 为 : [ 3 1 0 2 ] m = [ 1 − 1 0 1 ] [ 3 0 0 2 ] m [ 1 − 1 0 1 ] − 1 \begin{aligned} & 设T = \left[ \begin{matrix} 3 & 1\\ 0 & 2\end{matrix}\right],对T进行特征分解\\ & 解:先求特征向量和特征值,(有一些跳步,具体例子看上面的链接)\\ & (3-\lambda)(2-\lambda)-1*0=0,\\ & 解得\lambda_1 = 3,\lambda_2 = 2\\ & 特征向量组成的矩阵为\left[ \begin{matrix} 1 & -1\\ 0 & 1\end{matrix}\right]\\ & 因此,T可以化简成如下形式:\\ & \left[ \begin{matrix} 3 & 1\\ 0 & 2\end{matrix}\right] = \left[ \begin{matrix} 1 & -1\\ 0 & 1\end{matrix}\right]\left[ \begin{matrix} 3 & 0\\ 0 & 2\end{matrix}\right]\left[ \begin{matrix} 1 & -1\\ 0 & 1\end{matrix}\right]^{-1}\\ & 对于T的幂,就可以变成计算:\\ & \left[ \begin{matrix} 3 & 1\\ 0 & 2\end{matrix}\right]^m = \left[ \begin{matrix} 1 & -1\\ 0 & 1\end{matrix}\right]\left[ \begin{matrix} 3 & 0\\ 0 & 2\end{matrix}\right]\left[ \begin{matrix} 1 & -1\\ 0 & 1\end{matrix}\right]^{-1} * \space ...... \space * \left[ \begin{matrix} 1 & -1\\ 0 & 1\end{matrix}\right]\left[ \begin{matrix} 3 & 0\\ 0 & 2\end{matrix}\right]\left[ \begin{matrix} 1 & -1\\ 0 & 1\end{matrix}\right]^{-1}\\ & 矩阵的逆和原矩阵相乘是单位矩阵, 化简为: \left[ \begin{matrix} 3 & 1\\ 0 & 2\end{matrix}\right]^m = \left[ \begin{matrix} 1 & -1\\ 0 & 1\end{matrix}\right]\left[ \begin{matrix} 3 & 0\\ 0 & 2\end{matrix}\right]^{m}\left[ \begin{matrix} 1 & -1\\ 0 & 1\end{matrix}\right]^{-1} \end{aligned} 设T=[3012],对T进行特征分解解:先求特征向量和特征值,(有一些跳步,具体例子看上面的链接)(3−λ)(2−λ)−1∗0=0,解得λ1=3,λ2=2特征向量组成的矩阵为[10−11]因此,T可以化简成如下形式:[3012]=[10−11][3002][10−11]−1对于T的幂,就可以变成计算:[3012]m=[10−11][3002][10−11]−1∗ ...... ∗[10−11][3002][10−11]−1矩阵的逆和原矩阵相乘是单位矩阵,化简为:[3012]m=[10−11][3002]m[10−11]−1
SVD分解
对于上述的特征分解来说,很明显由于基向量矩阵都是线性无关的,且和特征值一一对应,因此他们都是n阶方阵,那么T也必定是n阶方阵。那么如果我们需要分解的不是方阵怎么办?这就需要用到SVD了。
假设我们现在有个待分解的M*N的矩阵A,我们使用SVD的目标就是让他降维,将A从n维矩阵降到k(k≤m)维。目标就是,在n维空间中,找到一组正交基,使其经过A的变化后仍然是正交的,这样就完成了降维。现在要证明有这组正交基。
证明
注 意 : 1 ≤ i , j ≤ k 原 来 的 正 交 基 是 ( v ⃗ 1 , v ⃗ 2 , . . . , v ⃗ n ) , 对 于 他 们 的 任 意 两 个 都 是 正 交 的 即 v ⃗ i ⋅ v ⃗ j = v ⃗ i T v ⃗ j = 0 经 过 A 的 变 化 则 是 A v ⃗ i , 任 意 取 两 个 , A v ⃗ i ⋅ A v ⃗ j = ( A v ⃗ i ) T ( A v ⃗ j ) = v i T A T A v ⃗ j 因 为 A T A 是 方 阵 , 有 ( A T A ) v ⃗ i = λ i v ⃗ i 。 所 以 v i T A T A v ⃗ j = v i T λ j v ⃗ j = λ j v i T v ⃗ j = 0 所 以 A v ⃗ i , A v ⃗ j 正 交 \begin{aligned} & 注意:1 \leq i, j \leq k\\ & 原来的正交基是(\vec v_1, \vec v_2, ...,\vec v_n),对于他们的任意两个都是正交的\\ & 即\vec v_i · \vec v_j = \vec v_i^T\vec v_j = 0\\ & 经过A的变化则是A\vec v_i, 任意取两个,A\vec v_i · A\vec v_j = (A\vec v_i)^T (A\vec v_j ) = v_i^TA^TA\vec v_j\\ & 因为A^TA是方阵,有(A^TA)\vec v_i = \lambda_i \vec v_i。\\ & 所以v_i^TA^TA\vec v_j = v_i^T\lambda_j \vec v_j = \lambda_j v_i^T\vec v_j = 0\\ & 所以A\vec v_i,A\vec v_j正交 \end{aligned} 注意:1≤i,j≤k原来的正交基是(v1,v2,...,vn),对于他们的任意两个都是正交的即vi⋅vj=viTvj=0经过A的变化则是Avi,任意取两个,Avi⋅Avj=(Avi)T(Avj)=viTATAvj因为ATA是方阵,有(ATA)vi=λivi。所以viTATAvj=viTλjvj=λjviTvj=0所以Avi,Avj正交
然后我们求这组正交基的单位向量
注
意
:
1
≤
i
≤
k
将
新
的
正
交
基
单
位
化
:
A
v
⃗
i
⋅
A
v
⃗
i
=
v
i
T
A
T
A
v
⃗
i
=
λ
i
v
⃗
i
T
v
⃗
i
=
λ
i
A
v
⃗
i
⋅
A
v
⃗
i
∣
A
v
⃗
i
∣
∣
A
v
⃗
i
∣
=
1
∣
A
v
⃗
i
∣
2
=
λ
i
u
⃗
i
=
A
v
⃗
i
∣
A
v
⃗
i
∣
=
1
λ
i
A
v
⃗
i
A
v
⃗
i
=
u
⃗
i
λ
i
把
λ
i
记
为
σ
i
当
i
>
k
,
A
v
⃗
i
=
0
⃗
∴
A
V
=
A
(
v
⃗
1
,
v
⃗
2
,
.
.
.
,
v
⃗
n
)
=
(
u
⃗
1
σ
1
,
u
⃗
2
σ
2
,
.
.
.
,
u
⃗
k
σ
k
,
u
⃗
k
+
1
∗
0
,
.
.
.
,
0
,
u
⃗
m
∗
0
,
.
.
.
,
0
⏟
n-k
)
=
U
Σ
∴
A
=
U
Σ
V
T
就
成
功
将
A
分
解
了
。
其
中
U
是
m
∗
m
的
矩
阵
,
Σ
是
m
∗
n
的
矩
阵
,
V
T
是
n
∗
n
的
矩
阵
\begin{aligned} & 注意:1 \leq i \leq k\\ & \space \\ & 将新的正交基单位化:\\ & A\vec v_i · A\vec v_i = v_i^TA^TA\vec v_i = \lambda_i \vec v_i^T\vec v_i = \lambda_i\\ \space \\ & \frac{A\vec v_i · A\vec v_i}{|A\vec v_i||A\vec v_i|} = 1\\ \space \\ & |A\vec v_i|^2 = \lambda_i\\ \space \\ & \vec u_i = \frac{A\vec v_i}{|A\vec v_i|} = \frac{1}{\sqrt{\lambda_i}} A\vec v_i\\ \space \\ & A\vec v_i = \vec u_i\sqrt{\lambda_i}\\ & 把\sqrt{\lambda_i}记为\sigma_i\\ \space \\ & 当 i > k, A\vec v_i = \vec 0\\ \space \\ & \therefore AV = A(\vec v_1, \vec v_2, ...,\vec v_n) = (\vec u_1\sigma_1, \vec u_2\sigma_2, ...,\vec u_k\sigma_k,\underbrace{\vec u_{k+1}*0, ..., 0, \vec u_m*0,...,0}_\text{n-k}) = U\Sigma\\ & \therefore A = U\Sigma V^T\\ & 就成功将A分解了。其中U是m*m的矩阵,\Sigma是m*n的矩阵,V^T是n*n的矩阵\\ \end{aligned}
注意:1≤i≤k 将新的正交基单位化:Avi⋅Avi=viTATAvi=λiviTvi=λi∣Avi∣∣Avi∣Avi⋅Avi=1∣Avi∣2=λiui=∣Avi∣Avi=λi1AviAvi=uiλi把λi记为σi当i>k,Avi=0∴AV=A(v1,v2,...,vn)=(u1σ1,u2σ2,...,ukσk,n-k
uk+1∗0,...,0,um∗0,...,0)=UΣ∴A=UΣVT就成功将A分解了。其中U是m∗m的矩阵,Σ是m∗n的矩阵,VT是n∗n的矩阵
U就是我们所要的矩阵,而真正乘出来会发现实际上用到的是前k个向量。详细看奇异值分解(SVD)原理详解及推导,除此之外,
推导过程还参考了SVD奇异值分解逐步推导,这里面还有SVD分解的例子。