深度学习基础:线性代数(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

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

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)
上一篇 矩阵特征值和特征向量详细计算过程
下一篇 深度学习基础:线性代数(2)_奇异值分解及numpy、scipy实现
目录
文章列表
1 CentOS下编译PHP 7.4报错Package requirements (libzip >= 0.11 libzip != 1.3.1 libzip != 1.7.0) were not met
CentOS下编译PHP 7.4报错Package requirements (libzip >= 0.11 libzip != 1.3.1 libzip != 1.7.0) were not met
2
React Native学习之图片Image组件
React Native学习之图片Image组件
3
Redisson实现Redis分布式锁的N种姿势
Redisson实现Redis分布式锁的N种姿势
4
Kuboard集群管理
Kuboard集群管理
5
使用pm2部署vue项目
使用pm2部署vue项目
最新评论
一位WordPress评论者
一位WordPress评论者
2月12日
您好,这是一条评论。若需要审核、编辑或删除评论,请访问仪表盘的评论界面。评论者头像来自 Gravatar。