首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

奇异值分解原理及Python实例

奇异值分解 SVD(Singular Value Decomposition)是一种重要的矩阵分解方法,可以看做是特征分解在任意矩阵上的推广,SVD是在机器学习领域广泛应用的算法。

特征值和特征向量

定义:设 A 是 n 阶矩阵,若数 λ 和 n 维非零向量 x 满足

那么,数 λ 称为方阵 A 的特征值,x 称为 A 的对应于特征值 λ 的特征向量

说明:特征向量 x 不等于0,特征值问题仅仅针对方阵;n 阶方阵 A 的特征值,就是使得齐次线性方程组 (A-λE)x = 0 有非零解的 λ 值,即满足方程 | A - λE| = 0 的 λ 都是方阵 A 的特征值

特征分解

对方阵 A 求取特征值和特征值对应的特征向量可以将方阵 A 进行特征分解为

证明:假设方阵 A 有 n 个线性无关的特征向量 v1, v2, v3, ... , vn,对应的特征值为 λ1, λ2, λ3, ... , λn,令 V = ( v1, v2, v3, ... , vn)

在进行特征分解时,一般将 V 的这 n 个特征向量标准化,即使得 V 中 n 个特征向量为标准正交基,满足

所以方阵 A 的特征分解公式为

奇异值分解

矩阵的特征分解要求矩阵必须为方阵,那么对于不是方阵的矩阵而言则可以使用 SVD 进行分解,假设 A 是一个 m * n 的矩阵,则存在一个分解使得

其中 U 为左奇异值矩阵,Λ 为矩阵 A 奇异值,除了主对角线上的元素以外全为0,V 为右奇异值矩阵

如何求这 SVD 分解后的三个矩阵?

虽然矩阵 A 不是方阵,但是 A^T^A 是一个 n * n 的方阵,于是对 A^T^A 这个方阵进行特征值和特征向量计算则有

通过 A^T^A 方阵计算得到的特征向量是一个 n * n 维的矩阵,也就是 SVD 公式中的 V 矩阵

证明:

可以看到 A^T^A 的特征向量就是 SVD 中的 V 矩阵,同时可以得到特征值矩阵等于奇异值矩阵的平方,也就是说特征值 λ 和奇异值 σ 存在如下关系

类似的,通过计算 AA^T^ 方阵的特征值和特征向量可以得到 SVD 中的 U 矩阵

利用Python进行SVD分解对图像压缩

原图

进行 SVD 分解,选择前 50 个奇异值

将图像进行奇异值分解后的图像

使用前50个奇异值的图像

可以看到,使用前50个奇异值就能大致还原原图像,也就是可以通过仅仅使用奇异值矩阵中前面一部分的值表示整体的情况,从而实现了特征的降维,这是因为在奇异值矩阵中奇异值减少的特别快,可以用最大的k个的奇异值和对应的左右奇异向量来近似描述矩阵

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181128G19NSG00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券