一、特征向量和特征值
1、概念简述和应用
(1)概念简述
矩阵的特征向量是矩阵理论上的重要概念之一,它有着广泛的应用。特征值和特征向量是数据科学领域的核心。
它到底有什么用?
简而言之,特征向量和特征值的概念用于确定一组重要变量(以向量的形式)以及沿不同维度(基于方差的关键维度)的尺度,以便以更好的方式分析数据。
一个线性变换通常可以由其特征值和特征向量完全描述。非常概括地说,线性映射的特征值是由变换引起的失真的度量,特征向量告诉您失真的方向。 这对于降维PCA(主成分分析)非常有用。
一个简单的例子是特征向量在变换中不改变方向。
(2)一些应用
想很直观的说明特征向量和特征值的意义,不是很好说明,所以可以看以下应用场景以加强理解。
1、机械工程
特征值和特征向量允许我们“减少”线性运算以分离、更简单的问题。 例如,如果对“塑性”物品施加应力,则可以将变形分解为“主要方向”——变形最大的方向。 主方向的向量就是特征向量,每个主方向的变形百分比就是对应的特征值。
2、石头勘探
石油公司经常使用特征值分析来勘探石油。 油、泥土和其他物质都是会产生具有不同特征值的线性系统,因此特征值分析可以很好地指示石油储量的位置。 石油公司在一个地点周围放置探测器,以接收一辆用于震动地面的巨大卡车产生的波浪。当波穿过地面中的不同物质时,它们会发生变化。对这些波的分析将指引可能的钻探地点。
2、矩阵和线性变换
我们可以将矩阵视为线性变换。当我们将矩阵应用于向量时(计算矩阵与向量的点积),我们最终会得到向量的转换版本。
1、有如下矩阵A和向量v
A = np.array([[-1, 3], [2, -2]])
v = np.array([[2], [1]])
2、首先定义一个可视化函数
def plotVectors(vecs, cols, alpha=1):
"""
Plot set of vectors.
Parameters
----------
vecs : array-like
Coordinates of the vectors to plot. Each vectors is in an array. For
instance: [[1, 3], [2, 2]] can be used to plot 2 vectors.
cols : array-like
Colors of the vectors. For instance: ['red', 'blue'] will display the
first vector in red and the second in blue.
alpha : float
Opacity of vectors
Returns:
fig : instance of matplotlib.figure.Figure
The figure of the vectors
"""
plt.figure()
plt.axvline(x=0, color='#A9A9A9', zorder=0)
plt.axhline(y=0, color='#A9A9A9', zorder=0)
for i in range(len(vecs)):
x = np.concatenate([[0,0],vecs[i]])
plt.quiver([x[0]],
[x[1]],
[x[2]],
[x[3]],
angles='xy', scale_units='xy', scale=1, color=cols[i],
alpha=alpha)
3、可视化向量v
plotVectors([v.flatten()], cols=['#1190FF'])
plt.ylim(-1, 4)
plt.xlim(-1, 4)
4、下面就是可视化的向量v
5、计算矩阵和向量点积,并可视化
Av = A.dot(v)
print(Av)
plotVectors([v.flatten(), Av.flatten()], cols=['#1190FF', '#FF9A13'])
plt.ylim(-1, 4)
plt.xlim(-1, 4)
6、可以看到原始向量(蓝色)和变换后的向量(黄色)
3、公式
教材上的定义:设A是n阶矩阵,如果数λ和n维非零列向量α使关系式 Aα=λα,成立,那么数λ称为矩阵A的特征值,非零向量α称为A的对应于特征值λ的特征向量。
就是说对于方阵A,以下等式成立。
4、可视化示例1
设有如下矩阵和特征向量
矩阵:
特征向量:
根据公式Av=λv,我们有
然后又λv=
这表示v是A的特征向量。另外,相应的特征值是 λ=6。
python代码及可视化
A = np.array([[5, 1], [3, 3]])
v = np.array([[1], [1]])
Av = A.dot(v)
orange = '#FF9A13'
blue = '#1190FF'
plotVectors([Av.flatten(), v.flatten()], cols=[blue, orange])
plt.ylim(-1, 7)
plt.xlim(-1, 7)
5、可视化示例2
设有如下矩阵和特征向量
矩阵:
特征向量:
根据公式Av=λv,我们有
然后可知λv =
这表示v是A的特征向量。另外,相应的特征值是 λ=2。
python代码及可视化
A = np.array([[5, 1], [3, 3]])
v = np.array([[1], [-3]])
Av = A.dot(v)
orange = '#FF9A13'
blue = '#1190FF'
plotVectors([Av.flatten(), v.flatten()], cols=[blue, orange])
plt.ylim(-1, 7)
plt.xlim(-1, 7)
二、如何计算特征值和特征向量?
1、计算特征值
1、已知方程。
2、右侧乘以一个单位矩阵。
3、变换。
4、如果v不为0,根据行列式。
5、带入并求解。
6、即有。
7、计算
8、得到如下方程
9、求解得到两个特征值。
2、计算特征向量
现在我们知道了特征值,让我们找到它们匹配的特征向量。
1、 已知方程。
2、带入。
3、相乘后,我们得到这两个等式:
4、变换后可得
5、任何一个方程都表明 y = 4x,所以特征向量是它的任何非零倍数:
6、
7、得到特征向量。
同理可以计算得到-7对应的特征向量。
三、更多示例
1、三维矩阵1
1、设有矩阵
2、首先计算A - λI:
3、得到三次方程方括号内的部分是二次方程。
4、求解根为-1,2,8
5、继续求特征值-1匹配的特征向量
6、得到方程,简化为
7、所以 x = 0,并且 y = -z,所以特征向量是这个的任何非零倍数:
8、同理可求特征值2和8对应的特征向量。
2、三维矩阵2
1、设有矩阵
2、首先计算A - λI:
3、计算行列式可得:
(λ-4)(λ-4)(λ+7) + (-2)(9)(-5) + (5)(-3)(-6) - (5)(λ-4)(-5) - (-2)(-6)(λ+7) - (λ-4)(9)(-3)=0
4、化简可得
5、所以得到特征值
6、继续求特征值1匹配的特征向量
7、求得方程组3x+2y-5z = 0;6x+3y-9z=0; 5x+3y-8z=0;
8、求得特征矩阵
9、同理可求特征值0匹配的特征向量=0
10、求得方程组4x+2y-9z = 0;6x+4y-9z=0; 5x+3y-7z=0;
11、求得特征矩阵
3、三角函数矩阵
1、设有矩阵
2、旋转30度
3、可得矩阵
4、
5、
6、计算行列式
7、
8、求解得
9、继续求特征值匹配的特征向量
10、我们的到两个方程简化可得
11、得到或
四、在Python中查找特征值和特征向量
Numpy 提供了一个返回特征向量和特征值的函数。
A = np.array([[5, 1], [3, 3]])
np.linalg.eig(A)
打印结果如下
(array([6., 2.]), array([[ 0.70710678, -0.31622777],[ 0.70710678, 0.9486833 ]]))
结果中的第一个数组是特征值,第二个数组是对应的特征向量。我们可以看到特征值与上两个例子的相同:6 和 2。
当λ=6时,特征向量为
当λ=2时,特征向量为
这里的特征向量跟上面的两个例子里的、不同,因为它们的缩放比例与上面的示例中给出的缩放比例不相同。
对于特征值来说,有无穷多个对应于它的特征向量。
比如对于矩阵来说,特征向量,有如下公式成立,最终特征值还是2。