算法笔记【2】-SVD奇异分解及在最小二乘求解上的应用

本文详细介绍了SVD分解的基本概念,包括其定义、步骤示例,以及在图像压缩、推荐系统、数据降维和最小二乘问题中的应用。特别强调了SVD在处理非满秩矩阵时的优势。

一、什么是SVD分解

奇异值分解(Singular Value Decomposition,简称SVD)是一种重要的矩阵分解技术。它可以将一个矩阵分解为三个矩阵的乘积,即A = UΣVT,其中U和V是正交矩阵,Σ是一个对角矩阵,对角元素为从大到小排列的特征值。
在这里插入图片描述

二、SVD分解的步骤

这里以一个例子来讲解SVD分解的步骤,假设有矩阵A如下,我们对其进行进行SVD分解。
A = [ 0 1 1 1 1 0 ] (1) A =\begin{bmatrix} 0 & 1 \\ 1 & 1 \\ 1 & 0 \end{bmatrix} \tag{1} A= 011110 (1)

  • 对于给定的m×n矩阵A,计算ATA得到一个n×n的对称矩阵C。
    C = A T A = [ 0 1 1 1 1 0 ] [ 0 1 1 1 1 0 ] = [ 2 1 1 2 ] (2) C = A^TA =\begin{bmatrix} 0 & 1 & 1\\ 1 & 1 & 0 \end{bmatrix} \begin{bmatrix} 0 & 1 \\ 1 & 1 \\ 1 & 0 \end{bmatrix} = \begin{bmatrix} 2 & 1 \\ 1 & 2 \end{bmatrix} \tag{2} C=ATA=[011110] 011110 =[2112](2)

  • 对C矩阵进行特征值分解,得到特征值向量V组成的矩阵和对应的特征值λ。
    V = [ 1 2 1 2 1 2 1 2 ] (3) V = \begin{bmatrix} \frac{1}{\sqrt{2}} & \frac{1}{\sqrt{2}} \\ \frac{1}{\sqrt{2}} & \frac{1}{\sqrt{2}} \end{bmatrix} \tag{3} V=[2 12 12 12 1](3)
    对应的特征值:λ1=3,λ2=1。具体如何求特征向量和特征值可以参考《线性代数》的课本。

  • 将特征值按从大到小的顺序排列,并对应生成对角矩阵Σ。
    Σ = [ 3 0 0 1 0 0 ] (4) Σ = \begin{bmatrix} \sqrt{3} & 0 \\ 0 & 1 \\ 0 & 0 \end{bmatrix} \tag{4} Σ= 3 00010 (4)

  • 计算AAT,并将结果进行特征值分解,得到特征值λ和对应的特征向量组成的矩阵U。
    U = [ 1 6 1 2 1 3 2 6 0 − 1 3 1 6 − 1 2 1 3 ] (5) U = \begin{bmatrix} \frac{1}{\sqrt{6}} & \frac{1}{\sqrt{2}} & \frac{1}{\sqrt{3}} \\ \frac{2}{\sqrt{6}} & 0 & -\frac{1}{\sqrt{3}} \\ \frac{1}{\sqrt{6}} & -\frac{1}{\sqrt{2}} & \frac{1}{\sqrt{3}} \end{bmatrix} \tag{5} U= 6 16 26 12 102 13 13 13 1 (5)
    对应的特征值:λ1=3,λ2=1,和C=ATA的特征值一致。

三、SVD分解的应用领域

  1. 图像压缩
    在图像处理中,SVD分解常被用于图像压缩。通过对图像矩阵进行SVD分解,可以得到较低秩的近似矩阵,从而减少存储空间和传输带宽。这种方法在JPEG2000等图像压缩算法中得到广泛应用。
  2. 推荐系统
    SVD分解在推荐系统中也有重要的应用。通过对用户评分矩阵进行SVD分解,可以将用户和物品映射到一个隐空间中,并预测用户对未评分物品的喜好程度。基于SVD的协同过滤算法在Netflix Prize竞赛中取得了很大成功。
  3. 数据降维
    SVD分解可以将高维数据降维到低维,保留数据的主要特征。这在机器学习和数据挖掘任务中非常有用,可以提高计算效率并减少存储需求。例如,在主成分分析(PCA)中,SVD分解被广泛用于实现数据降维。

四、用SVD求解最小二乘表达式

一般情况下,线性方程的表达式为:
A x = b Ax = b Ax=b
其中A为m×n的系数矩阵,x为n×1的未知向量,b为m×1的矩阵。线性方程可分为三种情况:
1.m = n,方程组和未知数的个数相等,理论上存在唯一解;
2. m < n,方程组数小于未知数的个数,理论上存在无数解;
3. m > n, 方程组数大于于未知数的个数,即为超定方程,一般情况下无解,所以一般是求其最优解。这也是我数学建模过程中最常用到的线性模型。我们知道求最优解可通过常规最小二乘法来求解:
x = ( A T A ) − 1 A T b x = (A^TA)^{-1}A^Tb x=(ATA)1ATb
此方式确实常用,但需要注意到的是,求解过程需要对ATA求逆,在矩阵A不满秩的情况下,ATA是奇异矩阵,无法求逆。而通过SVD求解的优点是不需要复杂的求逆运算,且可处理ATA为奇异阵不可逆的情况
具体的,A = UΣVT,所以Ax=b可以表示为:
U Σ V T x = b UΣV^{T}x = b UΣVTx=b
两边同时左乘UT得:
Σ V T x = U T b ΣV^{T}x = U^{T}b ΣVTx=UTb
现在令y=VT x, b’=UT b,则:
Σ y = b ′ Σy = b' Σy=b
展开可以表示为:
在这里插入图片描述
所以展开矩阵得:
y i = b i ′ λ i , i = 1 , 2 , . . . , n y_i= \frac{b'_i}{λ_i},i=1,2,...,n yi=λibi,i=1,2,...,n
根据y=VT x,可以反解得到x:
x i = V y i , i = 1 , 2 , . . . , n x_i= Vy_i,i=1,2,...,n xi=Vyi,i=1,2,...,n
至此,解算完毕。

  • 代码找时间补^_^ 。
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

>_<!

码字不易,如有帮助,欢迎鼓励

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值