数据科学、数据分析、人工智能必备知识汇总-----线性代数进阶-----持续更新

数据科学、数据分析、人工智能必备知识汇总-----主目录-----持续更新(进不去说明我没写完):https://blog.csdn.net/grd_java/article/details/140174015

1. 二次型

学二次型,很大原因是为了求Hessian矩阵

二次型就是纯二次项构成的一个函数。因为二次函数(方程)的二次部分最重要,为了方便研究,我们把含有n个变量的二次齐次函数: f ( x 1 , x 2 , ⋯   , x n ) = a 11 x 1 2 + a 22 x 2 2 + ⋯ + a n n x n 2 + 2 a 12 x 1 x 2 + 2 a 13 x 1 x 3 + ⋯ + 2 a n − 1 , n x n − 1 x n f(x_1,x_2,\cdots,x_n) = a_{11}x_1^2+a_{22}x_2^2+\cdots+a_{nn}x_n^2+2a_{12}x_1x_2+2a_{13}x_1x_3+\cdots+2a_{n-1,n}x_{n-1}x_n f(x1,x2,,xn)=a11x12+a22x22++annxn2+2a12x1x2+2a13x1x3++2an1,nxn1xn称为二次型


二次型就是一个数,就是一个向量 x x x和一个矩阵 A A A相乘的结果。就是上面这个式子,也是一种表现形式


在这里插入图片描述

二次型的矩阵表示及其秩


f ( x ) = x T A x f(x) = x^TAx f(x)=xTAx,其中 A = A T A=A^T A=AT. A A A的秩称为二次型 f f f的秩。但要注意,若A不是实对称,需要化为实对称后,才能用这个求秩


[ x 1 ⋯ ⋯ x n ] \begin{bmatrix}x_1 & \cdots &\cdots &x_n\end{bmatrix} [x1xn] [ a 11 a 12 ⋯ a 1 n a 21 a 22 ⋯ a 2 n ⋯ ⋯ ⋯ ⋯ a n 1 a n 2 ⋯ a n n ] \begin{bmatrix} a_{11} & a_{12} & \cdots &a_{1n}\\\\ a_{21} & a_{22} & \cdots &a_{2n}\\\\ \cdots & \cdots & \cdots &\cdots\\\\ a_{n1} & a_{n2} & \cdots &a_{nn} \end{bmatrix} a11a21an1a12a22an2a1na2nann [ x 1 ⋮ ⋮ x n ] \begin{bmatrix}x_1 \\ \vdots \\ \vdots \\ x_n\end{bmatrix} x1xn


举个例子


在这里插入图片描述


这是对方阵而言的, a i j a_{ij} aij n n n的平方这么多项,这种形式在机器学习中会见到


比如是一次型的: f ( x ; w ) = w T x + b f(x;w) = w^Tx+b f(x;w)=wTx+b


或者二次型的: f ( x ; w ) = x T w x + b f(x;w) = x^T w x + b f(x;w)=xTwx+b

例如我们遇到的场景的数据分布是一次型的,那我们就可以选择 logistic regression逻辑回归、SVM支持向量机等分界面为一次型的模型


如果场景的数据分布是二次型的,我们可以选择 naive bayes分类模型,朴素贝叶斯法


如果场景的数据分布既不是一次型也不是二次型,那我们可以选择基于决策树的模型,例如 gbdt梯度提升决策树,random forest随机森林等,或者 DNN深度神经网络,这些模型都高度非线性,表达能力极强,理论上可以拟合任意曲线

此时回看 Hessian 矩阵: 对于二次型函数 f ( x ) = x T A x 对于二次型函数f(x) = x^T A x 对于二次型函数f(x)=xTAx


f ( x ) > 0 , x ≠ 0 , x 属于 R , 则 f 为 f(x)>0,x≠0,x属于\R,则f为 f(x)>0,x=0,x属于R,f 正定二次型 , 正定二次型, 正定二次型, A 为正定矩阵 A为正定矩阵 A为正定矩阵


f ( x ) ≥ 0 , x ≠ 0 , x 属于 R , 则 f 为 f(x)≥0,x≠0,x属于\R,则f为 f(x)0,x=0,x属于R,f 半正定二次型 , 半正定二次型, 半正定二次型, A 为半正定矩阵 A为半正定矩阵 A为半正定矩阵


