矩阵篇(五)-- 特征值分解(EVD)和奇异值分解(SVD)

news2024/11/23 11:18:56

1 特征值分解(EVD)

        设 A n × n A_{n \times n} An×n n n n个线性无关的特征向量 x 1 , … , x n \boldsymbol{x}_{1}, \ldots, \boldsymbol{x}_{n} x1,,xn,对应特征值分别为 λ 1 , … , λ n \lambda_{1}, \ldots, \lambda_{n} λ1,,λn

A [ x 1 ⋯ x n ] = [ λ 1 x 1 ⋯ λ n x n ] A\left[\begin{array}{lll}\boldsymbol{x}_{1} & \cdots & \boldsymbol{x}_{n}\end{array}\right]=\left[\begin{array}{lll}\lambda_{1} \boldsymbol{x}_{1} & \cdots & \lambda_{n} \boldsymbol{x}_{n}\end{array}\right] A[x1xn]=[λ1x1λnxn]

        所以:
A = [ x 1 ⋯ x n ] [ λ 1 ⋱ λ n ] [ x 1 ⋯ x n ] − 1 A = \left[\begin{array}{lll}\boldsymbol{x}_{1} & \cdots & \boldsymbol{x}_{n}\end{array}\right]\left[\begin{array}{lll}\lambda_{1} & & \\& \ddots & \\& & \lambda_{n}\end{array}\right]\left[\begin{array}{lll}\boldsymbol{x}_{1} & \cdots & \boldsymbol{x}_{n}\end{array}\right]^{-1} A=[x1xn]λ1λn[x1xn]1
        因此有EVD分解
A X = X Λ A = X Λ X − 1 A X=X \Lambda \quad \quad \quad A=X \Lambda X^{-1} AX=XΛA=XΛX1
        其中 X X X x 1 , … , x n ( 列 向 量 ) \boldsymbol{x}_{1}, \ldots, \boldsymbol{x}_{n}\left(\right. 列向量) x1,,xn()构成的矩阵, Λ = diag ⁡ ( λ 1 , … , λ n ) \Lambda=\operatorname{diag}\left(\lambda_{1}, \ldots, \lambda_{n}\right) Λ=diag(λ1,,λn)。即使固定 Λ \Lambda Λ X X X也不唯一。

        更为特殊的是,当矩阵 A A A是一个对称矩阵时,则存在一个对称对角化分解,即
A = X Λ X T A=X \Lambda X^{T} A=XΛXT
        其中, X X X的每一列都是相互正交的特征向量,且是单位向量, Λ \Lambda Λ对角线上的元素是从大到小排列的特征值。

        注意到要进行特征分解,矩阵 A A A必须为方阵。那么如果 A A A不是方阵,即行和列不相同时,我们还可以对矩阵进行分解吗?答案是可以,此时我们的SVD登场了。


2 奇异值分解(SVD)

2.1 引言

        特征值分解是一个提取矩阵特征很不错的方法,但是它只是对方阵而言的,在现实的世界中,我们看到的大部分矩阵都不是方阵,比如说有 m m m个学生,每个学生有 n n n科成绩,这样形成的一个 m × n m\times n m×n的矩阵就不可能是方阵,我们怎样才能描述这样普通的矩阵呢的重要特征呢?奇异值分解可以用来干这个事情,奇异值分解是一个能适用于任意的矩阵的一种分解的方法:
A = U Σ V T A = U\Sigma V^T A=UΣVT

        假设 A A A是一个 m × n m\times n m×n的矩阵,那么得到的 U U U是一个 m × m m\times m m×m的方阵(里面的向量是正交的, U U U里面的向量称为左奇异向量), Σ \Sigma Σ是一个 m × n m\times n m×n的矩阵(除了对角线的元素都是0,对角线上的元素称为奇异值), V T V^T VT(V的转置)是一个 n × m n\times m n×m的矩阵,里面的向量也是正交的, V V V里面的向量称为右奇异向量),从图片来反映几个相乘的矩阵的大小可得下面的图片

        那么奇异值和特征值是怎么对应起来的呢?首先,我们将将A的转置和A做矩阵乘法,将会得到一个方阵,我们用这个方阵求特征值可以得到:
