博舍

图解AI数学基础 AI数学基础

图解AI数学基础

作者:韩信子@ShowMeAI教程地址:www.showmeai.tech/tutorials/8…本文地址:www.showmeai.tech/article-det…声明:版权所有,转载请联系平台与作者并注明出处

1.标量(Scalar)

一个标量就是一个单独的数。只具有数值大小,没有方向(部分有正负之分),运算遵循一般的代数法则。

一般用小写的变量名称表示。质量mmm、速率vvv、时间ttt、电阻ρ hoρ等物理量,都是数据标量。2.向量(Vector)

向量指具有大小和方向的量,形态上看就是一列数。

通常赋予向量粗体小写的名称;手写体则在字母上加一个向右的箭头。

向量中的元素是有序排列的,通过索引可以确定每个元素。

以下两种方式,可以明确表示向量中的元素时(注意用方括号)。

可以把向量看作空间中的有向线段,向量的每个组成元素,对应向量在不同的坐标轴上的投影长度。

AI中的应用:在机器学习中,单条数据样本的表征都是以向量化的形式来完成的。向量化的方式可以帮助AI算法在迭代与计算过程中,以更高效的方式完成。

3.矩阵(Matrix)

矩阵是二维数组,其中的每一个元素被两个索引确定。矩阵在机器学习中至关重要,无处不在。

通常会赋予矩阵粗体大写的变量名称。

AI中的应用:样本以矩阵形态表示:mmm条数据/样本,nnn个特征的数据集,就是一个m×nm imesnm×n的矩阵。

4.张量(Tensor)

几何代数中定义的张量,是基于向量和矩阵的推广。

标量,可以视为零阶张量向量,可以视为一阶张量矩阵,可以视为二阶张量

图片以矩阵形态表示:将一张彩色图片表示成一个H×W×CH imesW imesCH×W×C的三阶张量,其中HHH是高,WWW是宽,CCC通常取3,表示彩色图3个颜色通道。在这个例子的基础上,将这一定义继续扩展,即:用四阶张量(样本,高度,宽度,通道)表示一个包含多张图片的数据集,其中,样本表示图片在数据集中的编号。用五阶张量(样本,帧速,高度,宽度,通道)表示视频。

AI中的应用:张量是深度学习中一个非常重要的概念,大部分的数据和权重都是以张量的形态存储的,后续的所有运算和优化算法也都是基于张量进行的。

5.范数(Norm)

范数是一种强化了的距离概念;简单来说,可以把『范数』理解为『距离』。

在数学上,范数包括『向量范数』和『矩阵范数』:

向量范数(VectorNorm),表征向量空间中向量的大小。向量空间中的向量都是有大小的,这个大小就是用范数来度量。不同的范数都可以来度量这个大小,就好比米和尺都可以来度量远近一样。

矩阵范数(MatrixNorm),表征矩阵引起变化的大小。比如,通过运算AX=Boldsymbol{A}oldsymbol{X}=oldsymbol{B}AX=B,可以将向量Xoldsymbol{X}X变化为Boldsymbol{B}B,矩阵范数就可以度量这个变化的大小。

向量范数的计算:

对于p−mathrm{p}-p−范数,如果x=[x1,x2,⋯ ,xn]Toldsymbol{x}=left[x_{1},x_{2},cdots,x_{n} ight]^{mathrm{T}}x=[x1​,x2​,⋯,xn​]T,那么向量xoldsymbol{x}x的p−mathrm{p}-p−范数就是∥x∥p=(∣x1∣p+∣x2∣p+⋯+∣xn∣p)1p|oldsymbol{x}|_{p}=left(left|x_{1} ight|^{p}+left|x_{2} ight|^{p}+cdots+left|x_{n} ight|^{p} ight)^{frac{1}{p}}∥x∥p​=(∣x1​∣p+∣x2​∣p+⋯+∣xn​∣p)p1​。

L1范数:∣∣x∣∣1=∣x1∣+∣x2∣+∣x3∣+⋯+∣xn∣||oldsymbol{x}||_{1}=left|x_{1} ight|+left|x_{2} ight|+left|x_{3} ight|+cdots+left|x_{n} ight|∣∣x∣∣1​=∣x1​∣+∣x2​∣+∣x3​∣+⋯+∣xn​∣

p=1mathrm{p}=1p=1时,就是L1范数,是xoldsymbol{x}x向量各个元素的绝对值之和。

