人工智能数学基础--核心篇
《人工智能数学基础》唐宇迪 ----学习笔记
1.线性代数基础
1.1向量
1.2矩阵
线性方程组AX=B

代码实现矩阵创建
import numpy as np
A=[[1,2,3,4],[5,6,7,8],[9,10,11,12]]
arr1=np.array(A) #将列表转化为矩阵
print("A=",A)
函数 np.random.random((d0,d1,…,dn))生成值为[0,1)区间的n维浮点数组。函数np.random.random((d0,d1))创建d0×dl阶矩阵。
函数 np.random.randint(low, high=None, size=None, dtype=T),返回随机整数,范围为[low,high ) 。size 为数组维度,对于d0×dl阶矩阵,设size=[d0,dl]。dtype为数据类型,默认的数据类型是np.int ,没有high 时,默认生成随机数的范围是[0,low)。
零矩阵:在NumPy 中,通过np.zeros()函数创建零矩阵,只需传入一个表示形状的元组即可。
单位矩阵:在 NumPy中,可以通过np.eye()函数或者np.identity()函数创建单位矩阵。
对角矩阵:当以元组或列表的形式给出对角线元素,使用np.diag()函数可以创建以这几个元素为对角线的方阵。np.diag(函数也可以作用于方阵,获得方阵的对角线元素。
在 NumPy中,对于array类型和matix类型,实现矩阵乘法的方法不同。
(1)对于array类型,可以通过np.dot()函数或np.matmul()函数实现矩阵的乘积,对于一维数组,可实现两个数组对应元素的乘积之和。c=np.dot(A,B)
A.dot(B)与np.dot(A,B)计算的值相同。
dot运算可以对一维数组使用,但是不能对向量直接相乘,如[[1,2.3]].dot([[4,5,6])会报错。
(2)NumPy中对于array类型可以采用两种方法实现两个同型矩阵中对应元素的相乘,一个是使用np.multiply(函数,另外一个是使用*。
(3)对matix类型,可使用np.dot()函数或*做矩阵的乘法,使用np.multiply()函数实现同型矩阵对应元素的乘积。
(4)对 array类型,矩阵的乘方需要通过多次dot运算得到。对matrix类型,可以通过**n得到,但要求必须是方阵;对array类型,**n是每个元素的n次方,不要求是方阵。
1.3行列式
在NumPy 中,方阵的行列式可以使用np.linalg.det()函数得到。
1.4矩阵的秩

在 NumPy 中,通过np.linalg.matrix_rank(函数可以计算出矩阵的秩。
1.5内积与正交
1.内积

使用np.dot()函数实现向量运算
2.向量长度
为n维向量x的长度,当||x||=1时,称x为单位向量。
3.向量的正交
当向量x和向量y的内积=0时,称x与y正交。
4.标准正交基

2.特征值与矩阵分解
矩阵与向量相乘是对向量进行线性变换,是对原始向量同时施加方向和长度的变化。通常情况下,绝大部分向量都会被这个矩阵变换得“面目全非”,但是存在一些特殊的向量,被矩阵变换之后,仅有长度变化。用数学公式表示为Ax=入x,其中x为向量,入对应长度变化比例,称a为特征值,x为入对应的特征向量。
矩阵的特征值和特征向量的动态意义在于表示变化的速度和方向
2.1特征值特征向量求解
在NumPy 中通过向np.linalg.eig()函数传递方阵A,根据np.linalg.eig()函数的返回值,得到方阵A的特征值和特征向量。
python求解:
import numpy as np
B=[[4,2],[1,51]]
A= np.array(B)
eig_val,eig_vex=np.linalg.eig(A)#eig()时数求解特征值和特征向量
print("A的特征值为\n",eig_val)
print("A的特征向量为\n",eig_vex)
2.2.特征空间
一个特征值对应的所有特征向量所组成的空间,称为特征空间。当特征值确定,特征空间确定。
2.3特征值分解
特征值分解是矩阵分解的一种方法。矩阵分解也称为矩阵因子分解,即将原始矩阵表示成新的结构简单或者具有特殊性质的两个或多个矩阵的乘积,类似于代数中的因子分解,如将16分解为两个数的乘积,16=1×16、16=2×8、16=4×4都合理。
特征值分解的前提:A必须是n阶方阵且可对角化。
(1)特征值表示对应的特征向量的重要程度,特征值越大,代表包含的信息量越多;特征值越小,说明其信息量越小。借助此性质,可以实现矩阵的压缩,即在特征值分解后,保留比较大的特征值及其对应的特征向量,舍弃比较小的特征值及其对应的特征向量,以此达到压缩矩阵的目的。虽然数据量减小,但有用的信息量变化不大,PCA降维就是基于这种思路。
(2)特征值分解要求待分解的矩阵必须是n维方阵,将特征值分解算法推广到所有矩阵之上,就是更加通用的奇异值分解(SVD )。
2.4SVD解决的问题
人天生就有非常好的抽取重要特征的能力,而SVD就是一个让机器学会抽取重要特征的方法。
奇异值分解(SVD)是将任意较复杂的矩阵用更小、更简单的3个子矩阵的相乘表示,用这3个小矩阵来描述大矩阵重要的特性。如上例,在保持原用户量和原商品数量的前提下,将原矩阵分解为3个小矩阵相乘,第1个是100万×10阶的矩阵与用户信息有关,第3个是10×10万阶的矩阵与商品有关,第2个则是10×10阶的矩阵可看作第1个和第3个矩阵的桥梁。显然这3个矩阵的元素个数加起来的存储量远远小于原矩阵,在套用各种学习算法时,计算量将大大缩减。这样分解实际上是去除噪声和冗余信息,以此达到优化数据的目的。SVD的缺点是数据的转换可能难以理解,如第2矩阵的大小为什么会是10×10。
利用SVD可以从稀疏矩阵(矩阵中有大量元素值为О)中提取有价值的信息,减少计算量,在使用线性代数的地方,基本上都要使用SVD。SVD不仅仅应用在PCA、图像压缩、数字水印、推荐系统和文章分类、LSA(隐性语义分析)、特征压缩(或称数据降维)中,在信号分解、信号重构、信号降噪、数据融合、目标识别、目标跟踪、故障检测和神经网络等方面也有很好的应用,是很多机器学习算法的基石。SVD 的使用与具体的应用场景相关。
2.5SVD奇异值分解
SVD适用于对任意矩阵进行矩阵分解,是一种重要的矩阵分解方法。
import numpy as np
from numpy import linalg as la#简化下面的写法
A=[[1,5,7,6,1],[2,1,10,4,4],[3,6,7,5,2]]
A=np.array(A)
B=A.dot(A.T) #A×A个T
C=A.T.dot(A) #A^T×A
eig_val1,eig_vex1=np. linalg.eig(B)
eig_val2,eig_vex2=np. linalg.eig(C)
print("A的秩=",la.matrix_rank(A))
print("A.dot(A.T)的秩=", la.matrix_rank(B)," A.T.dot(A)的秩=",la.matrix_rank(C))
print("A.dot(A.T)的特征值=" ,np.round(eig_val1,2))
print("A.T.dot(A)的特征值=",np.round(eig_val2,2))
print("A.dot(A.T)的特征向量=\n",np.round(eig_vex1,2))
print("A.T.dot(A)的特征向量=\n",np.round(eig_vex2,2))
SVD对应公式: , U和V是正交矩阵。

求解SVD就是求解U、E和V这3个矩阵,而求解这3个矩阵就是求解特征值和特征向量,可以通过以下两种方法求出。
(1)按照定义进行求解
(2)利用numpy中的linalg的线性代数工具箱svd()函数求解
svd()函数将奇异值以行向量形式返回并且将元素从大到小排列,并没有返回奇异值矩阵,因为奇异值矩阵除了对角元素其他均为0,所以,仅返回对角元素能节省空间。
import numpy as np
from numpy import linalg as la#简化下面的写法
A=[[1,5,7,6,1],[2,1,10,4,4],[3,6,7,5,2]]
A=np.array(A)
U,s,VT = la.svd(A)
#创建一个与A大小一样的零矩阵
Sigma=np.zeros(np.shape(A))
#生成奇异值矩阵,该矩阵的对角元素为奇异值
Sigma[ :len(s), :len(s)]=np.diag(s)
print("左奇异值矩阵:In",U)
print("奇异值:",s)
print("奇异值矩阵:\n",Sigma)
print("右奇异矩阵的转置:\n",VT)
利用SVD重构矩阵
B=U.dot(Sigma.dot(VT))
#SVD 还原后的数据
print("原矩阵A:\n",A)
print("重构后的矩阵B:\n",B)
print("原矩阵A与重构后的矩阵B是否相同",np.allclose(A,B))
利用SVD进行矩阵近似
上例中,SVD得到的特征值的前两项较大,最后一项值较小。通过取不同的k值,分别对应于取U的前k列,E变成k阶方阵,V取前k行,对比利用矩阵乘积得到的新矩阵与原始数据的情况。
for k in range(3,0,-1):#SVD还原后的数据
#U[:,:k]代表前k列,Sigma[:k,:k]代表k阶方阵,VT[:k,:]代表K行
D=U[:,:k].dot(Sigma[:k,:k ].dot(VT[:k,:]))
print("k=", k,"压缩后的矩阵:\n",np.round(D,1))#取整是为便于观察数据
从结果可看到,SVD后特征值主要集中在前两个数上,当k取2时,得到的新矩阵与原矩阵较接近,虽然有些差异,但大多数信息是完好的。因此,可以选取合适的k值,保留比较大的奇异值及特征向量,实现用较少的数据量达到较好的矩阵近似效果。
使用上面的近似公式分解矩阵A时,存储空间由m×n减少到mxk+kxk+kxn=k×(m+k+n),通常情况下,k <<m,n,所以k×(m+k+n)<<m×n,对矩阵进行运算的计算量随维数减少而减少很多。通过选取适当的k值,将数据用低维表示,实现通过对原始数据的逼近以达到压缩、降维、去除噪声和冗余数据的目的。
使用SVD要考虑的问题之一:保留奇异值的个数k是多少? svd()函数对求出的奇异值和奇异向量按从大到小进行了排序,其中值明显大的前k项最重要。确定k有很多启发式的策略,其中一个典型的做法就是保留矩阵中90%的能量信息,即计算所有奇异值的平方和,取前k个奇异值平方和是总体奇异值平方和的90%。另一个启发式策略是当矩阵有上万的奇异值时,就保留前面的2000或3000个,该方法虽然在实际中容易实施,但是任何数据集都不能保证前3000个奇异值就能够包含90%的能量信息,所以,通常情况下,使用者要对数据有足够的了解,进而再确定k的值。
3.概率论基础
3.1随机事件及其概率
3.1.1样本空间和随机事件
在同一条件下,对现实世界中的某一问题重复进行多次试验或观测,如果试验满足以下3条特征,我们称之为随机试验。
(1)可以在相同条件下重复执行。
(2)事先就能知道可能出现的结果。
(3)试验开始前并不确定这一次的结果。
随机试验中的每一个可能出现的试验结果称为一个样本点,所有可能出现的试验结果组成的集合称为样本空间
通常我们不关心样本空间中所有的结果,只关注某些有特定意义的结果,这些结果是样本空间的子集,称为随机事件,简称事件。
3.1.2古典概型
古典概型是概率论中最直观、最简单的模型,是从抛硬币、掷骰子、猜扑克牌等博弈游戏中发展而来。古典概型中样本空间只有有限个样本点,并且每个样本点构成的基本事件发生的概率是相同的,因此古典概型又称为等可能概型。
3.2条件概率
一个随机事件发生的概率并非是一个绝对的概念,事实上,当另一个与其相关的随机事件发生后,该事件再发生的概率往往会随之改变。如对于某球队,赛前夺冠的概率是0.1,但如果已知该球队已经小组出线了,那么该球队夺冠的概率就会大大增加,这时的概率称为条件概率。
设A,B为随机事件,且P(A)>0,则有P(B|A)=P(AB)/P(A),称(B|A)为在事件A发生的条件下,事件B发生的概率。
3.3独立性
独立性是指试验中的两个随机事件A和B的发生概率互不影响,或多次重复试验都是独立进行的,每次试验结果的概率不受其他各次试验结果的影响。
设A,B两事件满足等式P(AB) = P(A)P(B),则称事件A与事件B相互独立(简称独立)。
3.4随机变量
变量X表示“抛掷3次骰子,出现6点的次数”,那么试验结果中“出现6点的次数”是1次、2次还是3次?因为试验结果是随机的,所以变量X的值也是随机的,故变量X称为随机变量。随机变量是一种函数映射关系,能够将样本空间转换到实数域,其核心是把随机试验的结果数值化.用随机变量表示随机试验的结果,从而将微积分工具引入随机现象的研究中。
3.5二维随机变量
设(X,Y )是二维随机变量,对于任意实数x,y,有如下二元函数,则称这个函数为二维随机变量(X,Y)的分布函数,或称为随机变量(X,Y )的联合分布函数。
3.6边缘分布
设二维随机变量(X,Y)具有分布函数F(x,y),其中X和Y都是随机变量,也各有自己的分布函数,将它们分别记为Fx(x)、Fy(y),称之为二维随机变量(X,Y)关于X和Y边缘分布的分布函数。
4.随机变量与概率估计
4.1随机变量数字特征
4.1.1数学期望
(1)离散型随机变量的数学期望
数学期望亦称期望、期望值等,简单地说就是“平均值”,是以概率为权的加权平均值。一个离散型随机变量的期望值是试验中所有可能出现的结果的概率乘以其结果的总和。
(2)连续型随机变量的数学期望
连续型的随机变量的期望值与离散型随机变量的期望值算法相似,但由于连续型的输出值是连续的,所以把求和改成了积分。
(3)性质:
设C是常数,则E(C)= C。若C是常数,则E(CX)=CE(X)。
E(X+Y)=E(X)+E(Y)。设X,Y独立,则E(XY )=E(X)E(Y)(对于多个独立变量也适用)。
4.1.2方差
随机变量的期望是对随机变量取值平均水平的综合评价,而方差是衡量随机变量取值波动性的另一个重要数字特征。

方差刻画了随机变量X的取值与数学期望的偏离程度,它的大小可以衡量随机变量取值的稳定性。从方差的定义易见:若X的取值比较集中,则方差较小;若X的取值比较分散,则方差较大。
4.2大数定律和中心极限定理
大数定律描述了在试验不变的条件下,重复试验多次,随机事件最后的频率无限接近事件概率。大数定律成功地通过数学语言将现实生活中的现象表达出来,赋予其确切的数学含义。中心极限定理告诉我们在自然界与生产中,一些现象受到许多相互独立的随机因素的影响,如果每个因素所产生的影响都很微小时,总的影响可以看作服从正态分布。中心极限定理从数学上证明了这一现象。
大数定律与中心极限定理是现代概率论、统计学、理论科学和社会科学的基石。
4.2.1大数定律
辛钦大数定律:
4.2.2中心极限定理

4.3数理统计基本概念
4.3.1简单随机抽样
总体和样本是数理统计中的两个基本概念,总体就是要研究的随机变量X,从总体中抽取个体的过程称为抽样,抽样得到X的一组试验数据(或观测值)称为样本。对总体的研究方法是根据获得的样本对总体的分布做出推断。例如考察由某种型号灯泡的寿命所构成总体的分布时,可随机抽取一些批次灯泡作为样本对总体进行推断。我们对总体的研究,就是对相应的随机变量X的分布的研究。通常不区分总体和随机变量,笼统称为总体X。
从总体中抽取的样本如果满足下述两个条件,则这种随机的、独立的抽样方法称为简单随机抽样。
(1)代表性:因抽取样本要反映总体,自然要求每个个体和总体具有相同分布。
(2)独立性:各次抽取必须是相互独立的,即每次抽样的结果既不影响其他各次抽样的结果,也不受其他各次抽样结果的影响。
满足这两个条件的样本称为简单随机样本。本书中凡是提到抽样与样本都是指简单随机抽样和简单随机样本。
4.3.2常用统计量

4.3.3参数估计
在实际问题中,当所研究的总体分布类型已知,但分布中含有一个或多个未知参数时,如何根据样本来估计未知参数?这就是参数估计问题。例如,灯泡的寿命X是一个总体﹐根据实际经验可知,X服从N(u,o2),但参数u,o2是未知的,u,o2为待估计的参数。此类问题就属于参数估计问题。
参数估计问题分为点估计与区间估计两类。所谓点估计就是构造一个统计量,用该统计量的观察值作为总体未知参数的估计值;区间估计就是对于未知参数给出一个范围,并且在一定的可靠度下使这个范围内包含未知参数。
4.4最大似然估计
4.4.1似然函数
似然函数L(x;0)是一个概率密度函数f(x|0),表示在参数0下样本数据发生的可能性。例如,现在有一批往年下雨的数据样本X、是否下雨是由某些气象指标控制,如参数0表示空气的湿度,L(x;0)就表示在湿度参数0下下雨的可能性,参数0可以取值,每个参数0,会得到对应的似然函数值。如果某个0,似然函数值大,代表该样本在参数0,下发生的可能性更大些,所以把它称为“似然函数”,用来表示参数0取值和样本数据的关联程度。
4.4.2最大似然估计
最大似然估计(Maximum Likelihood Estimation, MLE)是概率论中一个很常用的估计方法,对同一个似然函数,如果存在一个参数值0,使得似然函数值达到最大的话,那么这个值就最为“合理”,0称为参数的最大似然估计,简言之,概率最大的事件,最有可能发生。
求未知参数0的最大似然估计问题,归结为求似然函数L(x;0)的最大值点的问题。当似然函数关于未知参数可微时,可利用微分学中求最大值的方法来求解。
4.5最大后验估计


魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)