机器学习(5):几个重要矩阵
1 可逆矩阵
矩阵A首先是方阵,并且存在另一个矩阵B,使得它们的乘积为单位阵,则称B为A的逆矩阵。如下所示,利用numpy模块求解方阵A的逆矩阵,B,然后再看一下A*B是否等于单位阵E,可以看出等于单位阵E。
python测试代码:
import numpy as np
'方阵A'
A = np.array([[1,2],[3,4]])
A
array([[1, 2],
[3, 4]])
'逆矩阵B'
import numpy.linalg as la
B = la.inv(A)
B
array([[-2. , 1. ],
[ 1.5, -0.5]])
'A*B'
E = A.dot(B)
E
array([[ 1.00000000e+00, 1.11022302e-16],
[ 0.00000000e+00, 1.00000000e+00]])
2 奇异矩阵
奇异矩阵首先得是方阵(即行数和列数相等的矩阵),再检查此矩阵的行列式的值,等于0,则为奇异矩阵。不等于0就是非奇异矩阵了。注意,非奇异矩阵也是方阵。
非奇异矩阵python测试 :
import numpy as np
'方阵A'
A = np.array([[1,2],[3,4]])
A
array([[1, 2],
[3, 4]])
'方阵A的行列式计算'
la.det(A)
-2.0000000000000004
行列式不为0,所以矩阵A为非奇异矩阵
C = np.array([[1,2],[1,2]])
C
array([[1, 2],
[1, 2]])
la.det(C)
0.0
行列式为0,因此方阵C为奇异矩阵
3 病态矩阵
求解方程组时对数据的小扰动很敏感的矩阵称为病态矩阵,具体来说可以这样描述:
解线性方程组 Ax = b 时,若对于系数矩阵 A 及右端项 b 的小扰动 δA、δb, 方程组 (A+δA) χ = b+δb 的解 χ 与原方程组 Ax=b 的解差别很大,则称矩阵 A 为病态矩阵。
'病态矩阵测试 Ax = b'
'x = la.inv(A).dot(b) 如下python代码所示:'
A = np.array([[400,-201],[-800,401]])
b = np.array([200,-200])
x = la.inv(A).dot(b)
x
array([-100., -200.])
'将 A 矩阵中的元素 400 改变成 401,这就是一个小扰动'
'但是小扰动,造成的解与原来相比,差别非常大'
A = np.array([[401,-201],[-800,401]])
b = np.array([200,-200])
x = la.inv(A).dot(b)
x
array([ 40000.00000004, 79800.00000007])
由此可见,系数矩阵A只是做了一个微调,但是得到的解与原来的真解,真是相差甚远啊!
4 条件数
衡量矩阵的病态程度通常是看矩阵的条件数。条件数的定义:K(A)= ‖inv(A)‖ * ‖A‖ 的大小。
其中,‖‖ 表示对矩阵取某一种范数。
接下来测试上面提到的病态矩阵的条件数,和一个良好的矩阵的条件数,看看它们的大小。
主要推送关于算法的分析过程及应用的消息。培养思维能力,注重过程,挖掘背后的原理,刨根问底。本着严谨和准确的态度,目标是撰写实用和启发性的文章,欢迎您的关注。