一、特征值与特征向量简介

  特征值与特征向量是线性代数的核心内容,也是方阵的属性之一,在机器学习算法中应用十分广泛,可应用在降维、特征提取、图像压缩等领域。
  矩阵与向量相乘是对向量进行线性变换,是对原始向量同时施加方向和长度的变化。通常情况下,绝大部分向量都会被这个矩阵变换的面目全非,但是存在一些特殊的向量,被矩阵变换之后,仅有长度上的变化,用数学公式表示为 python 求矩阵特征值 python求特征值和特征向量_python,其中 python 求矩阵特征值 python求特征值和特征向量_python_02 为向量,python 求矩阵特征值 python求特征值和特征向量_特征值_03 对应长度变化的比例,称 python 求矩阵特征值 python求特征值和特征向量_特征值_03 为特征值, python 求矩阵特征值 python求特征值和特征向量_python_02python 求矩阵特征值 python求特征值和特征向量_特征值_03 对应的特征向量。
  矩阵特征值与特征向量的动态意义在于变化的速度与方向,特征向量对应变化方向,而特征值对应变化速度。

二、求解特征值与特征向量

python 求矩阵特征值 python求特征值和特征向量_特征值_07,根据np.linalg.eig()函数的返回值,得到方阵 python 求矩阵特征值 python求特征值和特征向量_特征值_07的特征值和特征向量。

import numpy as np
B = [[4,2], [1,5]]
A = np.array(B)
eig_val,eig_vex = np.linalg.eig(A)         #eig()函数求解特征值和特征向量
print("A的特征值为:\n",eig_val)
print("A的特征向量为:\n",eig_vex)

输出为:

A的特征值为:
 [3. 6.]
A的特征向量为:
 [[-0.89442719 -0.70710678]
 [ 0.4472136  -0.70710678]]

注意:np.linalg.eig()函数求解出的特征向量已经标准化,即满足 python 求矩阵特征值 python求特征值和特征向量_python_09

根据特征值生成特征矩阵 python 求矩阵特征值 python求特征值和特征向量_python_10,验证python 求矩阵特征值 python求特征值和特征向量_python_11

sigma = np.diag(eig_val)  # 特征值的对角化
print("A × eig_vex与eig_vex × sigma是否相等:",
      np.allclose(A.dot(eig_vex),eig_vex.dot(sigma)))
print("A × eig_vex与sigma × eig_vex是否相等:",
      np.allclose(A.dot(eig_vex),sigma.dot(eig_vex)))

输出为:

A × eig_vex与eig_vex × sigma是否相等: True
A × eig_vex与sigma × eig_vex是否相等: False

三、特征值分解

python 求矩阵特征值 python求特征值和特征向量_特征值_07 分解成 python 求矩阵特征值 python求特征值和特征向量_线性代数_13的形式,分解前提是 python 求矩阵特征值 python求特征值和特征向量_特征值_07 必须是 python 求矩阵特征值 python求特征值和特征向量_特征值_15 阶方阵且可以对角化。公式中,python 求矩阵特征值 python求特征值和特征向量_特征值_16python 求矩阵特征值 python求特征值和特征向量_特征值_07 的特征向量组成的矩阵, python 求矩阵特征值 python求特征值和特征向量_python 求矩阵特征值_18 是对角阵,其主对角线上的元素代表 python 求矩阵特征值 python求特征值和特征向量_特征值_07 的特征值,特征向量矩阵 python 求矩阵特征值 python求特征值和特征向量_特征值_16 的第 python 求矩阵特征值 python求特征值和特征向量_人工智能_21 个列向量与 python 求矩阵特征值 python求特征值和特征向量_python 求矩阵特征值_18 的第 python 求矩阵特征值 python求特征值和特征向量_人工智能_21 行对角线上的特征值对应,python 求矩阵特征值 python求特征值和特征向量_线性代数_24python 求矩阵特征值 python求特征值和特征向量_特征值_16

import numpy as np
B = [[4,2], [1,5]]
A = np.array(B)
eig_val,eig_vex = np.linalg.eig(A)   # eig()函数求解特征值和特征向量
print("A的特征值为:\n",eig_val)
print("A的特征向量为:\n",eig_vex)
sigma = np.diag(eig_val)           # 特征值的对角化
print("特征值矩阵:\n",sigma)
C = eig_vex.dot(sigma.dot(np.linalg.inv(eig_vex)))
print("A与新构造出的矩阵C是否相同",np.allclose(A,C))

输出为:

A的特征值为:
 [3. 6.]
A的特征向量为:
 [[-0.89442719 -0.70710678]
 [ 0.4472136  -0.70710678]]
特征值矩阵:
 [[3. 0.]
 [0. 6.]]
A与新构造出的矩阵C是否相同 True

python 求矩阵特征值 python求特征值和特征向量_python 求矩阵特征值_26 是特征值,利用diag()函数将特征值对角化得到的 python 求矩阵特征值 python求特征值和特征向量_python_10python 求矩阵特征值 python求特征值和特征向量_python 求矩阵特征值_18python 求矩阵特征值 python求特征值和特征向量_特征值_29python 求矩阵特征值 python求特征值和特征向量_特征值_16 ,使用dot()函数将 python 求矩阵特征值 python求特征值和特征向量_特征值_16python 求矩阵特征值 python求特征值和特征向量_python 求矩阵特征值_18python 求矩阵特征值 python求特征值和特征向量_线性代数_24 相乘构出新矩阵,通过allclose()函数判断新矩阵是否与原矩阵相同,python 求矩阵特征值 python求特征值和特征向量_人工智能_34 说明 python 求矩阵特征值 python求特征值和特征向量_线性代数_13

参考资料
人工智能数学基础(北京大学出版社)