( A T A ) v i = λ i v i (A^TA)v_i = \lambda_i v_i (ATA)vi=λivi

        这样我们就可以得到矩阵 A T A A^TA ATA n n n个特征值和对应的 n n n个特征向量 v v v了。将 A T A A^TA ATA的所有特征向量张成一个 n × n n\times n n×n的矩阵 V V V,就是我们SVD公式里面的 V V V矩阵了。

        如果我们将 A A A A A A的转置做矩阵乘法,那么会得到 m × m m\times m m×m的一个方阵 A A T AA^T AAT。既然 A A T AA^T AAT是方阵,那么我们就可以进行特征分解,得到的特征值和特征向量满足下式:
( A A T ) u i = λ i u i (AA^T)u_i = \lambda_i u_i (AAT)ui=λiui

        这样我们就可以得到矩阵 A A T AA^T AAT m m m个特征值和对应的 m m m个特征向量 u u u了。将 A A T AA^T AAT的所有特征向量张成一个 m × m m\times m m×m的矩阵 U U U,就是我们SVD公式里面的 U U U矩阵了。

         U U U V V V我们都求出来了,现在就剩下奇异值矩阵 Σ \Sigma Σ没有求出了。由于 Σ \Sigma Σ除了对角线上是奇异值其他位置都是0,那我们只需要求出每个奇异值 σ \sigma σ就可以了。

        我们注意到:
A = U Σ V T ⇒ A V = U Σ V T V ⇒ A V = U Σ ⇒ A v i = σ i u i ⇒ σ i = A v i / u i A=U\Sigma V^T \Rightarrow AV=U\Sigma V^TV \Rightarrow AV=U\Sigma \Rightarrow Av_i = \sigma_i u_i \Rightarrow \sigma_i = Av_i / u_i A=UΣVTAV=UΣVTVAV=UΣAvi=σiuiσi=Avi/ui

        进一步我们还可以看出我们的特征值矩阵等于奇异值矩阵的平方,也就是说特征值和奇异值满足如下关系:
σ i = λ i \sigma_i = \sqrt{\lambda_i} σi=λi

        这里的 σ \sigma σ就是上面说的奇异值,u就是上面说的左奇异向量。奇异值 σ \sigma σ跟特征值类似,在矩阵 Σ \Sigma Σ中也是从大到小排列,而且 σ \sigma σ的减少特别的快,在很多情况下,前10%甚至1%的奇异值的和就占了全部的奇异值之和的99%以上了。也就是说,我们也可以用前 r r r大的奇异值来近似描述矩阵,这里定义一下部分奇异值分解:
A m × n ≈ U m × r Σ r × r V r × n T A_{m\times n} \approx U_{m\times r}\Sigma_{r\times r}V_{r\times n}^T Am×nUm×rΣr×rVr×nT

         r r r是一个远小于 m 、 n m、n mn的数,这样矩阵的乘法看起来像是下面的样子:

        右边的三个矩阵相乘的结果将会是一个接近于 A A A的矩阵,在这儿, r r r越接近于 n n n,则相乘的结果越接近于 A A A。而这三个矩阵的面积之和(在存储观点来说,矩阵面积越小,存储量就越小)要远远小于原始的矩阵 A A A,我们如果想要压缩空间来表示原矩阵 A A A,我们存下这里的三个矩阵: U 、 Σ 、 V U、\Sigma、V UΣV就好了。

2.2 定义

        将一个非零的 m × n m\times n m×n实矩阵 A , A ∈ R m × n A,A\in R^{m\times n} A,ARm×n,表示为如下三个实矩阵的乘积形式的运算,即进行矩阵的因子分解:

A = U Σ V T A=U\Sigma V^T A=UΣVT

        其中, U U U m m m阶正交矩阵, V V V n n n阶正交矩阵, Σ \Sigma Σ是由降序排列的非负对角元素组成的 m × n m\times n m×n矩形对角矩阵,用符号描述如下:

U U T = I , V V T = I Σ = d i a g ( σ 1 , σ 2 , . . . , σ p ) , σ 1 ≥ σ 2 ≥ ⋯ ≥ σ p ≥ 0 , p = m i n ( m , n ) UU^T=I,VV^T=I\\ \Sigma=diag(\sigma_1,\sigma_2,...,\sigma_p),\sigma_1\geq\sigma_2\geq\cdots\geq\sigma_p\geq 0,p=min(m,n) UUT=I,VVT=IΣ=diag(σ1,σ2,...,σp),σ1σ2σp0,p=min(m,n)

