Py学习  »  机器学习算法

机器学习入门基础:SVD(奇异值分解)的一个案例

机器学习初学者 • 3 周前 • 44 次点击  

本文讲解机器学习的降维部分SVD(奇异值分解)的一个典型案例。

SVD分解可以将一个矩阵进行分解,对角矩阵对角线上的特征值递减存放,而且奇异值的减少特别的快,在很多情况下,前甚至的奇异值的和就占了全部的奇异值之和的99%以上的比例。

图1可以很形象的看出上面 SVD 的定义:

图片
图1 SVD的定义

也就是说,对于奇异值,它跟我们特征分解中的特征值类似,我们也可以用最大的个的奇异值和对应的左右奇异向量来近似描述矩阵。

也就是说:

其中:

要比小很多,也就是一个大的矩阵可以用三个小的矩阵 来表示。
如图2所示,现在我们的矩阵只需要灰色的部分的三个小矩阵就可以近似描述了。
图片
图2 SVD的近似计算

由于这个重要的性质,SVD 可以用于 PCA 降维,来做数据压缩和去噪。也可以用于推荐算法,将用户和喜好对应的矩阵做特征分解,进而得到隐含的用户需求来做推荐。同时也可以用于 NLP 中的算法,比如潜在语义索引(LSI)。

下面我们就用一个案例作介绍对 SVD 用于 PCA 降维。

原始图像(矩阵)中共有个元素,取前150个特征,则矩阵可以压缩成这三个矩阵,三个矩阵共有812700个元素。

SVD图像压缩计算过程:

本案例中,原始维度

经过SVD分解后的矩阵及维度:

则原始图像压缩后的维度:

如图3原始图像(a)和处理后的图像(b)的显示效果,可以看出,尽管图片经过SVD压缩,但图像质量并没有多大损失。

图片
图片
(a)
(b)
图3 原始图像(a)和处理后的图像(b)



SVD分解可以将一个矩阵进行分解,对角矩阵对角线上的特征值递减存放,而且奇异值的减少特别的快,在很多情况下,前甚至的奇异值的和就占了全部的奇异值之和的99%以上的比例。

也就是说,对于奇异值,它跟我们特征分解中的特征值类似,我们也可以用最大的个的奇异值和对应的左右奇异向量来近似描述矩阵。

也就是说:

其中要比小很多,也就是一个大的矩阵可以用三个小的矩阵来表示。如图3所示,现在我们的矩阵只需要灰色的部分的三个小矩阵就可以近似描述了。

图片
图3 SVD的近似计算


Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/198542