Task1主要学习绪论概述 和 数学基础两个部分。 学习资料点这里
数学基础介绍了矩阵、矩阵的秩、矩阵的逆、广义逆以及矩阵的SVD和特征向量分解两种分解方式。
因为我目的在于提升代码能力,所以看完理论把其中一些内容用代码记录出来。 (用jupyternotebook导出md,然后导入体验不错hhhh)
import numpy as np
矩阵基本知识
1.随机数生成一个矩阵
A = np.random.randint(0,10,size = (4,4))
A
下面为输出A:
array([[5, 3, 0, 1],
[0, 9, 4, 5],
[7, 3, 8, 2],
[3, 3, 2, 3]])
B = np.random.rand(2,4)
B
下面为输出B:
array([[0.99047078, 0.07596616, 0.667819 , 0.04907022],
[0.64565844, 0.59305278, 0.90967228, 0.69274612]])
下面为输出C:
C = np.random.binomial(n = 10,p = 0.5,size=(4,4))
C
array([[6, 6, 7, 4],
[5, 6, 6, 3],
[6, 4, 6, 6],
[4, 6, 3, 7]])
2.求矩阵的秩
np.linalg.matrix_rank(A)
输出:4
4
3.矩阵求逆
np.linalg.inv(A)
输出为矩阵A的逆:
array([[ 0.51440329, -0.48148148, 0.25925926, -0.01234568],
[-0.23868313, 0.40740741, -0.2962963 , 0.0617284 ],
[ 0.29218107, -0.48148148, 0.25925926, 0.32098765],
[-0.218107 , 0.14814815, 0.07407407, -0.09876543]])
np.mat(A).I
另一种方式,得到矩阵A的逆:
matrix([[ 0.51440329, -0.48148148, 0.25925926, -0.01234568],
[-0.23868313, 0.40740741, -0.2962963 , 0.0617284 ],
[ 0.29218107, -0.48148148, 0.25925926, 0.32098765],
[-0.218107 , 0.14814815, 0.07407407, -0.09876543]])
4.求伪逆(广义逆)
np.linalg.pinv(B)
输出伪逆:
array([[ 0.51440329, -0.48148148, 0.25925926, -0.01234568],
[-0.23868313, 0.40740741, -0.2962963 , 0.0617284 ],
[ 0.29218107, -0.48148148, 0.25925926, 0.32098765],
[-0.218107 , 0.14814815, 0.07407407, -0.09876543]])
5.求矩阵的特征值和特征向量
value, vector = np.linalg.eig(A)
print(value)
print(vector)
输出特征值和特征向量:
[19.44501275+0.j -3.14273158+4.92356561j -3.14273158-4.92356561j
-5.1595496 +0.j ]
[[-0.21622605+0.j 0.65565157+0.j 0.65565157-0.j
-0.14138165+0.j ]
[-0.63512215+0.j -0.20739702-0.41062277j -0.20739702+0.41062277j
-0.56296376+0.j ]
[-0.52270244+0.j -0.04817398-0.18804402j -0.04817398+0.18804402j
0.81420911+0.j ]
[-0.52597368+0.j -0.28748042+0.48802679j -0.28748042-0.48802679j
-0.01210621+0.j ]]
矩阵分解
1.矩阵特征分解
value, vector = np.linalg.eig(A)
sigma_matrix = np.diag(value)
print("特征值构成的对角阵",sigma_matrix)
np.allclose(A,np.dot(np.dot(vector , sigma_matrix) , np.linalg.inv(vector)))
特征值构成的对角阵 [[19.44501275+0.j 0. +0.j 0. +0.j
0. +0.j ]
[ 0. +0.j -3.14273158+4.92356561j 0. +0.j
0. +0.j ]
[ 0. +0.j 0. +0.j -3.14273158-4.92356561j
0. +0.j ]
[ 0. +0.j 0. +0.j 0. +0.j
-5.1595496 +0.j ]]
True
2.奇异值分解
U,Sigma,V_h = np.linalg.svd(A,full_matrices=True,compute_uv=True)
Sigma_matrix = np.diag(Sigma)
print("奇异值为",Sigma)
print("奇异矩阵",Sigma_matrix)
奇异值为 [20.65300001 6.64383105 5.32940964 4.68086452]
奇异矩阵 [[20.65300001 0. 0. 0. ]
[ 0. 6.64383105 0. 0. ]
[ 0. 0. 5.32940964 0. ]
[ 0. 0. 0. 4.68086452]]
np.mean([1,2,3,4])
np.std([1,2,3,4])
np.mean(A)
np.std(A)
np.cov(A)
下面打印的为A的协方差,A的每行看做一个变量
array([[ 4.91666667, -2.83333333, 0.33333333, 0.75 ],
[-2.83333333, 13.66666667, -7. , 0.16666667],
[ 0.33333333, -7. , 8.66666667, -1. ],
[ 0.75 , 0.16666667, -1. , 0.25 ]])
概率统计
- 二项分布和伯努利分布的关系
二项分布和伯努利分布:二项分布即重复n次伯努利试验,各试验之间相互独立 - 全概率公式和贝叶斯公式
[图来自Datawhale学习资料,见顶部链接]
信息论
1.熵 Entropy越小,混乱程度小,不确定小,纯度高。 2.交叉熵用来求目标与预测值之间的差距,深度学习较常用
最小二乘估计
损失函数取 预测值与真实值差值的平方的和,最小化这个损失。
参考资料: 1.关于特征值分解和奇异值分解部分:特征值分解和奇异值分解 写的超清晰。 4. Datawhale学习资料
|