2.3 构造性的证明

1. 求 Σ , V \Sigma,V Σ,V
        由于 A A A m × n m\times n m×n阶的矩阵,所以 A T A A^TA ATA是一个 n × n n\times n n×n实对称矩阵,故可以对其做正交分解使得:

V T ( A T A ) V = Λ V^T(A^TA)V=\Lambda VT(ATA)V=Λ

        其中, V V V为n阶正交实矩阵, Λ \Lambda Λ n n n阶对角阵,其对角线元素由 A T A A^TA ATA的特征值构成,且这些特征值非负,下面简单说明,假设 λ \lambda λ A T A A^TA ATA的一个特征值, x x x是对应的特征向量,那么

∣ ∣ A x ∣ ∣ 2 = x T A T A x = λ x T x = λ ∣ ∣ x ∣ ∣ 2 ||Ax||^2=x^TA^TAx=\lambda x^Tx=\lambda ||x||^2 Ax2=xTATAx=λxTx=λx2

        所以:

λ = ∣ ∣ A x ∣ ∣ 2 ∣ ∣ x ∣ ∣ 2 > 0 \lambda=\frac{||Ax||^2}{||x||^2}>0 λ=x2Ax2>0

        我们可以通过调整正交矩阵 V V V的排列损失使得对应的特征值形成降序排列:

λ 1 ≥ λ 2 ≥ ⋯ ≥ λ p ≥ 0 \lambda_1\geq\lambda_2\geq \cdots \geq\lambda_p\geq 0 λ1λ2λp0

        接着计算奇异值:

σ j = λ j , j = 1 , 2 , . . . , p \sigma_j=\sqrt{\lambda_j},j=1,2,...,p σj=λj ,j=1,2,...,p

        假设 A A A的秩为 r r r,则 A T A A^TA ATA的秩也为r,所以有:

λ 1 ≥ λ 2 ≥ ⋯ ≥ λ r > 0 , λ r + 1 = λ r + 2 = ⋯ = λ p = 0 \lambda_1\geq\lambda_2\geq \cdots \geq\lambda_r> 0,\lambda_{r+1}=\lambda_{r+2}=\cdots=\lambda_p=0 λ1λ2λr>0,λr+1=λr+2==λp=0

        相应的,我们令:

V 1 = [ v 1 , . . . , v r ] , V 2 = [ v r + 1 , . . . , v p ] V_1=[v_1,...,v_r],V_2=[v_{r+1},...,v_p] V1=[v1,...,vr],V2=[vr+1,...,vp]

        则:

V = [ V 1   V 2 ] V=[V_1\ V_2] V=[V1 V2]

        同样地,我们令:

Σ 1 = d i a g ( σ 1 , . . . , σ r ) \Sigma_1=diag(\sigma_1,...,\sigma_r) Σ1=diag(σ1,...,σr)

        对其余部分填充0,使得:

Σ = [ Σ 1 0 0 0 ] \Sigma=\begin{bmatrix} \Sigma_1 & 0\\ 0 & 0 \end{bmatrix} Σ=[Σ1000]

2. 求 U U U

        接下来构造 m m m阶正交实对称矩阵 U U U,我们令:

u j = 1 σ j A v j , j = 1 , 2 , . . . , r u_j=\frac{1}{\sigma_j}Av_j,j=1,2,...,r uj=σj1Avj,j=1,2,...,r

        令:

U 1 = [ u 1 , . . . , u r ] U_1=[u_1,...,u_r] U1=[u1,...,ur]

        那么,如下关系就可以成立了:

A V 1 = U 1 Σ 1 AV_1=U_1\Sigma_1 AV1=U1Σ1

        接下来,再为 U 1 U_1 U1扩充 m − r m-r mr个标准正交向量,令 [ u r + 1 , . . . , u m ] [u_{r+1},...,u_m] [ur+1,...,um] N ( A T ) N(A^T) N(AT)的一组正交基,并令:

U 2 = [ u r + 1 , . . . , u m ] U = [ U 1   U 2 ] U_2=[u_{r+1},...,u_m]\\ U=[U_1\ U_2] U2=[ur+1,...,um]U=[U1 U2]

        所以:

