奇异值分解(SVD分解)———超详细讲解

奇异值分解

线性代数知识回顾

对于一个n阶对称矩阵A,如果我们求出了矩阵A的n个特征值,并且求出了这n个特征值对应的特征向量,如果这n个特征向量线性无关,那么矩阵A可被特征分解为:

A = Q\sum Q^{-1}

其中Q为n个特征向量组成的矩阵,Q = (q1,q2,….,qn) 其中qi为特征向量,Σ为n个特征值组成的对角矩阵

上式也称为相似对角化。

然后我们把Q中的特征向量给它单位化并正交化,即满足||qi|| = 1,qi*qj = 0,此时的Q矩阵为正交矩阵,也叫酉(you)矩阵,即满足QQ^{-1} = I,这个时候A又可被特征分解为 

A = Q\sum Q^{T}

上式也称为正交对角化。

但是,上面所述的特征分解要满足A矩阵为n阶方阵,要正交对角化还要满足A矩阵为对称矩阵,那么对于任意一个n*m阶的矩阵我们是否可以对它进行特征分解呢,这就引出了SVD。因此SVD的作用也就是解决了对于任意n*m阶矩阵的特征分解。

SVD分解证明

SVD分解(Singular Value Decompositionm,简称SVD),又称奇异值分解,

先上结论:对于任意一个矩阵A,我们都可以将它分解为A = U\sum V^{T},其中U,V是正交矩阵,∑是对角矩阵,其主对角线上的每个值我们称为奇异值。

前提知识:

对于任意一个m×n的矩阵A,可知A^{T}A(n阶)和AA^{T}(m阶)都是对称矩阵,由实对称矩阵必可相似对角化可知,必有A^{T}A = Q_{1}\sum _{1}Q_{1}^{T}AA^{T} = Q_{2}\sum _{2}Q_{2}^{T},并且Σ中是对称矩阵的特征值,Q的列向量是对称矩阵n或m个正交的特征向量。

我们设A^{T}A的一组正交的单位特征向量为v(v1,v2,v3,...,vN),那么有

A^{T}Avi = \lambda ivi

两边同时左乘A

        (AA^{T})A vi = A\lambda ivi = \lambda i(Avi)

所以可知Avi为矩阵AA^{T}的特征向量,λi也为矩阵AA^{T}的特征值,因此A^{T}AAA^{T}特征值相同,但是特征向量不同。

并且||Avi|| = \sqrt{vi^{T}A^{T}Avi} = \sqrt{vi^{T}\lambda ivi} = \sqrt{\lambda i} ||vi|| = \sqrt{\lambda i},所以\frac{Avi}{\sqrt{\lambda i}}即为AA^{T}矩阵的单位正交向量(后文用到)。

证明三步法:
  1. 先构造V和\sum矩阵
  2. 再构造U矩阵
  3. 证明A = U\sum V^{T}

(为了方便下面用在word中推导) 

第一步:

 第二步:

第三步:

具体SVD分解的例子 

这里我们用一个简单的例子来说明矩阵是如何进行奇异值分解的。我们的矩阵A定义为:

首先求出A^{T}AAA^{T}

进而求出 A^{T}A 的特征值和特征向量:

再求出AA^{T}的特征值和特征向量:

 

SVD分解的应用

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

### 奇异谱分析 (SSA) 降噪算法原理 奇异谱分析是一种强大的工具,能够有效地对时间序列数据进行分解和去噪处理。该方法的核心优势在于可以将原始的时间序列分解为不同的组成部分,如趋势项、周期成分以及噪声等[^1]。 具体来说,在 SSA 中,首先会通过嵌入技术把一维的时间序列转换成一个二维的轨迹矩阵;接着对该矩阵执行奇异值分解(SVD),从而获得一组正交基底——也就是特征向量及其对应的奇异值。这些特征向量反映了原序列中的不同模式或结构特性。对于降噪目的而言,则是从众多特征向量中挑选出那些代表主要信息的部分来重建信号,而忽略掉其余被认为主要是随机波动或是干扰因素所贡献的小幅度分量[^2]。 #### 实现流程概述 为了实现上述过程,通常遵循以下几个操作: - **构建轨迹矩阵**:给定长度为 \(T\) 的输入序列 \(\{y_t\}_{t=1}^{T}\),选择窗口大小 \(L<T\) ,形成尺寸为\(L\times(T-L+1)\) 的汉克尔(Hankel)型轨迹矩阵\[X=\left[\begin{array}{cccc} y_{1}&y_{2}&\cdots&y_{T-L+1}\\ y_{2}&y_{3}&\cdots&y_{T-L+2}\\ \vdots & \vdots &&\vdots\\ y_{L}&y_{L+1}&\cdots&y_T \end{array}\right]\] - **奇异值分解**:对轨迹矩阵 \(X\) 进行 SVD 得到三个因子矩阵 U, Σ 和 V^\* 。其中U包含了左奇异向量作为列向量,Σ是对角线上有奇异值排列而成的方阵,V^\* 是右奇异向量组成的共轭转置矩阵。 - **组分分离与重组**:依据实际需求选取若干个最大的奇异值连同相应的左右奇异向量构成新的低秩近似矩阵 \(\tilde{X}=U_r\Sigma_rV_r^*\),这里下标 r 表示只保留前r个重要的维度。最后再把这个新矩阵映射回原来的一维形式完成最终的结果输出。 ```matlab function [D] = ssaspe(Y, L) % 输入参数说明: % Y - 时间序列数组 % L - 轨迹矩阵宽度 T = length(Y); K = T - L + 1; % 构建轨迹矩阵 X = zeros(L,K); for i = 1:K X(:,i) = Y(i:i+L-1).'; end % 计算SVD并标准化特征值分布 D = flipud(eig(X*X.')); D = D / sum(D); end ``` 此段 MATLAB 代码展示了如何创建轨迹矩阵并对之实施奇异值分解以获取特征值的比例分配情况[^3]。值得注意的是,这段程序仅提供了部分功能,完整的 SSA 流程还需要进一步编写用于重构信号的具体逻辑。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值