f ( x ) < 0 , x ≠ 0 , x 属于 R , 则 f 为 f(x)<0,x≠0,x属于\R,则f为 f(x)<0,x=0,x属于R,f 负定二次型 , 负定二次型, 负定二次型, A 为负定矩阵 A为负定矩阵 A为负定矩阵


f ( x ) ≤ 0 , x ≠ 0 , x 属于 R , 则 f 为 f(x)≤0,x≠0,x属于\R,则f为 f(x)0,x=0,x属于R,f 半负定二次型 , 半负定二次型, 半负定二次型, A 为半负定矩阵 A为半负定矩阵 A为半负定矩阵


以上条件皆不满足,则A为不定

正定


在这里插入图片描述

半正定


在这里插入图片描述

不定


在这里插入图片描述


在这里插入图片描述

2. 特征值与特征向量

在机器学习中会被用到,像 PCA 主成分分析,LDA 线性判别分析,以及其它算法里面都会用到它的理论和方法

设A是n阶矩阵, λ \lambda λ是一个数,若存在n维非零向量 ξ \xi ξ,使得 A ξ = λ ξ ,且 ξ ≠ 0 A\xi = \lambda \xi,且\xi ≠0 Aξ=λξ,且ξ=0,则称 λ \lambda λ A A A的特征值, ξ \xi ξ A A A的对应与特征值 λ \lambda λ的特征向量


我们已经知道,矩阵和向量的乘法就相当于对该向量做了一个线性变换。在这个变换中,大部分的向量都发生了偏移,脱离了原“轨道”


A ξ = λ ξ A\xi = \lambda \xi Aξ=λξ,表示 矩阵 A 矩阵A 矩阵A ξ \xi ξ做的线性变换,等价于 一个值 λ 一个值\lambda 一个值λ ξ \xi ξ做的线性变换。我们就称 λ \lambda λ A A A的特征值,而 ξ \xi ξ A A A对应与 特征值 λ 特征值\lambda 特征值λ的特征向量


又因为 A ξ = λ ξ A\xi = \lambda \xi Aξ=λξ可以化简为 0 = λ ξ − A ξ = ( λ E − A ) ξ = 0 0 = \lambda\xi - A\xi = (\lambda E - A)\xi = 0 0=λξAξ=(λEA)ξ=0。又因为 ξ ≠ 0 \xi ≠ 0 ξ=0,故 ∣ λ E − A ∣ = 0 |\lambda E - A|=0 λEA=0


特征值并不唯一,可以有多个

( λ E − A ) ξ = 0 (\lambda E - A)\xi = 0 (λEA)ξ=0,这是n个未知数,n个方程的齐次线性方程组,它有非零解的充分必要条件是系数行列式 ∣ λ E − A ∣ = 0 |\lambda E - A|=0 λEA=0


λ 0 是 A 的特征值 ⇔ \lambda_0是A的特征值 \Leftrightarrow λ0A的特征值 ∣ λ E − A ∣ = 0 |\lambda E - A|=0 λEA=0


λ 0 不是 A 的特征值 ⇔ \lambda_0不是A的特征值 \Leftrightarrow λ0不是A的特征值 ∣ λ E − A ∣ ≠ 0 |\lambda E - A|≠0 λEA=0