U Σ V T = [ U 1 U 2 ] [ Σ 1 0 0 0 ] [ V 1 T V 2 T ] = U 1 Σ 1 V 1 T = A V 1 V 1 T = A U\Sigma V^T=\begin{bmatrix} U_1 & U_2 \end{bmatrix} \begin{bmatrix} \Sigma_1 & 0\\ 0 & 0 \end{bmatrix} \begin{bmatrix} V_1^T\\ V_2^T \end{bmatrix}=U_1\Sigma_1V_1^T=AV_1V_1^T=A UΣVT=[U1U2][Σ1000][V1TV2T]=U1Σ1V1T=AV1V1T=A

2.4 奇异值分解(SVD)的求法

        第一步:求出 A m × n T A m × n \pmb{A}^T_{m \times n}\pmb{A}_{m \times n} AAAm×nTAAAm×n n n n个特征值 λ 1 , λ 2 , ⋯   , λ r , λ r + 1 = 0 , ⋯   , λ n = 0 \lambda_1,\lambda_2, \cdots,\lambda_r , \lambda_{r+1}=0, \cdots, \lambda_{n} = 0 λ1,λ2,,λr,λr+1=0,,λn=0(并按照从大到小排列)和对应的标准正交的特征向量 v 1 , v 2 , ⋯   , v r , v r + 1 , ⋯   , v n \pmb{v}_1, \pmb{v}_2, \cdots,\pmb{v}_r,\pmb{v}_{r+1}, \cdots, \pmb{v}_{n} vvv1,vvv2,,vvvr,vvvr+1,,vvvn

        第二步:取标准正交的特征向量构成正交矩阵
V n × n = ( v 1 , v 2 , ⋯   , v r , v r + 1 , ⋯   , v n ) n × n \pmb{V}_{n \times n}=(\pmb{v}_1, \pmb{v}_2, \cdots,\pmb{v}_r,\pmb{v}_{r+1}, \cdots, \pmb{v}_{n})_{n \times n} VVVn×n=(vvv1,vvv2,,vvvr,vvvr+1,,vvvn)n×n

        取正奇异值,即前 r r r个奇异值,即非零特征值开根号 λ 1 , λ 2 , ⋯   , λ r \sqrt{\lambda_1}, \sqrt{\lambda_2}, \cdots,\sqrt{\lambda_r} λ1 ,λ2 ,,λr ,构成对角矩阵
D r × r = ( λ 1 λ 2 ⋱ λ r ) r × r \pmb{D}_{r \times r} = \begin{pmatrix} \sqrt{\lambda_1} \\ & \sqrt{\lambda_2} \\ & & \ddots \\ & & & \sqrt{\lambda_r} \end{pmatrix}_{r \times r} DDDr×r=λ1 λ2 λr r×r

        添加额外的0组成 m × n m\times n m×n的矩阵
Σ m × n = ( D r × r 0 0 0 ) m × n = ( λ 1 λ 2 0 ⋱ λ r 0 0 ) m × n \pmb{\Sigma}_{m \times n} = \begin{pmatrix} \pmb{D}_{r \times r} & \pmb{0} \\ \pmb{0} & \pmb{0} \end{pmatrix}_{m \times n} = \begin{pmatrix} \sqrt{\lambda_1} \\ & \sqrt{\lambda_2} & & & {\pmb{0}} \\ & & \ddots \\ & & & \sqrt{\lambda_r} \\ & {\pmb{0}} & & &{\pmb{0}} \end{pmatrix}_{m \times n} ΣΣΣm×n=(DDDr×r000000000)m×n=λ1 λ2 000λr 000000m×n

        第三步:构成前 r r r个标准正交向量 u 1 , u 2 , ⋯   , u r \pmb{u}_1, \pmb{u}_2, \cdots,\pmb{u}_r uuu1,uuu2,,uuur,其中 u i = 1 λ i A v i , i = 1 , 2 , ⋯   , r \pmb{u}_{i} = \frac{1}{\sqrt{\lambda_i}}\pmb{A}\pmb{v}_i\quad, i = 1, 2, \cdots,r uuui=λi 1AAAvvvi,i=1,2,,r

        第四步:将 u 1 , u 2 , ⋯   , u r \pmb{u}_1, \pmb{u}_2, \cdots,\pmb{u}_r uuu1,uuu2,,uuur扩充为 m m m维向量空间 R m \mathbb{R}^m Rm的标准正交基 u 1 , u 2 , ⋯   , u r , b 1 , ⋯   , b m − r \pmb{u}_1, \pmb{u}_2, \cdots,\pmb{u}_r, \pmb{b}_{1}, \cdots,\pmb{b}_{m-r} uuu1,uuu2,,uuur,bbb1,,bbbmr,组成正交矩阵