L1范数有很多的名字,例如我们熟悉的曼哈顿距离、最小绝对误差等。

L2范数:∥x∥2=(∣x1∣2+∣x2∣2+∣x3∣2+⋯+∣xn∣2)1/2|oldsymbol{x}|_{2}=left(left|x_{1} ight|^{2}+left|x_{2} ight|^{2}+left|x_{3} ight|^{2}+cdots+left|x_{n} ight|^{2} ight)^{1/2}∥x∥2​=(∣x1​∣2+∣x2​∣2+∣x3​∣2+⋯+∣xn​∣2)1/2

p=2mathrm{p}=2p=2时,就是L2范数,是xoldsymbol{x}x向量各个元素平方和的开方。

L2范数是我们最常用的范数,欧氏距离就是一种L2范数。

AI中的应用:在机器学习中,L1范数和L2范数很常见,比如『评估准则的计算』、『损失函数中用于限制模型复杂度的正则化项』等。

6.特征分解(Eigen-decomposition)

将数学对象分解成多个组成部分,可以找到他们的一些属性,或者能更高地理解他们。例如,整数可以分解为质因数,通过12=2×3×312=2 imes3 imes312=2×3×3可以得到『12的倍数可以被3整除,或者12不能被5整除』。

同样,我们可以将『矩阵』分解为一组『特征向量』和『特征值』,来发现矩阵表示为数组元素时不明显的函数性质。特征分解(Eigen-decomposition)是广泛使用的矩阵分解方式之一。

特征向量:方阵Aoldsymbol{A}A的特征向量,是指与Aoldsymbol{A}A相乘后相当于对该向量进行缩放的非零向量,即Aν=λνoldsymbol{A} u=lambda uAν=λν。

特征值:标量λlambdaλ被称为这个特征向量对应的特征值。

使用特征分解去分析矩阵Aoldsymbol{A}A时,得到特征向量ν uν构成的矩阵Qoldsymbol{Q}Q和特征值构成的向量Λoldsymbol{Lambda}Λ,我们可以重新将Aoldsymbol{A}A写作:A=QΛQ−1oldsymbol{A}=oldsymbol{Q}oldsymbol{Lambda}oldsymbol{Q}^{-1}A=QΛQ−1

7.奇异值分解(SingularValueDecomposition,SVD)

矩阵的特征分解是有前提条件的。只有可对角化的矩阵,才可以进行特征分解。实际很多矩阵不满足这一条件,这时候怎么办呢?

将矩阵的『特征分解』进行推广,得到一种被称为『矩阵的奇异值分解』的方法,即将一个普通矩阵分解为『奇异向量』和『奇异值』。通过奇异值分解,我们会得到一些类似于特征分解的信息。

将矩阵Aoldsymbol{A}A分解成三个矩阵的乘积A=UDV−1oldsymbol{A}=oldsymbol{U}oldsymbol{D}oldsymbol{V}^{-1}A=UDV−1。

假设Aoldsymbol{A}A是一个m∗nm*nm∗n矩阵,那么Uoldsymbol{U}U是一个m∗mm*mm∗m矩阵,DDD是一个m∗nm*nm∗n矩阵,VVV是一个n∗nn*nn∗n矩阵。

UVDoldsymbol{U}oldsymbol{V}oldsymbol{D}UVD这几个矩阵都拥有特殊的结构:

Uoldsymbol{U}U和Voldsymbol{V}V都是正交矩阵,矩阵Uoldsymbol{U}U的列向量被称为左奇异向量,矩阵Voldsymbol{V}V的列向量被称右奇异向量。

Doldsymbol{D}D是对角矩阵(注意,Doldsymbol{D}D不一定是方阵)。对角矩阵Doldsymbol{D}D对角线上的元素被称为矩阵Aoldsymbol{A}A的奇异值。

AI中的应用:SVD最有用的一个性质可能是拓展矩阵求逆到非方矩阵上。而且大家在推荐系统中也会见到基于SVD的算法应用。

8.Moore-Penrose广义逆/伪逆(Moore-PenrosePseudoinverse)

假设在下面问题中,我们想通过矩阵Aoldsymbol{A}A的左逆Boldsymbol{B}B来求解线性方程:Ax=yoldsymbol{A}x=yAx=y,等式两边同时左乘左逆B后,得到:x=Byx=oldsymbol{B}yx=By。是否存在唯一的映射将Aoldsymbol{A}A映射到Boldsymbol{B}B,取决于问题的形式:

如果矩阵Aoldsymbol{A}A的行数大于列数,那么上述方程可能没有解;

如果矩阵Aoldsymbol{A}A的行数小于列数,那么上述方程可能有多个解。

Moore-Penrose伪逆使我们能够解决这种情况,矩阵Aoldsymbol{A}A的伪逆定义为:

A+=lim⁡a→0(ATA+αI)−1AToldsymbol{A}^{+}=lim_{a ightarrow0}left(oldsymbol{A}^{T}oldsymbol{A}+alphaoldsymbol{I} ight)^{-1}oldsymbol{A}^{T}A+=lima→0​(ATA+αI)−1AT

但是计算伪逆的实际算法没有基于这个式子,而是使用下面的公式:

A+=UD+VToldsymbol{A}^{+}=oldsymbol{U}oldsymbol{D}^{+}oldsymbol{V}^{T}A+=UD+VT

矩阵Uoldsymbol{U}U、Doldsymbol{D}D和VToldsymbol{V}^{T}VT是矩阵Aoldsymbol{A}A奇异值分解后得到的矩阵;

对角矩阵Doldsymbol{D}D的伪逆D+oldsymbol{D}^{+}D+是其非零元素取倒之后再转置得到的。

9.常用的距离度量

在机器学习里,大部分运算都是基于向量的,一份数据集包含n个特征字段,那每一条样本就可以表示为n维的向量,通过计算两个样本对应向量之间的距离值大小,有些场景下能反映出这两个样本的相似程度。还有一些算法,像KNN和K-means,非常依赖距离度量。

设有两个nnn维变量:

A=[x11,x12,...,x1n]TA=[x_{11},x_{12},...,x_{1n}]^{T}A=[x11​,x12​,...,x1n​]T

B=[x21,x22,...,x2n]TB=[x_{21},x_{22},...,x_{2n}]^{T}B=[x21​,x22​,...,x2n​]T

一些常用的距离公式定义如下:

1)曼哈顿距离(ManhattanDistance)

曼哈顿距离也称为城市街区距离,数学定义如下:

d12=∑k=1n∣x1k−x2k∣d_{12}=sum_{k=1}^{n}{|x_{1k}-x_{2k}|}d12​=∑k=1n​∣x1k​−x2k​∣

曼哈顿距离的Python实现:

importnumpyasnpvector1=np.array([1,2,3])vector2=np.array([4,5,6])manhaton_dist=np.sum(np.abs(vector1-vector2))print("曼哈顿距离为",manhaton_dist)复制代码

前往我们的在线编程环境运行代码:blog.showmeai.tech/python3-com…

2)欧氏距离(EuclideanDistance)

欧氏距离其实就是L2范数,数学定义如下:

d12=∑k=1n(x1k−x2k)2d_{12}=sqrt{sum_{k=1}^{n}{(x_{1k}-x_{2k})^{2}}}d12​=∑k=1n​(x1k​−x2k​)2​

欧氏距离的Python实现:

importnumpyasnpvector1=np.array([1,2,3])vector2=np.array([4,5,6])eud_dist=np.sqrt(np.sum((vector1-vector2)**2))print("欧式距离为",eud_dist)复制代码

前往我们的在线编程环境运行代码:blog.showmeai.tech/python3-com…

3)闵氏距离(MinkowskiDistance)

从严格意义上讲,闵可夫斯基距离不是一种距离,而是一组距离的定义:

d12=∑k=1n(x1k−x2k)ppd_{12}=sqrt[p]{sum_{k=1}^{n}{(x_{1k}-x_{2k})^{p}}}d12​=p∑k=1n​(x1k​−x2k​)p​

实际上,当p=1p=1p=1时,就是曼哈顿距离;当p=2p=2p=2时,就是欧式距离。

前往我们的在线编程环境运行代码:blog.showmeai.tech/python3-com…

4)切比雪夫距离(ChebyshevDistance)

切比雪夫距离就是无穷范数,数学表达式如下:

d12=max(∣x1k−x2k∣)d_{12}=max(|x_{1k}-x_{2k}|)d12​=max(∣x1k​−x2k​∣)

切比雪夫距离的Python实现如下:

importnumpyasnpvector1=np.array([1,2,3])vector2=np.array([4,5,6])cb_dist=np.max(np.abs(vector1-vector2))print("切比雪夫距离为",cb_dist)复制代码