λ 1 , λ 2 , ⋯   , λ n \lambda_1,\lambda_2,\cdots,\lambda_n λ1,λ2,,λn是A的n个特征值,则 { ∣ A ∣ = λ 1 λ 2 ⋯ λ n t r ( A ) = λ 1 + λ 2 + ⋯ + λ n \begin{cases}|A| =\lambda_1\lambda_2\cdots\lambda_n\\\\tr(A) = \lambda_1+\lambda_2+\cdots+\lambda_n\end{cases} A=λ1λ2λntr(A)=λ1+λ2++λn

A x = λ x Ax=\lambda x Ax=λx,其中 A A A 是一个 n × n n×n n×n 的矩阵, x x x是一个n维向量,则我们说 λ \lambda λ是矩阵 A A A的一个特征值,而 x x x是矩阵 A A A 的特征值 λ \lambda λ所对应的特征向量。


求出特征值和特征向量有什么好处呢? 就是我们可以将矩阵 A A A 特征分解。如果我们求出了矩阵 A A A n n n个特征值 λ 1 ≤ λ 2 ≤ ⋯ ≤ λ n \lambda_1≤\lambda_2≤\cdots≤\lambda_n λ1λ2λn


以及这 n n n个特征值所对应的特征向量 ( w 1 , w 2 , . . . , w n ) (w_1,w_2,...,w_n) (w1,w2,...,wn)


那么矩阵 A A A 就可以用下式的特征分解表示


A = W ∑ W − 1 A=W\sum W^{-1} A=WW1

M M M n x n nxn nxn矩阵,其特征值为 λ 1 , λ 2 , ⋯   , λ n \lambda_1,\lambda_2,\cdots,\lambda_n λ1,λ2,,λn,特征向量为 V 1 , V 2 , . . . , V n V_1,V_2,...,V_n V1,V2,...,Vn,形成线性无关集合,以每个特征向量为列构成矩阵 A A A,如下所示


A = [ V 1 , V 2 , . . . , V n ] A=[V_1,V_2,...,V_n] A=[V1,V2,...,Vn]


矩阵 A A A 可以将矩阵 M M M对角化,乘积矩阵 A − 1 M A A^{-1}MA A1MA 的主对角元素是矩阵 M M M 的特征值(这是个定理,记住就行,证明的话自己百度一下就有):


A − 1 M A = [ λ 1 0 ⋯ 0 0 λ 2 ⋯ 0 ⋮ ⋮ ⋱ ⋮ 0 0 ⋯ λ n ] A^{-1}MA=\begin{bmatrix} \lambda_1 & 0 & \cdots & 0 \\\\ 0 & \lambda_2 & \cdots & 0 \\\\ \vdots & \vdots & \ddots & \vdots \\\\ 0 & 0 & \cdots & \lambda_n \\\\ \end{bmatrix} A1MA= λ1000λ2000λn ,记为 Λ \varLambda Λ


此时等号两边左同乘A得 A A − 1 M A = A Λ AA^{-1}MA=A\varLambda AA1MA=AΛ,因为 Λ \varLambda Λ是一个对角矩阵,所以可以随便移动位置,化简得 E M A = Λ A EMA=\varLambda A EMA=ΛA,又因为单位矩阵 E E E乘以任何矩阵 M M M都为 M M M,可以得到 M A = Λ A MA=\varLambda A MA=ΛA A A A是矩阵 M M M对应特征值 Λ \varLambda Λ的特征向量


反之,如果存在可逆矩阵 A A A,使 A − 1 M A A^{-1}MA A1MA为对角矩阵,则矩阵 A A A的列等于矩阵 M M M的特征向量, A − 1 M A A^{-1}MA A1MA的主对角元素为矩阵 M M M的特征值

通过一个正交变换做到的, P − 1 A P = Λ P^{-1}AP=\varLambda P1AP=Λ


Λ \varLambda Λ是对角矩阵,它就是对角线的值是矩阵所有特征值构成的矩阵


[ λ 1 0 ⋯ 0 0 λ 2 ⋯ 0 ⋮ ⋮ ⋱ ⋮ 0 0 ⋯ λ n ] \begin{bmatrix} \lambda_1 & 0 & \cdots & 0 \\\\ 0 & \lambda_2 & \cdots & 0 \\\\ \vdots & \vdots & \ddots & \vdots \\\\ 0 & 0 & \cdots & \lambda_n \\\\ \end{bmatrix} λ1000λ2000λn

P 是正交矩阵,正交矩阵的定义是P的逆等于P的转置 P − 1 = P T P^{-1}=P^T P1=PT


正交矩阵的性质,是行和列相互之间是正交的,一个向量组 ( x 1 , x 2 , … , x n ) (x_1,x_2,…,x_n) (x1,x2,,xn),其中当 i i i不等于 j j j时, x i x_i xi x j x_j xj内积是 0 0 0。如果 i = j i=j i=j,那么向量内积就是1,其实它就是我们几何里面垂直的概念的抽象


P Λ P − 1 = A P\varLambda P^{-1} = A PΛP1=A


我们可以把一个矩阵拆分成,一个正交阵和 Λ \varLambda Λ还有正交阵的逆的乘积的,这就是我们的特征值分解

3. 多元函数的泰勒展开

一元泰勒展开公式: f ( x ) = f ( x 0 ) + f ′ ( x 0 ) 1 ! ⋅ ( x − x 0 ) 1 + f ′ ′ ( x 0 ) 2 ! ⋅ ( x − x 0 ) 2 + f ′ ′ ′ ( x 0 ) 3 ! ⋅ ( x − x 0 ) 3 + . . . + f n ( x 0 ) n ! ⋅ ( x − x 0 ) n + R N ( 余项 O ( ( x − x 0 ) n ) ) f(x) = f(x_0)+\dfrac{f^{'}({x_0})}{1!}·(x-x_0)^1+\dfrac{f^{''}({x_0})}{2!}·(x-x_0)^2+\dfrac{f^{'''}({x_0})}{3!}·(x-x_0)^3+...+\dfrac{f^{n}({x_0})}{n!}·(x-x_0)^n + RN(余项O((x-x^0)^n)) f(x)=f(x0)+1!f(x0)(xx0)1+2!f′′(x0)(xx0)2+3!f′′′(x0)(xx0)3+...+n!fn(x0)(xx0)n+RN(余项O((xx0)n))

至于多元的,因为我们研究的基本不超过2元,所以只展开2项


f ( x ) = f ( x k ) + [ ∇ f ( x k ) ] T ( x − x k ) + 1 2 [ x − x k ] T H ( x k ) [ x − x k ] + O n f(x) = f({x}_{k})+[\nabla f(x_k)]^T(x-x_k)+\dfrac{1}{2}[x-x_k]^TH(x_k)[x-x_k]+O^{n} f(x)=f(xk)+[f(xk)]T(xxk)+21[xxk]TH(xk)[xxk]+On


其中 H ( x k ) H(x_k) H(xk)就是hessian矩阵 [ ∂ 2 f ( x k ) ∂ x 1 2 ∂ 2 f ( x k ) ∂ x 1 ∂ x 2 ⋯ ∂ 2 f ( x k ) ∂ x 1 ∂ x n ∂ 2 f ( x k ) ∂ x 2 ∂ x 1 ∂ 2 f ( x k ) ∂ x 2 2 ⋯ ∂ 2 f ( x k ) ∂ x 2 ∂ x n ⋯ ⋯ ⋯ ⋯ ∂ 2 f ( x k ) ∂ x n ∂ x 1 ∂ 2 f ( x k ) ∂ x n ∂ x 2 ⋯ ∂ 2 f ( x k ) ∂ x n 2 ] \begin{bmatrix} \dfrac{\partial^2 f(x_k)}{\partial x_1 ^2} & \dfrac{\partial^2 f(x_k)}{\partial x_1 \partial x_2} & \cdots & \dfrac{\partial^2 f(x_k)}{\partial x_1 \partial x_n}\\\\ \dfrac{\partial^2 f(x_k)}{\partial x_2 \partial x_1} & \dfrac{\partial^2 f(x_k)}{\partial x_2^2} & \cdots & \dfrac{\partial^2 f(x_k)}{\partial x_2 \partial x_n}\\\\ \cdots & \cdots & \cdots & \cdots\\\\ \dfrac{\partial^2 f(x_k)}{\partial x_n \partial x_1} & \dfrac{\partial^2 f(x_k)}{\partial x_n \partial x_2} & \cdots & \dfrac{\partial^2 f(x_k)}{\partial x_n^2} \end{bmatrix} x122f(xk)x2x12f(xk)xnx12f(xk)x1x22f(xk)x222f(xk)xnx22f(xk)x1xn2f(xk)x2xn2f(xk)xn22f(xk)


f ( x k ) f(x_k) f(xk)是标量,而且是个常数,零次项


接下来看一次项,注意 ( x − x k ) (x-x_k) xxk是个向量


[ ∇ f ( x k ) ] T ( x − x k ) [\nabla f(x_k)]^T(x-x_k) [f(xk)]T(xxk):是把梯度和 ( x − x k ) (x-x_k) (xxk)做内积


而二次项的内积,自然需要用hessian矩阵,是和 hessian 矩阵做内积


[ x − x k ] T H ( x k ) [ x − x k ] [x-x_k]^TH(x_k)[x-x_k] [xxk]TH(xk)[xxk],不就是前面二次型吗, x T A x ⇒ a x 2 x^TAx\Rightarrow ax^2 xTAxax2

知道公式就行了,后面我们在推导梯度下降法,牛顿法,还有拟牛顿法的时候都会用到,到时候自然会加深理解

4. 矩阵和向量的求导公式

知道这些常用的即可,推导机器学习公式会用到

∇ w T x = w \nabla w^T x = w wTx=w


证明如下:


{ w T x = ∑ i = 1 n w i x i 不断对 x i 依次求偏导,因为每个 x i 都是一次的,求导为 1 ,最终得到的就是 w i 所以对 x 求偏导最终结果就是 w \begin{cases} w^T x = \displaystyle\sum_{i=1}^n w_i x_i\\\\ 不断对x_i依次求偏导,因为每个x_i都是一次的,求导为1,最终得到的就是w_i\\\\ 所以对x求偏导最终结果就是w \end{cases} wTx=i=1nwixi不断对xi依次求偏导,因为每个xi都是一次的,求导为1,最终得到的就是wi所以对x求偏导最终结果就是w

  1. ∂ A B ∂ B = A T \dfrac{\partial AB}{\partial B} = A^T BAB=AT:对两个相乘向量形式的其中一个向量求偏导(偏导对象非转置),为非偏导对象的转置
  2. ∂ A T B A = B \dfrac{\partial A^TB}{A}=B AATB=B:对两个相乘向量形式的其中一个向量求偏导,如果形式中偏导对象是转置形式给出的,结果是非偏导对象(不是转置)
  3. ∂ X T A X ∂ X = 2 A X \dfrac{\partial X^T A X}{\partial X}=2AX XXTAX=2AX A A A是对称矩阵时才成立,如果不是对称矩阵,可以看下面的推导

另外,假设有一个矩阵A, A T A A^TA ATA本身就是对称的,这是定理,一个矩阵乘以自己的转置,结果为一个对称矩阵

∇ x T A x = ( A + A T ) x \nabla x^TAx = (A+A^T)x xTAx=(A+AT)x


二阶导就是再一次对 x x x求导


∇ 2 x T A x = A + A T \nabla^2x^TAx = A+A^T 2xTAx=A+AT

5. 奇异值(SVD)分解

分解就是对角化

A = U ∑ V T A=U\sum V^T A=UVT


前面的知识表明了一件事,对一个n阶方阵而言,可以进行分解(对角化,在特征值和特征向量介绍过)。但如果 A不是一个方阵,这种分解(对角化 A = P Λ P − 1 A=P\varLambda P^{-1} A=PΛP1)将是无效的


奇异值分解比较神奇,可以应用于任意形状矩阵,如果 A A A是一个 m ∗ n m*n mn 的矩阵,它一样可以分解成为三个矩阵的乘积 U , V 和 ∑ U,V和\sum U,V


其中 U 和 V U和V UV 都是正交矩阵, ∑ \sum 是对角矩阵,注意这里 ∑ ∑ 并不是一个方阵,而是 m ∗ n m*n mn 的矩阵


[ λ 1 0 ⋯ 0 0 λ 2 ⋯ 0 ⋮ ⋮ ⋱ ⋮ 0 0 ⋯ λ n ] \begin{bmatrix} \lambda_1 & 0 & \cdots & 0 \\\\ 0 & \lambda_2 & \cdots & 0 \\\\ \vdots & \vdots & \ddots & \vdots \\\\ 0 & 0 & \cdots & \lambda_n \\\\ \end{bmatrix} λ1000λ2000λn

SVD 也是对矩阵进行分解(对角化),但是和特征分解不同,SVD 并不要求要分解的矩阵为方阵。


假设我们的矩阵 A A A 是一个 m × n m×n m×n的矩阵,那么我们定义矩阵 A A A S V D SVD SVD为: A = U ∑ V T A=U\sum V^T A=UVT


U U U A A T AA^T AAT的正交化特征向量所构成的矩阵,所以是 m ∗ m m*m mm的矩阵(对称的)


V V V A T A A^TA ATA(注意 A T A^T AT的位置,和 U U U是反过来的)的正交化特征向量所构成的矩阵,是 n ∗ n n*n nn的矩阵

∑ \sum 是一个 m ∗ n m*n mn 的矩阵,除了主对角线上的元素以外全为 0,主对角线上的每个元素都称为奇异值


U U U是一个 m ∗ m m*m mm 的矩阵, V V V是一个 n ∗ n n*n nn的矩阵

U 和 V U和V UV都是酉矩阵


满足 U T U = E U^TU = E UTU=E, V T V = E V^TV = E VTV=E


下图可形象的看出上面关于SVD的定义


在这里插入图片描述

∑ T ∑ = ∑ 2 \sum^T\sum = \sum^2 T=2

6. 奇异值分解如何求解

那么我们如何求出 S V D SVD SVD 分解后的 U , ∑ , V U,∑,V U,,V 这三个矩阵呢?


如果我们将 A T A^{T} AT A A A做矩阵乘法,那么会得到 n × n n×n n×n的一个方阵 。既然 A T A A^TA ATA是方阵,那么我们就可以进行特征分解,得到的特征值和特征向量满足:


( A T A ) v i = λ i v i (A^TA)v_i = \lambda_i v_i (ATA)vi=λivi


这样我们就可以得到矩阵 A T A A^{T}A ATA n n n个特征值和对应的 n n n个特征向量 v v v


A T A A^TA ATA的所有特征向量张成一个 n ∗ n n*n nn 的矩阵 V V V,就是我们 S V D SVD SVD 公式里面的 V V V矩阵了。一般我们将 V V V中的每个特征向量叫做 A A A 的右奇异向量


如果我们将 A A T AA^T AAT做矩阵乘法 ,那么会得到 m ∗ m m*m mm 的一个方阵 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*m mm 的矩阵 U U U,就是我们 S V D SVD SVD 公式里面的 U U U矩阵了。一般我们将 U U U 中的每个特征向量叫做 A A A的左奇异向量。

U U U V V V都求出来了,现在就剩下奇异值矩阵 ∑ \sum 没有求出了。


由于 ∑ \sum 除了对角线上是奇异值其他位置都是0,那我们只需要求出每个奇异值 σ \sigma σ就可以了。我们注意到:


A = U ∑ V T A=U\sum V^T A=UVT


A V = U ∑ V T V AV=U\sum V^TV AV=UVTV


A V = U ∑ AV = U\sum AV=U:前面说过 U 和 V U和V UV都是酉矩阵,满足 U T U = E U^TU = E UTU=E, V T V = E V^TV = E VTV=E


A v i = σ i u i Av_i=\sigma_i u_i Avi=σiui u i 是 U 矩阵第 i 列 u_i是U矩阵第i列 uiU矩阵第i σ i 和 v i 同理 \sigma_i和v_i同理 σivi同理,方便我们求出 σ i \sigma_i σi


σ i = A v i u i \sigma_i = \dfrac{Av_i}{u_i} σi=uiAvi


这样我们可以求出我们的每个奇异值,进而求出奇异值矩阵 Σ Σ Σ

还有一个问题,我们说 A T A A^TA ATA的特征向量组成的就是我们 S V D SVD SVD 中的 V V V矩阵,而 A A T AA^T AAT的特征向量组成的就是我们 S V D SVD SVD 中的 U U U矩阵,这有什么根据吗?


以矩阵 V V V为例,由上一节已知 U T U = E U^TU = E UTU=E ∑ T ∑ = ∑ 2 \sum^T\sum = \sum^2 T=2


{ A = U ∑ V T A T = V ∑ T U T A T A = V ∑ T U T U ∑ V T = V ∑ 2 V T \begin{cases} A=U\sum V^T\\\\ A^T = V\sum^T U^T\\\\ A^TA=V\sum^TU^TU\sum V^T=V\sum^2V^T \end{cases} A=UVTAT=VTUTATA=VTUTUVT=V2VT


可以看出 A T A A^TA ATA的特征向量组成的就是 S V D SVD SVD V V V矩阵。而同样的证明步骤可以推出 A A T AA^T AAT的特征向量组成的就是我们 S V D SVD SVD 中的 U U U矩阵

进一步我们还可以看出我们的特征值矩阵等于奇异值矩阵的平方,也就是说特征值和奇异值满足如下关系:


σ i = λ i \sigma_i = \sqrt{\lambda_i} σi=λi


这样也就是说,我们可以不用 σ i = A v i u i \sigma_i = \dfrac{Av_i}{u_i} σi=uiAvi来计算奇异值,也可以通过求出 A T A A^TA ATA的特征值取平方根来求奇异值。

7. 奇异值分解性质

费这么大的力气做SVD 有什么好处, SVD 有什么重要的性质值得我们注意呢?


对于奇异值,它跟我们特征分解中的特征值类似,在奇异值矩阵中也是按照从大到小排列,而且奇异值的减少特别的快,在很多情况下,前 10%甚至 1%的奇异值的和就占了全部的奇异值之和的 99%以上的比例


也就是说,我们也可以用最大的k个的奇异值和对应的左右奇异向量来近似描述矩阵。


A m ∗ n = U m ∗ m ∑ m ∗ n V n ∗ n T A_{m*n} = U_{m*m}\sum_{m*n} V^T_{n*n} Amn=UmmmnVnnT ≈ U m ∗ k ∑ k ∗ k V k ∗ n T ≈U_{m*k}\sum_{k*k}V^T_{k*n} UmkkkVknT


其中k要比n小很多,也就是一个大的矩阵 A A A 可以用三个小的矩阵


U m ∗ k ∑ k ∗ k V k ∗ n T U_{m*k}\sum_{k*k}V^T_{k*n} UmkkkVknT来表示


如下图所示,现在我们的矩阵 A A A只需要 3 3 3个小矩阵就可以近似描述了


在这里插入图片描述


U U U每一列都是标准正交的(orthonormal) V T V^T VT每一行都是标准正交的 Σ Σ Σ是呈对角线的(diagonal),只有对角线有值,而且一定都是非负的


意味着对角线一定有值,但是也有可能值是0,而且神奇的地方,如果左上角有值 σ 1 σ1 σ1,第二个左上角值是 σ 2 σ2 σ2,那么 σ 1 σ1 σ1 一定大于等于 σ 2 σ2 σ2,并且 σ 2 σ2 σ2 大于等于 σ 3 σ3 σ3,以此类推


σ 1 ≥ σ 2 ≥ ⋯ ≥ σ k > 0 \sigma_1 ≥ \sigma_2 ≥ \cdots ≥ \sigma_k > 0 σ1σ2σk>0


所以 ∑ \sum 中有 k 个非 0 k个非0 k个非0的值,依次从左上角往右下角方向排列,我们可以把 ∑ \sum 中等于 0 0 0的行列去掉就保留 k ∗ k k*k kk个值,那么U和V中也分别只保留 k k k列和 k k k行,我们会发现一样乘回来可以得到 A A A 仍然不变。


但是如果我们保留的 小于 k 个 小于k个 小于k,那么乘回去的矩阵就 不等于原来的 A 了 不等于原来的 A了 不等于原来的A。如果 去掉的是第 k 个 去掉的是第 k个 去掉的是第k,那么乘回来的矩阵就是 A + A+ A+,是 最接近 A 的矩阵 最接近 A的矩阵 最接近A的矩阵


还比如可以求解对称矩阵的逆矩阵,可以用于降维算法中的特征分解 还可以用于推荐系统,以及自然语言里面的主题分析里面,会用到这个算法的

SVD可用于数据压缩


奇异值分解在数值计算是非常有用的,首先可以做矩阵的压缩


在这里插入图片描述


import numpy as np
arr = np.array([[0, 0, 0, 2, 2], 
				[0, 0, 0, 3, 3], 
				[0, 0, 0, 1, 1], 
				[1, 1, 1, 0, 0], 
				[2, 2, 2, 0, 0], 
				[5, 5, 5, 0, 0],
				[1, 1, 1, 0, 0]])
# 1. 分解
u, sigma, v = np.linalg.svd(arr)
# 2. 重构
new_arr = np.mat(u[:, 0:2]) * np.mat(np.diag(sigma[0:2])) * np.mat(v[0:2, :])

SVD 可用于 PCA 降维(python的Scikit-learn库中的PCA就是用SVD实现)


在这里插入图片描述


在中心化后 由于特征的均值变为0,所以数据的协方差矩阵 C C C可以用 E ( X X T ) 或 1 m X X T E(XX^T)或\dfrac{1}{m}XX^T E(XXT)m1XXT来表示, X T X^T XT为矩阵的转置。这里 X X X每一行为一个特征。当然也可以表示为 E ( X T X ) E(X^TX) E(XTX)或者 1 m X T X \dfrac{1}{m}X^TX m1XTX,这时每一行为一个样本。


在这里插入图片描述


SVD 分解得到的三个矩阵分别称为:左奇异向量,奇异值矩阵,右奇异向量。


左奇异向量用于压缩行,右奇异向量压缩列


压缩方法均是取奇异值较大的左奇异向量或者右奇异向量与原数据 C C C相乘。

SVD可用于协调过滤(推荐算法中的内容)


在这里插入图片描述


可以直接计算 jim 与其余三个用户的相似度,然后选最相似的样本来为 Jim 的两个空位打分。但是这样,如果一旦样本、特征过多,计算量就猛增。


而事实上,我们不一定需要那么多特征,因此可以使用 S V D SVD SVD 分解把样本映射到低维空间。(事实上,容易能从数据中看出来映射 2维空间,左边三个和右边两个明显不一样,左边三个是日料,右边两个偏欧美的饮食风格)

food = np.mat([[2, 0, 0, 4, 4], [5, 5, 5, 3, 3], [2, 4, 2, 1, 2], [1, 1, 1, 5, 4]])
u, sigma, v = np.linalg.svd(food)
simple_food = np.mat(u[:, 0:2]) * np.mat(np.diag(sigma[0:2])) * np.mat(v[0:2, :])

8. SVD 用于矩阵求逆

在矩阵求逆过程中,矩阵通过 SVD 转换到正交空间,不同得奇异值和奇异值向量代表了系统矩阵中不同的线性无关(或独立)项。


对矩阵进行 SVD 分解,形式如下所示:


[ H ] n ∗ v = [ U ] n ∗ n [ ∑ ] n ∗ v [ V ] v ∗ v T = ∑ i = 1 n { U i } n σ i { V i } v T [H]_{n*v}=[U]_{n*n} [\sum]_{n*v} [V]_{v*v}^T=\displaystyle\sum_{i=1}^n\{U_i\}_n \sigma_i\{V_i\}_{v}^T [H]nv=[U]nn[]nv[V]vvT=i=1n{Ui}nσi{Vi}vT


奇异值矩阵为: [ ∑ ] = [ σ 1 0 ⋯ ⋯ 0 σ 2 ⋯ ⋯ 0 ⋯ ⋯ ⋯ 0 ⋯ ⋯ σ n ] [\sum] = \begin{bmatrix} \sigma_1 & 0 & \cdots & \cdots \\\\ 0 & \sigma_2 & \cdots & \cdots \\\\ 0 & \cdots & \cdots & \cdots \\\\ 0 & \cdots & \cdots & \sigma_n \end{bmatrix} []= σ10000σ2σn


当用 SVD 方法进行求逆时,会使得求逆运算变得非常简单,这是因为通过 SVD 求逆,只需要对奇异值求倒数即可

而对于一个正交阵 B B B,有 B − 1 = B T B^{-1}=B^T B1=BT这个性质。因此,其求逆形式为:

上面特性中我们讲过 U U U每一列都是标准正交的(orthonormal) V T V^T VT每一行都是标准正交的 Σ Σ Σ是呈对角线的(diagonal),只有对角线有值,而且一定都是非负的


{ [ H − 1 ] n ∗ v = ( [ V ] v ∗ v T ) − 1 ( [ ∑ ] n ∗ v ) − 1 ( U n ∗ n ) − 1 = [ V ] v ∗ v [ ∑ − 1 ] v ∗ n [ U ] n ∗ n T = ∑ i = 1 n V i v σ i − 1 U i n T \begin{cases} [H^{-1}]_{n*v} = ([V]_{v*v}^T)^{-1}([\sum]_{n*v})^{-1}(U_{n*n})^{-1}\\\\ =[V]_{v*v}[\sum^{-1}]_{v*n}[U]^{T}_{n*n}\\\\ =\sum_{i=1}^n {V_i}_v \sigma_i^{-1} {U_i}_n^{T} \end{cases} [H1]nv=([V]vvT)1([]nv)1(Unn)1=[V]vv[1]vn[U]nnT=i=1nVivσi1UinT


[ ∑ − 1 ] v ∗ n = [ σ 1 − 1 0 ⋯ ⋯ 0 σ 2 − 1 ⋯ ⋯ 0 ⋯ ⋯ ⋯ 0 ⋯ ⋯ σ n − 1 ] [\sum^{-1}]_{v*n} = \begin{bmatrix} \sigma_1^{-1} & 0 & \cdots & \cdots \\\\ 0 & \sigma_2^{-1} & \cdots & \cdots \\\\ 0 & \cdots & \cdots & \cdots \\\\ 0 & \cdots & \cdots & \sigma_n^{-1} \end{bmatrix} [1]vn= σ110000σ21σn1


可以看出,SVD 求逆是原始奇异值的倒数,这就使得通过 S V D SVD SVD 对矩阵求逆变得非常简单

奇异值求倒数,奇异矩阵转置 奇异值求倒数,奇异矩阵转置 奇异值求倒数,奇异矩阵转置

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

ydenergy_殷志鹏

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值