U m × m = ( u 1 , u 2 , ⋯   , u r , b 1 , ⋯   , b m − r ) m × m \pmb{U}_{m \times m} = (\pmb{u}_1, \pmb{u}_2, \cdots,\pmb{u}_r, \pmb{b}_{1}, \cdots,\pmb{b}_{m-r})_{ m \times m} UUUm×m=(uuu1,uuu2,,uuur,bbb1,,bbbmr)m×m

        第五步:写出即可:
A m × n = U m × m Σ m × n V n × n T = U m × m ( λ 1 λ 2 0 ⋱ λ r 0 0 ) m × n V n × n T \pmb{A}_{m \times n} =\pmb{U}_{m \times m} \pmb{\Sigma}_{ m \times n} \pmb{V}^T_{n \times n} = \pmb{U}_{m \times m} \begin{pmatrix} \sqrt{\lambda_1} \\ & \sqrt{\lambda_2} & & & {\pmb{0}} \\ & & \ddots \\ & & & \sqrt{\lambda_r} \\ & {\pmb{0}} & & &{\pmb{0}} \end{pmatrix}_{m \times n} \pmb{V}^T_{n \times n} AAAm×n=UUUm×mΣΣΣm×nVVVn×nT=UUUm×mλ1 λ2 000λr 000000m×nVVVn×nT

2.5 紧奇异值分解

        上面第二节的分解方式称为完全奇异分解,大家可以发现,如果 r < p r<p r<p,我们完全没有必要对 U 1 U_1 U1以及 V 1 V_1 V1进行扩充,因为通过 U 1 , Σ 1 , V 1 U_1,\Sigma_1,V_1 U1,Σ1,V1就可以无损还原 A A A,即:

A = U 1 Σ 1 V 1 T A=U_1\Sigma_1V_1^T A=U1Σ1V1T

        这便是紧奇异分解。

2.6 截断奇异值分解

        另外,我们也可以只取最大的 k k k个奇异值( k < r k<r k<r)对应的部分去近似 A A A,这便是截断奇异值分解,即:

A ≈ U k Σ k V k T A \approx U_k\Sigma_kV_k^T AUkΣkVkT

        这里, U k U_k Uk是一个 m × k m\times k m×k的矩阵,由 U U U的前 k k k列得到, V k V_k Vk n × k n\times k n×k矩阵,由 V V V的前 k k k列得到, Σ k \Sigma_k Σk k k k阶对角矩阵,由 Σ \Sigma Σ的前 k k k k k k列得到。

        矩阵 A = [ a i j ] m × n A = [ a _ { i j } ] _ { m \times n } A=[aij]m×n的弗罗贝尼乌斯范数定义为
∥ A ∥ F = ( ∑ i = 1 m ∑ j = 1 n ( a i j ) 2 ) 1 2 \| A \| _ { F } = ( \sum _ { i = 1 } ^ { m } \sum _ { j = 1 } ^ { n } ( a _ { i j } ) ^ { 2 } ) ^ { \frac { 1 } { 2 } } AF=(i=1mj=1n(aij)2)21

        在秩不超过 k k k m × n m \times n m×n矩阵的集合中,存在矩阵 A A A的弗罗贝尼乌斯范数意义下的最优近似矩阵 X X X。秩为 k k k的截断奇异值分解得到的矩阵 A k A_k Ak能够达到这个最优值。奇异值分解是弗罗贝尼乌斯范数意义下,也就是平方损失意义下的矩阵最优近似。详细了解,请阅读:奇异值分解的低秩逼近

2.7 案例分析

        SVD的Python实现:

# 实现奇异值分解, 输入一个numpy矩阵,输出 U, sigma, V
# https://zhuanlan.zhihu.com/p/54693391

import numpy as np


#基于矩阵分解的结果,复原矩阵
def rebuildMatrix(U, sigma, V):
    a = np.dot(U, sigma)
    a = np.dot(a, np.transpose(V))
    return a


#基于特征值的大小,对特征值以及特征向量进行排序。倒序排列
def sortByEigenValue(Eigenvalues, EigenVectors):
    index = np.argsort(-1 * Eigenvalues)
    Eigenvalues = Eigenvalues[index]
    EigenVectors = EigenVectors[:, index]
    return Eigenvalues, EigenVectors