前往我们的在线编程环境运行代码:blog.showmeai.tech/python3-com…

5)余弦相似度(CosineSimilarity)

余弦相似度的取值范围为[-1,1],可以用来衡量两个向量方向的差异:

夹角余弦越大,表示两个向量的夹角越小;当两个向量的方向重合时,夹角余弦取最大值1;当两个向量的方向完全相反时,夹角余弦取最小值-1。

机器学习中用这一概念来衡量样本向量之间的差异,其数学表达式如下:

cosθ=AB∣A∣∣B∣=∑k=1nx1kx2k∑k=1nx1k2∑k=1nx2k2cos heta=frac{AB}{|A||B|}=frac{sum_{k=1}^{n}{x_{1k}x_{2k}}}{sqrt{sum_{k=1}^{n}{x_{1k}^{2}}}sqrt{sum_{k=1}^{n}{x_{2k}^{2}}}}cosθ=∣A∣∣B∣AB​=∑k=1n​x1k2​​∑k=1n​x2k2​​∑k=1n​x1k​x2k​​

夹角余弦的Python实现:

importnumpyasnpvector1=np.array([1,2,3])vector2=np.array([4,5,6])cos_sim=np.dot(vector1,vector2)/(np.linalg.norm(vector1)*np.linalg.norm(vector2))print("余弦相似度为",cos_sim)复制代码

前往我们的在线编程环境运行代码:blog.showmeai.tech/python3-com…

6)汉明距离(HammingDistance)

汉明距离定义的是两个字符串中不相同位数的数目。例如,字符串‘1111’与‘1001’之间的汉明距离为2。信息编码中一般应使得编码间的汉明距离尽可能的小。

d12=∑k=1n(x1k⊕x2k)d_{12}=sum_{k=1}^{n}left(x_{1k}oplusx_{2k} ight)d12​=∑k=1n​(x1k​⊕x2k​)

汉明距离的Python实现:

importnumpyasnpa=np.array([1,1,1,1,1,1,0,1,1,0,1,1,1,0,0,0,0,1,1,1,0])b=np.array([1,1,1,1,0,1,1,0,1,0,1,0,1,0,1,0,0,1,1,0,1])hanm_dis=np.count_nonzero(a!=b)print("汉明距离为",hanm_dis)复制代码

前往我们的在线编程环境运行代码:blog.showmeai.tech/python3-com…

7)杰卡德系数(JaccardIndex)

两个集合AAA和BBB的交集元素在AAA和BBB的并集中所占的比例称为两个集合的杰卡德系数,用符号J(A,B)J(A,B)J(A,B)表示,数学表达式为:

J(A,B)=∣A∩B∣∣A∪B∣J(A,B)=frac{|AcapB|}{|AcupB|}J(A,B)=∣A∪B∣∣A∩B∣​

杰卡德相似系数是衡量两个集合的相似度的一种指标。一般可以将其用在衡量样本的相似度上。

前往我们的在线编程环境运行代码:blog.showmeai.tech/python3-com…

8)杰卡德距离(JaccardDistance)

与杰卡德系数相反的概念是杰卡德距离,其定义式为:

Jσ=1−J(A,B)=∣A∪B∣−∣A∩B∣∣A∪B∣J_{sigma}=1-J(A,B)=frac{|AcupB|-|AcapB|}{|AcupB|}Jσ​=1−J(A,B)=∣A∪B∣∣A∪B∣−∣A∩B∣​

杰卡德距离的Python实现:

importnumpyasnpvec1=np.random.random(10)>0.5vec2=np.random.random(10)>0.5vec1=np.asarray(vec1,np.int32)vec2=np.asarray(vec2,np.int32)up=np.double(np.bitwise_and((vec1!=vec2),np.bitwise_or(vec1!=0,vec2!=0)).sum())down=np.double(np.bitwise_or(vec1!=0,vec2!=0).sum())jaccard_dis=1-(up/down)print("杰卡德距离为",jaccard_dis)复制代码

前往我们的在线编程环境运行代码:blog.showmeai.tech/python3-com…

ShowMeAI相关文章推荐图解线性代数与矩阵论图解信息论图解微积分与最优化ShowMeAI系列教程推荐图解Python编程:从入门到精通系列教程图解数据分析:从入门到精通系列教程图解AI数学基础:从入门到精通系列教程图解大数据技术:从入门到精通系列教程

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。

上一篇

下一篇