目录
0、基础
1、基本运算和基本概念
2、范数
3、向量基概念及运算
4、行列式及特殊矩阵
5、奇异值分解(SVD)
6、基向量及线性相关性等
7、线性变换
8、特征方程与相似矩阵
9、其他资料
# 可用以下方法实现叉乘
a @ b #Python方法
torch.matmul(a, b) #Pytorch框架常用
torch.inverse(a) # torch框架
np.linalg.inv(a) # numpy框架
范数是用来衡量数的大小
║A║ = max{ ∑|ai1|,∑|ai2|,……,∑|ain| } (列和范数,A每一列元素绝对值之和的最大值)
║A║ = max{ ∑|a1i|,∑|a2i|,……,∑|ani| } (行和范数,A每一行元素绝对值之和的最大值)
分母的意义:除以各自的模使其在同一坐标系或同一基向量中。
缺点:值域为[0,+∞),不能直接比较;大小很模糊,不能度量
优点:简单
对两向量做二范数归一化所得的欧式距离等价于余弦相似度。
正相关:两向量夹角小于90°
负相关:两向量夹角大于90°
扩展:向量相似度的度量
np.linalg.det(a) # Numpy框架
b.det() # Torch框架 b为torch.tensor()创建方阵;输入需要为float
特殊矩阵
# 创建1矩阵
np.ones((3, 3))
torch.ones(3, 3)
# 创建0矩阵
np.zeros((3, 3))
torch.zeros(3, 3)
3. 单位矩阵
np.eye(n, m) # n, m为单位矩阵维度
torch.eye(n, m)
4. 下三角矩阵:和其他矩阵作运算可以起到遮挡作用
np.tri(n, m) n, m为单位矩阵维度
torch.tril(torch.ones(n, m))
5. 奇异矩阵和非奇异矩阵
奇异矩阵:方阵且行列式为0
6. 斜对角矩阵: 主对角线存在非0元素,其余元素全为0
np.diag([data])
torch.diag(torch.tensor([data])) # [data]为主对角线元素,由列表构成
7. 稀疏矩阵
若数值为0的元素数目远远多于非0元素的数目,并且非0元素分布没有规律
非零元素的总数比上矩阵所有元素总数的值小于等于0.05
将非方阵分解为3个矩阵相乘。
上图为喜欢同一类型或相近类型书籍的一批用户对不同书籍的打分,我们现在需要通过对已知打分表X预测第一个用户对第4本书的购买欲望。则可以通过对矩阵X的进行SVD,可得到三个矩阵(上图缺少Σ权重矩阵)U、Σ、V,其中 Σ为特征值矩阵、U为用户的偏向权重矩阵、V为书内容受欢迎程度偏向权重矩阵。那么我们就可以通过U、V矩阵预估出第一个用户对第4本书的购买欲望。
import numpy as np
a = np.array([[12,3], [2,3],[7, 98]]) # 形状为(3,2)
u,s,v = np.linalg.svd(a)
print(u)
print(s)
print(v)
z = np.zeros((3,2))
z[0][0] = s[0]
z[1][1] = s[1]
print(z)
print(u@z@v)
# u
[[ 0.03974454 0.98792384 -0.149756 ]
[ 0.03196212 0.14854076 0.98838963]
[ 0.99869855 -0.04406961 -0.02567246]]
# s等价于下面的z
[98.37631919 11.87854464] #对角矩阵 形状应和原矩阵相同(3,2)
# v
[[ 0.07656059 0.99706493]
[ 0.99706493 -0.07656059]]
# z为将s扩张成矩阵的结果
[[98.37631919 0. ]
[ 0. 11.87854464]
[ 0. 0. ]]
# a = u@z@v
[[12. 3.]
[ 2. 3.]
[ 7. 98.]]
研究相关性的目的:一就是找到轴/基向量,之后进行特征分解,找到特征方向;二是衡量相关性
拓展: