机器学习-SVD分解算法的物理意义
奇异值分解(Singular Value Decomposition),以下简称SVD。
奇异值分解算法是一种在机器学习中经常使用到的一个算法,SVD主要用于数据压缩和数据降维,在图像压缩、推荐系统有着极其重要的作用,
本文将着重理解SVD分解算法的物理意义以及我们将用Python代码将这个过程可视化,数学推导将不是本文的重点,将在它文展示。
一.SVD分解介绍
任何一个形状的矩阵(图像)都可以转化从先旋转、再延伸、再旋转的形式。
公式如下
SVD分解就是将一个矩阵转变为这三个矩阵的表达形式,同时,这三个矩阵分别代表一个旋转、一个伸缩、一个旋转。
为什么呢?
提出问题就解决了一半的问题。为什么一个矩阵可以转变为一个旋转矩阵、一个伸缩矩阵、一个旋转矩阵相乘呢?
让我们来看一个简单的例子
Unit circle 要怎么转换才能转换成为下图中的A的形式呢?(这里要注意点的颜色!)
首先,我们先让Unit circle逆时针旋转135度。
再让旋转后的图像在x轴上伸长6.70820393249937倍(为什么是这个倍数,先不用纠结,这是奇异值分解以后的一个奇异值数),在y轴上伸长2.2360679774997894倍
然后我们再让图像旋转一次,即可得到和A同等的一个图像. U sigma Vt
这样,原图到A的过程就可以转变为将原图先进行一个旋转、再进行一个伸缩、再进行一个旋转。
我们知道,任何的图像的变化都可以用线性代数里的一个矩阵来表示。
实际上,从原图到A的一个变换矩阵就是
A = ∣ 3 0 4 5 ∣ A = \left|\begin{matrix} 3 & 0 \\ 4 & 5 \end{matrix} \right| A=∣∣∣∣3405∣∣∣∣
我们将其拆解以后,第一个转换图像对应的旋转是逆时针旋转135度,我们可以将第一个旋转用矩阵表示为
V = ∣ − 0.71 − 0.71 − 0.71 0.71 ∣ V=\left|\begin{matrix} -0.71 & -0.71 \\ -0.71 & 0.71 \end{matrix} \right| V=∣∣∣∣−0.71−0.71−0