关于机器学习:奇异值分解SVD和图像压缩

42次阅读

共计 1987 个字符,预计需要花费 5 分钟才能阅读完成。

在本文中,我将尝试解释 SVD 背地的数学及其几何意义,还有它在数据迷信中的最常见的用法,图像压缩。

奇怪值合成是一种常见的线性代数技术,能够将任意形态的矩阵分解成三个局部的乘积:U、S、V。原矩阵 A 能够示意为:

具体来说,A 矩阵中的奇怪值就是 \Sigma 矩阵中的对角线元素,它们是矩阵 A 的特征值的平方根,示意 A 矩阵在各个主方向上的拉伸水平。U 矩阵是 AA^T 的特征向量形成的正交矩阵,示意数据集在降维后的新的坐标系中的投影。V 矩阵是 A^TA 的特征向量形成的正交矩阵,示意每个数据点在降维后的新坐标系中的坐标。

一个矩阵的奇怪值(singular values)是指其奇怪值合成中的 \Sigma 矩阵的对角线上的元素,也就是特征值的平方根。换句话说,矩阵的奇怪值是矩阵的奇怪值合成中量度矩阵对输出矩阵进行的线性变换的尺度因子。

奇怪值在很多利用中都有宽泛的利用,例如在图像处理中,它能够用来对图像进行压缩和降噪;在举荐零碎中,它能够用来对用户的偏好进行建模和举荐相干的产品或服务;在自然语言解决中,它能够用来对文本数据进行降维和特征提取等。

数学原理

如果咱们有一个矩阵 A

要计算 SVD,首先须要通过找到 AA^{T} 的特征值来计算奇怪值。

上述矩阵的特征方程为:

所以失去的奇怪值是:

奇怪向量就是 ATA 的正交特征向量集。ATA 的特征值是 25、9 和 0,因为 ATA 是对称的,咱们晓得特征向量是正交的。

所以,先计算 λ=25

而后进行化简:

其方向的单位向量为:

同理 对于 λ = 9,特征向量为:

对于第三个特征向量 0,咱们能够应用它垂直于 v1 和 v2 的属性:

求解上述方程失去第三个特征向量

当初,咱们计算 U,失去

这样就失去了最终的 SVD 方程:

图像压缩

通过仅保留最重要的奇怪值及其对应的奇怪向量,SVD 被用于图像压缩以减小图像的大小。这能够从根本上缩小在不失落其最重要的视觉数据的状况下存储图像所需的额定存储量。

咱们将应用上面的图像进行图像压缩:

导入库和读取图片非常简略

 import requests
 import cv2
 import numpy as np
 import matplotlib.pyplot as plt
 
 img = cv2.imread('flower.bmp')
 gray_image = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
 gray_image = gray_image.astype(np.float64)

这里咱们将图像转换成灰度图,执行奇怪值合成

 U, s, V = np.linalg.svd(gray_image, full_matrices=False)

numpy 中就蕴含了该办法,所有咱们间接调用即可,咱们看看前 10 个奇怪值

 top_10_singular_values = s[:10]

可视化

 plt.plot(range(1, len(s) + 1), s, 'r-')
 plt.xlabel("Rankings")
 plt.ylabel("Singular Values")
 plt.title("Singular Values versus their Rankings")
 plt.savefig("Singular_values_vs_rankings.png")
 plt.show()

从奇怪值和排序图中能够留神到图像的大部分值都蕴含在大量奇怪值中,所以能够得出到较高的奇怪值蕴含的图像信息程度非常低,这也阐明应用奇怪值合成进行降维和图像压缩是可行的。

当初,让咱们尝试重建和显示图像。

 k_values = [10, 50, 100]
 
 plt.figure(figsize=(12,6))
 
 for i in range(len(k_values)):
     low_rank = U[:, :k_values[i]] @ np.diag(s[:k_values[i]]) @ V[:k_values[i], :]
     plt.subplot(2,3,i+1),
     plt.imshow(low_rank, cmap='gray'),
     plt.title(f"For K value = {k_values[i]}")
     plt.savefig("Reconstruction_with_k_values.png")

能够留神到具备不同 K 值的所有图像都有显着差别。应用了前 10 个奇怪值,后果图像一点也不清晰。应用了前 50 个奇怪值,生成的图像比之前的图像清晰多了,然而还有一些轻微的含糊。当咱们应用前 100 个奇怪值时,图像比前两张图像越来越清晰,根本和原图很靠近了。随着 K 值的减少,图像的清晰度也会减少。

总结

本文介绍了奇怪值合成 (SVD) 的数学原理和一个理论的利用案例,能够看到 SVD 是一种弱小的图像压缩办法,有助于在减小图像尺寸的同时保留大部分重要的视觉信息。

https://avoid.overfit.cn/post/f0a675aad6994b61a2aa93fb647a0633

作者:Neokai

正文完
 0