#对一个矩阵进行奇异值分解
def SVD(matrixA, NumOfLeft=None):
    #NumOfLeft是要保留的奇异值的个数,也就是中间那个方阵的宽度
    #首先求transpose(A)*A
    matrixAT_matrixA = np.dot(np.transpose(matrixA), matrixA)
    #然后求右奇异向量
    lambda_V, X_V = np.linalg.eig(matrixAT_matrixA)
    lambda_V, X_V = sortByEigenValue(lambda_V, X_V)
    #求奇异值
    sigmas = lambda_V
    sigmas = list(map(lambda x: np.sqrt(x)
                      if x > 0 else 0, sigmas))  #python里很小的数有时候是负数
    sigmas = np.array(sigmas)
    sigmasMatrix = np.diag(sigmas)
    if NumOfLeft == None:
        rankOfSigmasMatrix = len(list(filter(lambda x: x > 0,
                                             sigmas)))  #大于0的特征值的个数
    else:
        rankOfSigmasMatrix = NumOfLeft
    sigmasMatrix = sigmasMatrix[0:rankOfSigmasMatrix, :]  #特征值为0的奇异值就不要了

    #计算右奇异向量
    X_U = np.zeros(
        (matrixA.shape[0], rankOfSigmasMatrix))  #初始化一个右奇异向量矩阵,这里直接进行裁剪
    for i in range(rankOfSigmasMatrix):
        X_U[:, i] = np.transpose(np.dot(matrixA, X_V[:, i]) / sigmas[i])

    #对右奇异向量和奇异值矩阵进行裁剪
    X_V = X_V[:, 0:NumOfLeft]
    sigmasMatrix = sigmasMatrix[0:rankOfSigmasMatrix, 0:rankOfSigmasMatrix]
    #print(rebuildMatrix(X_U, sigmasMatrix, X_V))

    return X_U, sigmasMatrix, X_V

        下面是SVD进图像进行压缩的实践:

import numpy as np
import matplotlib.pyplot as plt

plt.figure(figsize=(18, 4))
im = plt.imread("./demo.jpg")
ks = [800, 500, 200, 100, 50, 10, 5]        # 分别截取不同的 k
for idx, k in enumerate(ks):
    svd_image = []
    for ch in range(3):                     # 注意,有RGB三个维度,每个维度对应一个矩阵做SVD分解
        im_ch = im[:, :, ch]
        U, D, VT = np.linalg.svd(im_ch)
        imx = np.matmul(np.matmul(U[:, :k], np.diag(D[:k])), VT[:k, :])
        # 将像素值约束到合理范围
        imx = np.where(imx<0, 0, imx)
        imx = np.where(imx>255, 255, imx)
        svd_image.append(imx.astype('uint8'))
    img = np.stack((svd_image[0], svd_image[1], svd_image[2]), 2)
    plt.subplot(1, len(ks), idx+1)
    plt.imshow(img)
    plt.axis('off')
    plt.title("k="+str(k))

小结

  1. 任意一个 m × n m \times n m×n 矩阵,都可以表示为三个矩阵的乘积(因子分解)形式,分别是 m m m正交矩阵,由降序排列的非负的对角线元素组成的 m m m x n n n 矩形对角矩阵,和 n n n正交矩阵,称为该矩阵的奇异值分解。矩阵的奇异值分解一定存在,但不唯一。
  2. 奇异值分解可以看作是矩阵数据压缩的一种方法,即用因子分解的方式近似地表示原始矩阵,这种近似是在平方损失意义下的最优近似。
  3. 奇异值分解有明确的几何解释。奇异值分解对应三个连续的线性变换:一个旋转变换,一个缩放变换和另一个旋转变换第一个和第三个旋转变换分别基于空间的标准正交基进行。
  4. 奇异值分解包括紧奇异值分解和截断奇异值分解。紧奇异值分解是与原始矩阵等秩的奇异值分解,截断奇异值分解是比原始矩阵低秩的奇异值分解。

