数据科学是一门跨学科领域,运用数学和高级统计方法进行预测。所有数据科学算法都直接或间接地使用数学概念。扎实的数学理解有助于您构建创新的数据科学解决方案,例如推荐系统。如果您的数学功底扎实,转入数据科学会更顺利。作为数据科学家,您需要运用数学的基本概念来解决问题。
除数学之外,您还需要具备领域知识、编程技能、商业能力、分析能力以及好奇心。对于数据科学家而言,数学是绕不开的。您必须自我培养并掌握数学与统计学基础,才能成为数据科学家。
标量与向量
标量(Scalar): 标量是一个单独的数字,通过标量乘法与空间中的向量发生作用。
向量(Vector): 向量 V 是一个有序的元素集合。向量是由数字构成的数组,可以是行或列。向量可以相加,也可以与称为标量的实数相乘。
图片来源
import numpy as np
v = np. array( [ 1 , 2 , 3 , 4 , 5 ] )
print ( v)
技术支持
[ 1 2 3 4 5 ]
技术支持
import numpy as np
a = np. array( [ 1 , 2 , 3 , 4 , 5 ] )
b = np. array( [ 1 , 2 , 3 , 4 , 5 ] )
add = a + b
print ( "Addition:" , add)
sub = a - b
print ( "Subtraction:" , sub)
mul = a * b
print ( "Multiplication:" , mul)
div = a / b
print ( "division" , div)
技术支持
Addition : [ 2 4 6 8 10 ]
Subtraction : [ 0 0 0 0 0 ]
Multiplication : [ 1 4 9 16 25 ]
division [ 1. 1. 1. 1. 1. ]
技术支持
矩阵与张量
矩阵(Matrix): 矩阵是一个 N 维数字数组,表示变换。您可以将矩阵视为一种变换,例如“缩放”“旋转”“剪切”和“翻转”。它会把空间中的单个点映射到空间中的另一个点。
import numpy as np
a1= np. array( [ [ 1 , 2 ] , [ 3 , 4 ] ] )
a2= np. array( [ [ 1 , 2 ] , [ 3 , 4 ] ] )
dot_product = np. dot( a1, a2)
print ( "Dot Product: \n" , dot_product)
cross_product = np. cross( a1, a2)
print ( "Cross Product: \n" , cross_product)
技术支持
Dot Product:
[ [ 7 10 ]
[ 15 22 ] ]
Cross Product:
[ 0 0 ]
技术支持
两个向量的点积表示一个向量在另一个向量上的投影;两个向量的叉积使一个向量能够确定两者可能同处的平面。
张量(Tensor): 有时您需要一个超过二维、且各维度大小可能不同的数组,按网格形式排列,即张量。张量的维度称为阶(rank)。标量和向量也是张量的一种:0 阶张量是标量,1 阶张量是向量。
图片来源
行列式
行列式是一个标量值,表示矩阵作为伸缩因子对长度(1 维)、面积(2 维)、体积(3 维)的影响。如果行列式为 2,则体积(3 维)变为原来的两倍;若为 1,则对体积(3 维)无影响;若为 0,则矩阵无逆,因为零与任何数相乘都为零。
性质:
如果您的矩阵表示一个可拉伸的玩具,那么该矩阵的行列式就显示您把玩具拉伸了多少。
import numpy as np
arr= np. array( [ [ 1 , 2 ] , [ 3 , 4 ] ] )
arr_det= np. linalg. det( arr)
print ( "Determinant:" , arr_det)
技术支持
Determinant : - 2.0000000000000004
技术支持
特征值与特征向量
方阵 A 的一个特征向量是一个非零向量 v,与 A 相乘时仅改变 v 的尺度。
图片来源
特征向量也称为特征矢量。当对其施加线性变换时,它只随标量因子变化,方向不变。
特征向量是线性变换的旋转轴,这些轴方向固定;特征值是矩阵放大或缩小的尺度因子。特征值也称为特征值或特征根。换言之,您可以理解为:特征向量给出限制线性变换行为的固定直线或平面,而线性变换的特征值是失真因子。
行列式给出线性变换下形状被缩放的面积(或体积)。因此,特征值的乘积等于行列式。
import numpy as np
arr= np. array( [ [ 1 , 2 ] , [ 3 , 4 ] ] )
eigenvalues, eigenvectors = np. linalg. eig( arr)
print ( "Eigen Values: \n" , eigenvalues)
print ( "Eigen Vectors:\n" , eigenvectors)
技术支持
Eigen Values:
[ - 0.37228132 5.37228132 ]
Eigen Vectors:
[ [ - 0.82456484 - 0.41597356 ]
[ 0.56576746 - 0.90937671 ] ]
技术支持
范数(NORM)函数
有时您需要度量向量的“大小”。范数函数帮助您度量向量的大小。除零向量外,它为向量空间中的向量赋予严格正的长度,其中包含 L^p 范数。它将向量映射为非负值。对于向量和矩阵,它等同于欧几里得距离。其值等于最大的奇异值。
import numpy as np
a = np. array( [ [ 1 , 2 , 3 ] , [ 4 , 5 , 6 ] , [ 7 , 8 , 9 ] ] )
a_norm = np. linalg. norm( a)
print ( a_norm)
技术支持
16.881943016134134
技术支持
矩阵分解
矩阵分解(亦称矩阵因式分解)用于将矩阵拆分为其组成部分。矩阵分解类似于对数字进行因式分解,例如将 10 分解为 2 × 5。它用于求解线性方程。
常见的矩阵分解技术包括:
LU 分解 :用于方阵,将矩阵分解为 L 与 U 两个部分。
QR 分解 :用于 m×n 矩阵(不限于方阵),将矩阵分解为 Q 与 R 两部分。与 LU 分解不同,它不局限于方阵。
Cholesky 分解 :用于求解线性回归的线性最小二乘问题,以及仿真与优化方法。
奇异值分解
在上一节中,我们看到矩阵的特征分解可将其分解为特征向量和特征值。奇异值分解是一种矩阵分解方法,可将矩阵分解为奇异向量与奇异值。它在信号处理、心理学、社会学、气候与大气科学、统计学和天文学等领域有广泛应用。
M 是一个 m×m 矩阵
U 是 m×n 的左奇异矩阵
Σ 是 n×n 的对角矩阵,元素为非负实数
V 是 m×n 的右奇异矩阵
V* 是 n×m 的矩阵,即 V 的转置
import numpy as np
a = np. array( [ [ 1 , 3 , 4 ] , [ 5 , 6 , 9 ] , [ 1 , 2 , 3 ] , [ 7 , 6 , 8 ] ] )
U, s, Vh = np. linalg. svd( a, full_matrices= False )
U, s, Vh
技术支持
( array ( [ [ - 0.27067357 , - 0.61678044 , 0.69789573 ] ,
[ - 0.65939972 , - 0.2937857 , - 0.62152182 ] ,
[ - 0.20244298 , - 0.3480035 , - 0.06765408 ] ,
[ - 0.67152413 , 0.64200111 , 0.34939247 ] ] ) ,
array ( [ 18.0376394 , 2.34360292 , 0.38870323 ] ) ,
array ( [ [ - 0.46961711 , - 0.51018039 , - 0.72053851 ] ,
[ 0.87911451 , - 0.19502274 , - 0.43488368 ] ,
[ - 0.08134773 , 0.83766467 , - 0.54009299 ] ] ) )
技术支持
new_a = np. dot( U, np. dot( np. diag( s) , Vh) )
print ( new_a)
技术支持
[ [ 1. 3. 4. ]
[ 5. 6. 9. ]
[ 1. 2. 3. ]
[ 7. 6. 8. ] ]
技术支持
Moore-Penrose 广义逆
矩阵的伪逆是逆矩阵的推广形式,常用于计算最小二乘解。Moore-Penrose 逆是最常见的矩阵伪逆形式。
import numpy as np
a = np. array( [ [ 1 , 3 , 4 ] , [ 5 , 6 , 9 ] , [ 1 , 2 , 3 ] , [ 7 , 6 , 8 ] ] )
inv= np. linalg. pinv( a)
print ( inv)
技术支持
[ [ - 0.37037037 0.03703704 - 0.11111111 0.18518519 ]
[ 1.56296296 - 1.2962963 - 0.11111111 0.71851852 ]
[ - 0.84444444 0.94444444 0.16666667 - 0.57777778 ] ]
技术支持
哈达玛积
哈达玛积(Hadamard product)或 Schur 积是对两个维度相同的原始矩阵进行逐元素相乘的运算,也称为逐元素乘积。它比矩阵乘法更简单。哈达玛积被用于 JPEG 有损压缩算法。哈达玛积具有交换性、结合性和分配性。它便于求逆并简化幂矩阵的计算。
哈达玛积应用广泛,例如卫星传输中的纠错编码、信息论、密码学、模式识别、神经网络、极大似然估计、JPEG 有损压缩、多元统计分析以及线性建模等。
import numpy as np
a1= np. array( [ [ 1 , 2 ] , [ 3 , 4 ] ] )
a2= np. array( [ [ 1 , 2 ] , [ 3 , 4 ] ] )
hadamard_product = np. multiply( a1, a2)
print ( "Hadamard Product: \n" , hadamard_product)
技术支持
Hadamard Product:
[ [ 1 4 ]
[ 9 16 ] ]
技术支持
熵
“随机变量的熵是一种用于刻画随机变量不可预测性的函数。”(Entropy and Mutual Information )在构建自动决策树时,熵常用于每一步的特征选择。模型选择常基于最大熵原理,即在相互冲突的模型中,熵最大的为优。
“若随机变量 X 取值于集合 χ={x1, x2,..., xn},其概率分布为 P(X),则随机变量的熵可写为”(Entropy and Mutual Information )
“若上式中的对数取 2 为底,则熵以比特(bits)表示;若取自然对数,则以纳特(nats)表示。更常见的做法是使用比特。”(Entropy and Mutual Information )
import scipy. stats
import numpy as np
a= np. array( [ 1 , 1 , 2 , 3 , 1 , 3 , 4 , 2 , 5 , 6 , 3 , 2 , 4 , 3 ] )
a_pdf= scipy. stats. norm. pdf( a)
entropy = scipy. stats. entropy( a_pdf)
print ( "Entropy: " , entropy)
技术支持
Entropy : 1.6688066853941022
技术支持
Kullback-Leibler 散度
Kullback–Leibler 散度是两个概率分布之间的相对熵。它度量一个分布相对于另一个参考分布的距离(相似或不相似程度)。当 KL 散度为 0 时,两个分布完全相同。其表达式为:
它听起来像是一种距离度量,但实际并非如此,因为它具有不对称性,即该度量不满足交换律。一般而言,D(p, q) ≠ D(q, p)。KL 散度在无监督机器学习技术“变分自编码器(VAE)”中被广泛使用。
import scipy. stats
import numpy as np
a= np. array( [ 1 , 1 , 2 , 3 , 1 , 3 , 4 , 2 , 5 , 6 , 3 , 2 , 4 , 3 ] )
b= np. array( [ 1 , 1 , 3 , 4 , 2 , 4 , 5 , 2 , 5 , 6 , 3 , 2 , 4 , 3 ] )
a_pdf= scipy. stats. norm. pdf( a)
b_pdf= scipy. stats. norm. pdf( b)
kl_div= scipy. stats. entropy( a_pdf, b_pdf)
print ( "KL Divergence: " , kl_div)
技术支持
KL Divergence : 0.26732496641464365
技术支持
梯度下降
梯度下降是最知名的优化算法之一,用于优化线性回归、逻辑回归和神经网络中的系数与偏置。它是一种迭代过程,用来寻找给定函数的最小值。
图片来源
图片来源
梯度下降有三种类型:全批量(full batch)、随机(stochastic)和小批量(mini-batch)。全批量梯度下降使用整套数据计算梯度;随机梯度下降使用数据集中的一个样本计算梯度;小批量梯度下降结合二者,将训练集划分为若干小批(batch),逐个小批计算损失,并对最终损失求平均。
结语
恭喜您读完本教程!
您已学习了深度学习中的基础数学概念,如标量、向量、矩阵、张量、行列式、特征值与特征向量、范数函数、奇异值分解(SVD)、Moore-Penrose 伪逆、哈达玛积、熵、Kullback–Leibler 散度以及梯度下降。
在学习过程中,您也使用 NumPy 与 SciPy 在 Python 中实践了这些概念。
如果您想进一步学习 Python,推荐以下 DataCamp 课程:
数据科学是一门跨学科领域,运用数学和高级统计方法进行预测。所有数据科学算法都直接或间接地使用数学概念。扎实的数学理解有助于您构建创新的数据科学解决方案,例如推荐系统。如果您的数学功底扎实,转入数据科学会更顺利。作为数据科学家,您需要运用数学的基本概念来解决问题。
除数学之外,您还需要具备领域知识、编程技能、商业能力、分析能力以及好奇心。对于数据科学家而言,数学是绕不开的。您必须自我培养并掌握数学与统计学基础,才能成为数据科学家。
标量与向量
图片来源
矩阵与张量
两个向量的点积表示一个向量在另一个向量上的投影;两个向量的叉积使一个向量能够确定两者可能同处的平面。
图片来源
行列式
行列式是一个标量值,表示矩阵作为伸缩因子对长度(1 维)、面积(2 维)、体积(3 维)的影响。如果行列式为 2,则体积(3 维)变为原来的两倍;若为 1,则对体积(3 维)无影响;若为 0,则矩阵无逆,因为零与任何数相乘都为零。
性质:
矩阵乘积的行列式等于各矩阵行列式的乘积:det(M1M2)=det(M1) det(M2)。
矩阵的行列式等于其特征值的乘积。
将矩阵乘以常数 c,则行列式变化为 det(cM)=c^N det(M),其中 N 为矩阵维度。
如果您的矩阵表示一个可拉伸的玩具,那么该矩阵的行列式就显示您把玩具拉伸了多少。
特征值与特征向量
方阵 A 的一个特征向量是一个非零向量 v,与 A 相乘时仅改变 v 的尺度。
图片来源
特征向量也称为特征矢量。当对其施加线性变换时,它只随标量因子变化,方向不变。
特征向量是线性变换的旋转轴,这些轴方向固定;特征值是矩阵放大或缩小的尺度因子。特征值也称为特征值或特征根。换言之,您可以理解为:特征向量给出限制线性变换行为的固定直线或平面,而线性变换的特征值是失真因子。
行列式给出线性变换下形状被缩放的面积(或体积)。因此,特征值的乘积等于行列式。
范数(NORM)函数
有时您需要度量向量的“大小”。范数函数帮助您度量向量的大小。除零向量外,它为向量空间中的向量赋予严格正的长度,其中包含 L^p 范数。它将向量映射为非负值。对于向量和矩阵,它等同于欧几里得距离。其值等于最大的奇异值。
矩阵分解
矩阵分解(亦称矩阵因式分解)用于将矩阵拆分为其组成部分。矩阵分解类似于对数字进行因式分解,例如将 10 分解为 2 × 5。它用于求解线性方程。
常见的矩阵分解技术包括:
奇异值分解
在上一节中,我们看到矩阵的特征分解可将其分解为特征向量和特征值。奇异值分解是一种矩阵分解方法,可将矩阵分解为奇异向量与奇异值。它在信号处理、心理学、社会学、气候与大气科学、统计学和天文学等领域有广泛应用。
Moore-Penrose 广义逆
矩阵的伪逆是逆矩阵的推广形式,常用于计算最小二乘解。Moore-Penrose 逆是最常见的矩阵伪逆形式。
哈达玛积
哈达玛积(Hadamard product)或 Schur 积是对两个维度相同的原始矩阵进行逐元素相乘的运算,也称为逐元素乘积。它比矩阵乘法更简单。哈达玛积被用于 JPEG 有损压缩算法。哈达玛积具有交换性、结合性和分配性。它便于求逆并简化幂矩阵的计算。
哈达玛积应用广泛,例如卫星传输中的纠错编码、信息论、密码学、模式识别、神经网络、极大似然估计、JPEG 有损压缩、多元统计分析以及线性建模等。
熵
“随机变量的熵是一种用于刻画随机变量不可预测性的函数。”(Entropy and Mutual Information)在构建自动决策树时,熵常用于每一步的特征选择。模型选择常基于最大熵原理,即在相互冲突的模型中,熵最大的为优。
“若随机变量 X 取值于集合 χ={x1, x2,..., xn},其概率分布为 P(X),则随机变量的熵可写为”(Entropy and Mutual Information)
“若上式中的对数取 2 为底,则熵以比特(bits)表示;若取自然对数,则以纳特(nats)表示。更常见的做法是使用比特。”(Entropy and Mutual Information)
Kullback-Leibler 散度
Kullback–Leibler 散度是两个概率分布之间的相对熵。它度量一个分布相对于另一个参考分布的距离(相似或不相似程度)。当 KL 散度为 0 时,两个分布完全相同。其表达式为:
它听起来像是一种距离度量,但实际并非如此,因为它具有不对称性,即该度量不满足交换律。一般而言,D(p, q) ≠ D(q, p)。KL 散度在无监督机器学习技术“变分自编码器(VAE)”中被广泛使用。
梯度下降
梯度下降是最知名的优化算法之一,用于优化线性回归、逻辑回归和神经网络中的系数与偏置。它是一种迭代过程,用来寻找给定函数的最小值。
图片来源
图片来源
梯度下降有三种类型:全批量(full batch)、随机(stochastic)和小批量(mini-batch)。全批量梯度下降使用整套数据计算梯度;随机梯度下降使用数据集中的一个样本计算梯度;小批量梯度下降结合二者,将训练集划分为若干小批(batch),逐个小批计算损失,并对最终损失求平均。
结语
恭喜您读完本教程!
您已学习了深度学习中的基础数学概念,如标量、向量、矩阵、张量、行列式、特征值与特征向量、范数函数、奇异值分解(SVD)、Moore-Penrose 伪逆、哈达玛积、熵、Kullback–Leibler 散度以及梯度下降。
在学习过程中,您也使用 NumPy 与 SciPy 在 Python 中实践了这些概念。
如果您想进一步学习 Python,推荐以下 DataCamp 课程: