欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

使用Python进行QR分解求解特征值和特征向量的方法

最编程 2024-01-19 11:26:47
...



python求特征值和特征向量QR python计算矩阵的特征值_特征向量

今天和大家聊一个非常重要,在机器学习领域也广泛使用的一个概念——矩阵的特征值与特征向量

我们先来看它的定义,定义本身很简单,假设我们有一个n阶的矩阵A以及一个实数λ,使得我们可以找到一个非零向量x,满足:

python求特征值和特征向量QR python计算矩阵的特征值_python中向量长度_02

如果能够找到的话,我们就称λ是矩阵A的特征值,非零向量x是矩阵A的特征向量

  几何意义  

光从上面的式子其实我们很难看出来什么,但是我们可以结合矩阵变换的几何意义,就会明朗很多。

我们都知道,对于一个n维的向量x来说,如果我们给他乘上一个n阶的方阵A,得到Ax。从几何角度来说,是对向量x进行了一个线性变换。变换之后得到的向量y和原向量x的方向和长度都发生了改变。

但是,对于一个特定的矩阵A来说,总存在一些特定方向的向量x,使得Ax和x的方向没有发生变化,只是长度发生了变化。我们令这个长度发生的变化当做是系数λ,那么对于这样的向量就称为是矩阵A的特征向量,λ就是这个特征向量对应的特殊值

  求解过程  

我们对原式来进行一个很简单的变形:

python求特征值和特征向量QR python计算矩阵的特征值_python求特征值和特征向量QR_03

这里的I表示单位矩阵,如果把它展开的话,可以得到一个n元n次的齐次线性方程组。这个我们已经很熟悉了,这个齐次线性方程组要存在非零解,那么需要系数行列式

python求特征值和特征向量QR python计算矩阵的特征值_特征向量_04

不为零,也就是系数矩阵的秩小于n。

我们将这个行列式展开:

python求特征值和特征向量QR python计算矩阵的特征值_特征向量_05

这是一个以λ为未知数的一元n次方程组,n次方程组在复数集内一共有n个解。我们观察上式,可以发现λ只出现在正对角线上,显然,A的特征值就是方程组的解。因为n次方程组有n个复数集内的解,所以矩阵A在复数集内有n个特征值。

我们举个例子,尝试一下:

假设:

python求特征值和特征向量QR python计算矩阵的特征值_特征值_06

那么

python求特征值和特征向量QR python计算矩阵的特征值_python求特征值和特征向量QR_07

,我们套入秋根公式可以得出使得

python求特征值和特征向量QR python计算矩阵的特征值_方程组_08

的两个根

python求特征值和特征向量QR python计算矩阵的特征值_特征向量_09

有:

python求特征值和特征向量QR python计算矩阵的特征值_特征向量_10


python求特征值和特征向量QR python计算矩阵的特征值_特征向量_11


这个结论可以推广到所有的n都可以成立,也就是说对于一个n阶的方阵A,都可以得到:


python求特征值和特征向量QR python计算矩阵的特征值_方程组_12

  案例  

我们下面来看一个例子:

python求特征值和特征向量QR python计算矩阵的特征值_方程组_13

我们带入


python求特征值和特征向量QR python计算矩阵的特征值_方程组_14

,可以得到:


python求特征值和特征向量QR python计算矩阵的特征值_python求特征值和特征向量QR_15

所以: 

python求特征值和特征向量QR python计算矩阵的特征值_方程组_16

,可以看出来

python求特征值和特征向量QR python计算矩阵的特征值_python中向量长度_17

当 λ=2

时:

python求特征值和特征向量QR python计算矩阵的特征值_特征向量_18

解之,可以得到:


python求特征值和特征向量QR python计算矩阵的特征值_python中向量长度_19

,所有 (x,−x)

向量都是A的特征向量。 同理,当 λ=4 时:

python求特征值和特征向量QR python计算矩阵的特征值_特征向量_20

解之,可以得到:

python求特征值和特征向量QR python计算矩阵的特征值_python中向量长度_21

,所有 (x,x)

向量都是A的特征向量。

  使用Python求解特征值和特征向量  

在我们之前的文章当中,我们就介绍过了Python在计算科学上的强大能力,这一次在特征值和特征矩阵的求解上也不例外。 通过使用numpy当中的库函数,我们可以非常轻松,一行代码,完成特征值和特征向量的双重计算。

我们一起来看代码:

import numpy as npa = np.mat([[3, 1], [1, 3]])lam, vet = np.linalg.eig(a)
import numpy as np

a = np.mat([[3, 1], [1, 3]])
lam, vet = np.linalg.eig(a)

np.linalg.eig 方法会返回两个值,第一个返回值是矩阵的特征值,第二个返回值是矩阵的特征向量,我们看下结果:

python求特征值和特征向量QR python计算矩阵的特征值_方程组_22

这里的特征向量为什么是0.707呢?

因为Python自动帮我们做好了单位化,返回的向量都是单位向量,不得不说实在是太贴心了。

  总结  

关于矩阵的特征值和特征向量的介绍到这里就结束了,对于算法工程师而言,相比于具体怎么计算特征向量以及特征值。 理解清楚它们的概念和几何意义更加重要,因为这两者在机器学习的领域当中广泛使用,在许多降维算法当中,大量使用矩阵的特征值和特征向量。 对于降维算法的原理,这里不过多赘述,我们会在以后的文章当中更新相关内容。