SVD奇异值分解

奇异值分解

\(A_{m\times n}=U_{m\times n}\times \sum{_{m\times n}\times V_{m\times n}^{T}}\)其中\(U\)和\(V\)都是正交矩阵,且\(\sum\)是奇异值矩阵(和\(A\)的大小相同,其主对角元素是从大到小排列的,这些对角元素称为奇异值,其他位置原色为0)

svd奇异值分解例题

SVD奇异值分解

计算\(U\)

我们先计算\(AA^T\),他是一个\(m\)阶的对称矩阵,那么我们可以对\(AA^T\)进行相似对角化,注意特征值按从大到小排,可以得到:\(AA^T=U\varLambda _1U^T\)(\(U\)是正交矩阵)

SVD奇异值分解

计算\(V\)

我们再计算\(A^TA\),他是一个\(n\)阶的对称矩阵,那么我们可以对\(A^TA\)进行相似对角化,注意特征值按从大到小排,可以得到:\(A^TA=U\varLambda _2U^T\)(\(V\)是正交矩阵)

SVD奇异值分解

计算\(\varSigma \)

因为\(A^TA\)和\(AA^T\)的非零特征值相同,我们取出非零特征值并开方,就得到了我们的奇异值。我们先写出一个空的奇异值矩阵\(\varSigma \)(大小和\(A\)相同),然后将这些奇异值按照从大到小填充到\(\varSigma \)的主对角线上,其他位置用0填充。

SVD奇异值分解

利用SVD对数据进行降维

因为\(\varSigma \)举证主对角线元素按照从大到小的顺序排列,故我们可以只保留较大的数组对数组进行降维。

SVD奇异值分解

这里的降维更准确的来说是使得矩阵的秩减小,矩阵大小并未改变

通过SVD对数据进行降维,我们还可以计算保留原矩阵的特征比例

SVD奇异值分解

SVD奇异值分解matlab

% SVD奇异值分解matlab
clc,clear;
A = [4 0 1 6;0 0 5 1;2 1 3 2];
[U,S,V] = svd(A);

svd奇异值分解python

import numpy as np
from numpy import linalg

A = np.array([[4, 0, 1, 6], [0, 0, 5, 1], [2, 1, 3, 2]])
U, Sigma, VT = linalg.svd(A)
print("U", U)
print("Sigma", Sigma)
print("VT", VT)

SVD奇异值分解优缺点

优点:简化数据,去除噪声点,对数据降维(减少秩)

缺点:数据的转换可能难以理解

SVD奇异值分解的应用

svd奇异值分解可以对图片,视频进行处理还可以应用到潜在语义索引,推荐系统等问题中。

总结

通过SVD对数据的处理,我们可以对原始数据进行精简,这样做实际上是去除了噪声和冗余信息,以此达到了优化数据的目的

发表评论 取消回复
表情 图片 链接 代码

分享