参考

  • 机器学习中的数学(5)-强大的矩阵奇异值分解(SVD)及其应用:https://www.cnblogs.com/LeftNotEasy/archive/2011/01/19/svd-and-applications.html
  • 奇异值分解(SVD)的定义、证明、求法(矩阵分解——3. 奇异值分解(SVD)):https://zhuanlan.zhihu.com/p/399547902
  • 奇异值分解的揭秘(一):矩阵的奇异值分解过程:https://zhuanlan.zhihu.com/p/26306568
  • 奇异值分解(SVD)原理与在降维中的应用:https://www.cnblogs.com/pinard/p/6251584.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/64983.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于jsp+ssm的家庭理财系统

项目介绍 在这科技不断的进步&#xff0c;让我们的生活改变了很多&#xff0c;信息技术的迅速发展&#xff0c;使各种行业在信息技术应用方面变得非常普遍。信息时代的到来&#xff0c;已成为一种必然趋势。本系统的标题是基于B/S模式的家庭理财系统的设计开发&#xff0c;其目…

公钥密码(非对称加密)

实例 投币寄物柜是这样使用的&#xff1a; 首先&#xff0c;将物品放人寄物柜中。然后&#xff0c;投入硬币并拔出钥匙&#xff0c;就可以将寄物柜关闭了。关闭后的寄物柜&#xff0c;没有钥匙是无法打开的。只要有硬币&#xff0c;任何人都可以关闭寄物柜&#xff0c;但寄物…

Locust学习记录2-locust用户类属性【HttpUser,wait_time,weight和fixed_count】

HttpUser 每个模拟用户定义的类&#xff0c;都必须继承HttpUser&#xff0c;目的时为每个用户提供一个client属性&#xff0c;该属性是一个实例HttpSession&#xff0c;可用于向我们要进行负载测试的目标系统发出HTTP请求 当测试开始时&#xff0c;locust将为它模拟的每个用户…

vue项目分环境打包的具体步骤 --- 区分测试环境与线上环境的打包引用路径

第一步&#xff1a; 安装cross-env npm install --save-dev cross-env 运行跨平台设置和使用环境变量的脚本 第二步&#xff1a;修改package.json 在package.json 里设置打包命令 --- 主要是基于使用vue-cli创建的项目&#xff0c;配置文件基于 NODE_ENVproduction 去处…

图文多模态模型CLIP

前言 CLIP带给我的震撼是超过transformer的&#xff0c;这是OpenAI的重要贡献之一。就如官网所描述的&#xff1a; CLIP: Connecting Text and Images 用对比学习&#xff08;Contrastive Learning&#xff09;来对齐约束图像模型和文本模型。用文本嵌入指导图像学习&#xff…

C++11特性-其他特性

1.字符串的原始字面量 表达式&#xff1a;R"xxx&#xff08;原始字符串&#xff09;xxx"或者R"(原始字符串)"&#xff0c;xxx要写的话&#xff0c;必须一样 //两种申明形式string a "aaa";//没有转义的时候就是原始字面量string b R"aaa(…

Ansible最佳实践之 AWX 作业创建和启动

写在前面 分享一些 AWX 作业创建和启动的笔记博文内容涉及&#xff1a; 创建作业模板涉及相关参数&#xff0c;作业模板角色配置介绍运行作业模板并测试的Demo 食用方式&#xff1a; 需要了解 Ansible理解不足小伙伴帮忙指正 傍晚时分&#xff0c;你坐在屋檐下&#xff0c;看着…

Js逆向教程20-Hook基础

Js逆向教程19-Hook基础 一、jshook Hook就是在这些流程任意环节插入自己的代码&#xff0c;让浏览器先执行自己的代码 然后再执行原本网站的 hook在以下流程中可以做的事情&#xff1a; 1.1 html流程 联机服务器&#xff1a;获取ip地址&#xff0c;ws获取参数拿回资源&…

IntelliJ IDEA 2022.3正式发布,配置云同步支持Redis好用到炸

本文已被https://yourbatman.cn收录&#xff1b;女娲Knife-Initializr工程可公开访问啦&#xff1b;程序员专用网盘https://wangpan.yourbatman.cn&#xff1b;技术专栏源代码大本营&#xff1a;https://github.com/yourbatman/tech-column-learning&#xff1b;公号后台回复“…

【iOS】AFNetworking

AFNetworking是MAC/iOS为了简化网络操作设计的一套网络框架&#xff0c;专注与网络数据传输 &#xff0c;以及网络中多线程的处理&#xff0c;只需要简单几步就可以完成网络请求任务。 小说明 ANF的特性&#xff1a; 登录传参数时 , 传递 字典 即可 .( 键名为参数名 , 键值为…

