欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

特征值和特征向量到底描述了什么

发布时间:2024/9/18 编程问答 56 豆豆
生活随笔 收集整理的这篇文章主要介绍了 特征值和特征向量到底描述了什么 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

矩阵的乘法

矩阵对向量可以做拉伸也可以做旋转


对角矩阵对向量(x,y)(x,y)(x,y)在x轴上拉伸了3倍。非对角矩阵对向量(x,y)(x,y)(x,y)不仅做了拉伸,同时也做了旋转。

特征值和特征向量到底描述了什么

举个例子:打拳击。我们可以把方向当做特征向量,在这个方向上用多大的力量就是特征值。

特征向量可以说是主要的前进目标,特征值是向这个目标产生多大的作用。

数学定义

对于给定矩阵A,寻找一个常数λ\lambdaλ和非零向量xxx,使得向量xxx被矩阵A作用后所得的向量AxAxAx与原向量xxx平行,并且满足Ax=λxAx=\lambda xAx=λx。如下图所示:

λ\lambdaλ就是特征值,xxx就是特征值λ\lambdaλ对应的特征向量。

例如要做降维操作,10维的数据,每一维度都有一个特征向量,有下面两个维度逇特征向量,应该选择哪一个?

如果有两个特征值λ1>λ2\lambda_1 > \lambda_2λ1>λ2,我们会认为λ1\lambda_1λ1对应的特征向量更重要,更有价值,所以在做降维操作时,选择特征值大的一个特征向量。

特征空间

特征空间包含了所有的特征向量。

应用

既然特征值表达了重要程度,并且和特征向量所对应,那么特征值大的就是主要信息了,基于这一点,我们可以提取各种有价值的信息了!


图像可以看做是一个矩阵,既然是矩阵,就可以算出这个矩阵的特征向量和特征值,我们如果取前10个特征值最大的特征向量,那么就可以对这个图像进行压缩,虽然图像变的有一些模糊,但是整体不会有太大变化。

使用numpy计算特征值和特征向量

import numpy as np# 创建矩阵 维度 4*2 data = np.array([[2, 4], [1, 3], [0, 0], [0, 0]])# 将矩阵转为方阵 维度 4*4 A = np.dot(data, data.T) #A=array([[20, 14, 0, 0], # [14, 10, 0, 0], # [ 0, 0, 0, 0], # [ 0, 0, 0, 0]]) # 求A的特征值和特征向量 val,vector = np.linalg.eig(A) # val=array([29.86606875, 0.13393125, 0. , 0. ]) # vector=array([[ 0.81741556, -0.57604844, 0. , 0. ], # [ 0.57604844, 0.81741556, 0. , 0. ], # [ 0. , 0. , 1. , 0. ], # [ 0. , 0. , 0. , 1. ]]) 特征值29.86606875 对应的

特征值29.86606875 对应的特征向量为[ 0.81741556,0.57604844,0 ,0]
特征值0.13393125对应的特征向量为[-0.57604844,0.81741556,0,0]

验证:

np.dot(A, vector[:,0]) # array([24.41298932, 17.20430221, 0. , 0. ]) np.dot(val[0], vector[:,0]) # array([24.41298932, 17.20430221, 0. , 0. ])np.dot(A, vector[:,1]) # array([-0.07715089, 0.10947749, 0. , 0. ]) np.dot(vector[:, 1], val[1]) array([-0.07715089, 0.10947749, 0. , 0. ])

矩阵data:

矩阵A:

特征值:

特征向量:

总结

以上是生活随笔为你收集整理的特征值和特征向量到底描述了什么的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。