深度学习基础:线性代数(1)_特征分解及numpy、scipy实现

特征分解的意义

有时,我们会将现实中的某些事物抽象成矩阵的形式,例如可以将一张图片抽象成一个像素值组成的矩阵。此时,我们也许希望中将矩阵分解成多个组成部分,这些组成部分代表了这个矩阵的特征,这就是特征分解的意义。

特征值与特征向量

给定方阵$A$,如果存在向量$v$和标量$\lambda$,使得

$$Av=λv$$

那么$v$称为矩阵A的特征向量,$\lambda$称为特征向量$v$对应的特征值

注意:如果$v$是矩阵$A$的特征向量,那么对v缩放任意倍,即$sv(S \in {\Bbb {R}}, S \neq 0)$均是矩阵$A$的特征向量,因此通常只考虑单位特征向量

特征分解

假设矩阵$A$有n个特征无关的特征向量${v_1, v_2, …, v_n}$,对应的特征值为${\lambda_1, \lambda_2, …, \lambda_n}$。

我们将特征向量连接成一个矩阵,使得每一列是一个特征向量:$V = [v_1, v_2, …, v_n]$。同样的,我们将特征值连接成一个向量$\lambda = [\lambda_1, \lambda_2, …, \lambda_n]$。可以得到下式:

$$AV = Vdiag(\lambda)$$

其中$diag(\lambda)$是向量$\lambda$对应的对角矩阵。令

$$AVV^{-1} = Vdiag(\lambda)V^{-1}$$

$$A = Vdiag(\lambda)V^{-1}$$

此时,矩阵$A$便可以分解为特征值和特征向量的乘积,称为特征分解

正交矩阵

如果$AA^T = E$($E$为单位矩阵,$A^T$表示矩阵$A$的转置矩阵)或$A^TA=E$,则$n$阶实矩阵$A$称为正交矩阵。

实对称矩阵的特征分解

不是每个矩阵都可以分解成特征值和特征向量。即使特征分解存在,也有可能涉及到复数。但对于实对称矩阵来说,其必可以分解成实特征值实特征向量

$$A = Q \Lambda Q^T$$

其中$Q$是矩阵$A$的特征向量组成的正交矩阵,$\Lambda$是对角矩阵。特征值$\Lambda_{i,i}$对应的特征向量是矩阵$Q$的第$i$列,记作$Q_{:,i}$。因为$Q$是正交矩阵,我们可以将$A$看作是沿方向$v_i$延伸$\lambda_i$倍的空间。

实对称矩阵在二次方程中的应用

对于二次方程

$$ f(x) = x^TAx, ||x||_2 = 1$$

当$x$是特征向量时,$f(x)$就是$x$对应的特征值。因此在$x$是单位向量的限制下,函数$f(x)$的最大值就是最大特征值,最小值就是最小特征值。

正定、半正定、负定、半负定

  • 正定:所有特征值都是正数,即$x^TAx > 0$。
  • 半正定:所有特征值都是非负数,即$x^TAx \geq 0$。
  • 负定:所有特征值都是负数,即$x^TAx < 0$。
  • 半负定:所有特征值都是非负数,即$x^TAx \leq 0$。

Python实现

Numpy

1
2
3
4
5
6
7
8
9
10
11
import numpy as np

A = np.array([[1,2,3],
[4,5,6],
[7,8,9]])
# 计算特征值
print(np.linalg.eigvals(A))
# 同时计算特征值和特征向量
eigvals, eigvectors = np.linalg.eig(A)
print(eigvals)
print(eigvectors)

Scipy

1
2
3
4
5
6
7
8
9
10
11
12
13
import numpy as np
import scipy as sp
from scipy import linalg

A = np.array([[1,2,3],
[4,5,6],
[7,8,9]])
# 计算特征值
print(sp.linalg.eigvals(A))
# 同时计算特征值和特征向量
eigvals, eigvectors = sp.linalg.eig(A)
print(eigvals)
print(eigvectors)

Powered by AppBlog.CN     浙ICP备14037229号

Copyright © 2012 - 2020 APP开发技术博客 All Rights Reserved.

访客数 : | 访问量 :