打卡Datawhale31期Task01

这篇博客通过实例展示了如何使用Python进行矩阵基础知识、矩阵秩、逆、广义逆、特征值和特征向量、奇异值分解等计算。重点在于将理论知识转化为代码实现,包括矩阵的生成、求逆、求伪逆、特征值和奇异值分解,并探讨了矩阵的协方差计算。此外,还提及了二项分布和伯努利分布的关系以及信息论中的熵和交叉熵概念。
摘要由CSDN通过智能技术生成

Task1主要学习绪论概述 和 数学基础两个部分。
学习资料点这里

数学基础介绍了矩阵、矩阵的秩、矩阵的逆、广义逆以及矩阵的SVD和特征向量分解两种分解方式。

因为我目的在于提升代码能力,所以看完理论把其中一些内容用代码记录出来。
(用jupyternotebook导出md,然后导入体验不错hhhh)

import numpy as np

矩阵基本知识

1.随机数生成一个矩阵

#  生成【0,10)之间,4*4的矩阵  
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) # 随机数生成0-1之间矩阵
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
# 服从二项分布的随机矩阵,n代表n次伯努利实验,p代表每次实验事件发生概率,返回值为发生次数
array([[6, 6, 7, 4],
       [5, 6, 6, 3],
       [6, 4, 6, 6],
       [4, 6, 3, 7]])

2.求矩阵的秩

np.linalg.matrix_rank(A)  # 求矩阵A的秩

输出:4

4

3.矩阵求逆

np.linalg.inv(A) # array类型,使用np.linalg.inv()。如果矩阵不可逆,会报错

输出为矩阵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]])
# 也可以先将A 转化为矩阵,然后求逆
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) # 如果B可逆,那么使用pinv与inv结果相同

输出伪逆:

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) # value为特征值,vector为特征向量
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) # value为特征值,vector为特征向量
sigma_matrix = np.diag(value) # np.diag将特征值 向量 转化为对角阵
print("特征值构成的对角阵",sigma_matrix)
# np.dot求矩阵乘法
np.allclose(A,np.dot(np.dot(vector , sigma_matrix) , np.linalg.inv(vector))) # 乘回去看下是否为原来的A
#np.allclose()比较两个array是不是每一元素都相等,默认在1e-05的误差范围内
特征值构成的对角阵 [[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) # 正交矩阵U,奇异值Sigma,正交矩阵V
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.cov([1,2,3,4])
np.mean(A) # 矩阵均值 这里得到一个标量
np.std(A) # 矩阵标准差  这里得到一个标量
np.cov(A)# more每行为一个变量.如果rowvar =False则每列为一个变量

下面打印的为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      ]])

概率统计

  1. 二项分布和伯努利分布的关系
    二项分布和伯努利分布:二项分布即重复n次伯努利试验,各试验之间相互独立
  2. 全概率公式和贝叶斯公式
    在这里插入图片描述
    [图来自Datawhale学习资料,见顶部链接]

信息论

1.熵 Entropy越小,混乱程度小,不确定小,纯度高。
2.交叉熵用来求目标与预测值之间的差距,深度学习较常用

最小二乘估计

损失函数取 预测值与真实值差值的平方的和,最小化这个损失。

参考资料:
1.关于特征值分解和奇异值分解部分:特征值分解和奇异值分解 写的超清晰。
4. Datawhale学习资料

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值