【网络层】IP组播(多播)、硬件组播、IGMP、组播路由选择协议、移动IP、路由器详解、路由表和路由转发

注&#xff1a;最后有面试挑战&#xff0c;看看自己掌握了吗 文章目录IP多播----只给有相同需求的路由器传信息以看视频为例-----组播路由器支持--------运行组播协议的路由器IP组播地址------多播组的设备都有一个组播组IP地址---------一群共同需求主机的相同标识-------看直…

数据安全事故频发以及防范措施

误删除事故 最近在和IT群友的聊天中得知&#xff0c;一个小伙因为看错了一个语句&#xff0c;直接将生产数据库中所有数据全部删除了&#xff0c;并且该库在设计的时候虽然做了备份&#xff0c;但在运行过程中因某些原因把备份关闭了。 传统数据运维模式 受到科技制裁的原…

opencv c++ 霍夫直线检测

目的&#xff1a;在进行图像边缘提取后&#xff0c;将数据从平面坐标转换到极坐标空间&#xff0c;即完成了直线的信息提取。 1、原理 平面坐标系&#xff1a;通过之间的斜率k和截距b来确定一条直线。y kxb 极坐标系&#xff1a;通过半径r、角度θ来确定一条直线。r xcosθ …

计算机毕业设计基于Springboot+vue口腔牙科诊所管理系统

项目介绍 口腔卫生是关系民生的一个重要问题。口腔健康会直接影响全身的健康&#xff0c;口腔基本常见的有龋齿&#xff0c;牙周炎等问题&#xff0c;而且人类的牙齿只有2次更换周期&#xff0c;一旦牙齿彻底完成更换终生将不再更换&#xff0c;所以越来越多的人开始关系口腔问…

C++中的多态和虚函数及多态原理

定义 多态&#xff1a;事物的一种形态&#xff0c;在不同的子类中表现为多种形态&#xff0c;就称为多态&#xff1b; 分类 多态分为静态和动态多态 静态多态包括运算符重载和函数重载&#xff0c;复用函数名&#xff1b; 动态多态包括虚函数派生类&#xff1b; 区别&…

【Flask框架】——03 应用程序的参数加载

目录1.从配置对象中加载2.从配置文件中加载3.从环境变量中加载4.从Pycharm中的运行时设置环境变量的方式加载5.企业项目开发常用的方式应用程序配置参数设置的是一个Web应用工程的相关信息&#xff0c;比如&#xff1a; 数据库的连接信息 日志的配置信息 自定义的配置信息 ……

【苹果家庭推源码】利用新的Alloc Replication方法建立一个对象

推荐内容IMESSGAE相关 作者推荐内容iMessage苹果推软件 *** 点击即可查看作者要求内容信息作者推荐内容1.家庭推内容 *** 点击即可查看作者要求内容信息作者推荐内容2.相册推 *** 点击即可查看作者要求内容信息作者推荐内容3.日历推 *** 点击即可查看作者要求内容信息作者推荐…

[Database] 脏读、幻读这些都是什么?事务隔离级别又是什么?MySQL数据库的事务隔离级别都有哪些?

文章目录前言事务隔离级别三种数据不一致问题1. 脏读2. 不可重复读3. 幻读不可重复读 vs 幻读四种事务隔离级别1. READ UNCOMMITTED2. READ COMMITTED3. REPEATABLE READ4. SERIALIZABLE不同事务隔离级别会面临的问题不同隔离事务级别的使用率排名实战查看事务隔离级别更改事务…

linux篇【11】:计算机网络—网络基础

目录 一.网络基础 1.认识 "协议" 2.协议分层 &#xff08;1&#xff09;软件分层 &#xff08;2&#xff09;协议分层 3.OSI七层模型 4.TCP/IP五层(或四层)模型 5.网络和操作系统之间的关系 6.数据包的封装(封包)和解包&#xff0c;分用 &#xff08;1&…

四、文件管理(一)文件系统基础

目录 1.1文件的基本概念 1.2文件控制块和索引结点 1.3文件的操作 1.4文件保护 1.5文件的逻辑结构 1.5.1无结构文件&#xff08;流式文件&#xff09; 1.5.2有结构文件&#xff08;记录式文件&#xff09; 1.5.2.1顺序文件 1.5.2.2索引文件 1.5.2.3索引顺序文件 1.5…