【机器学习与实战】回归分析与预测 之 AI通识:数学与空间思维

18 阅读9分钟

配套视频课程:www.bilibili.com/video/BV1Rx…

一、数组与几何维度

1、数组维度

在计算机中,我们可以定义一维数组,二维数组,三维数组,N维数组,比如可以使用Python定义如下数组:

# 定义一维数组,即Python的列表,为6个元素
array_1d = [1,2,3,4,5,6]
# 定义二维数组,一共35列,共15个元素
array_2d = [
            [11,12,13,14,15], 
            [21,22,23,24,25],
            [31,32,33,34,35]
           ]
# 定义三维数组,一共435列,共60个元素
array_3d = [
            [[111, 112, 113, 114, 114], [121, 122, 123, 124, 125], [131, 132, 133, 134, 135]],
            [[211, 212, 213, 214, 214], [221, 222, 223, 224, 225], [231, 232, 233, 234, 235]],
            [[311, 312, 313, 314, 314], [321, 322, 323, 324, 325], [331, 332, 333, 334, 335]],
            [[411, 412, 413, 414, 414], [421, 422, 423, 424, 425], [431, 432, 433, 434, 435]],
           ]
# 通常情况下,三维数组最好由二维数组来定义比较直观

也就是说,数组的维度,主要取决于有几个列表层级,与层级中的元素个数无关,比如虽然是4个3行5列共60个元素,但是还是三维。

2、几何维度

考察几何维度,我们需要至少三个坐标系来绘制以下坐标点:

1.png

推而广之,在N维平面上,那么就需要N个坐标点才能唯一确定一个点。但是无论维度是多少,在Python中,均可以使用一维数组来表示,比如在一维线条上,一个标量数字就可以确定一个点,在二维平面上,则可以使用 [x, y] 来表示,在三维立体上,则使用 [x, y , z] 来表示该点的坐标,那么在 N维空间中,则通过 [x1, x2, x3, … xN] 就可以表达某个点。

从坐标原点绘制一点线到某个点,则该线条称为向量(N维空间则叫N维向量),如下图所示:

2.png

二、向量与距离计算

1、向量值计算

我们都清楚在二维坐标系中,一个坐标点的向量计算遵循勾股定理,也就是说,任意给定一个坐标点(x, y),计算该向量值为:

那么,在三维坐标系统中,任意一个坐标点的坐标必然为:(x ,y , z),那么该坐标点的向量值为:

x,y,z=x2+y2+z2\large |\overrightarrow{x,y,z}| = \sqrt{x^2+y^2+z^2}

三维中的点,可以用以下方式来直观表达:

3.png

向量:OB’ 的值的计算,可以看成是 OB’ 与 (X,Y) 这个平面上的投影 OB ,而OB为 x,y=x2+y2\large |\overrightarrow{x,y}| = \sqrt{x^2+y^2}, 则OB’的值为:

OB=OB2+BB2=x2+y22+z2=x2+y2+z2\large OB’ = \sqrt{OB^2 + BB’^2} = \sqrt{{\sqrt{x^2+y^2}}^2 + z^2} = \sqrt{x^2+y^2+z^2}

推而广之,任意维度的几何向量的值,均为:

P=x_12+x_22+x_32+x_n2\large \overrightarrow{P} = \sqrt{x\_1^2 + x\_2^2 + x\_3^2 + …… x\_n^2}

2、向量距离计算

现在假设坐标系上有两个点:A(x1, y1),和B(x2, y2),那么这两个点的距离是如何计算的呢?公式为:

Distance(A,B)=(x1x2)2+(y1y2)2\large Distance(A,B) = \sqrt{(x1-x2)^2 + (y1-y2)^2}

比如有点:A=(3, 4),B=(2,6),则A和B的距离为:1+4=5\large \sqrt{1+4} = \sqrt{5},这个坐标可以画出以下图案,看看是否正确:

4.png

同样的,在三维坐标系统中,两个点之间的距离计算公式为:

Distance(A,B,C)=(x1x2)2+(y1y2)2+(z1z2)2\large Distance(A,B,C) = \sqrt{(x1-x2)^2 + (y1-y2)^2 + (z1-z2)^2}

在N维坐标系统中,两个点之间的距离计算公式为:

Distance(A,B,C.N)=(x_1x_2)2+(y_1y_2)2++(n_1n_2)2\large Distance(A,B,C….N) = \sqrt{(x\_1-x\_2)^2 + (y\_1-y\_2)^2 + … + (n\_1-n\_2)^2}

3、向量和运算

在二维坐标平面中,直角坐标系遵循勾股定理,也就是说针对某一个点,比如(3, 4),其向量长度为5。

5.png

既然向量是存在几何意义的,那么向量和与向量积也同样存在几何意义。比如两个点的向量和,可以这样进行运算,并展示在二维平面上,假设平面上有两个点:a = (ax, ay) ,b = (bx, by) ,则 a + b = (ax + bx, ay + by),也就意味着,平面上的两个点求和,其实计算的是其向量和,并且向量和为一个新的点:

6.png

我们可以假设两个点的坐标为:a=(3, 5),向量为v,b=(7,2),向量为u,则a+b=(10, 7),根据勾股定理可以计算出:

a+b=100+49=12.2\large a+b = \sqrt{100+49} = 12.2

当然,我们也可以分别计算向量v和u的长度,进而得到 u+v 的值:

u+v=9+25+49+4=34+53=5.83+7.28=13.11\large u+v = \sqrt{9+25} + \sqrt{49+4} = \sqrt{34} + \sqrt{53} = 5.83 + 7.28 = 13.11

上述结果说明,向量之和并非单纯的两个向量的数值相加,那还有什么?从上图中可以看出,向量之和虚拟出来了一个平行四边形,什么情况下,u+v=a+b呢?当u和v两个向量的夹角为0时的极限值时,两者相等。所以这里提出了一个夹角的概念。

2、向量积

我们再来看看向量的点积运算,在二维平面上,存在a和b两个向量,a=(ax, ay),b=(bx, by),那么ab=axbx+ayby=n\large a*b = ax*bx+ay*by=n,也就是说向量之积为一个标量,两条向量之间的夹角为 θ\theta,这又有什么意义呢?

7.png

我们现在假设有两个点为:A=[3,4],B=[2,6],则A*B=6+24=30,并可计算出 A向量的线条为5,B向量的线条为40\sqrt{40}。我们来进行一下验证。可以使用Matplotlib将这两个点绘制出来:

fig, ax = plt.subplots()
# 绘制原点到指定点的线条
ax.plot([0, 3], [0, 4], color='blue')
ax.plot([0, 2], [0, 6], color='red')
# 设置坐标轴的范围
ax.set_xlim(0, 5)
ax.set_ylim(0, 7)
plt.show()

8.png

先说结论:向量 a x b 即可以由两个点的坐标相乘再相加计算出来,即 ab=axbx+ayby\large a*b = ax*bx+ay*by,同时还可以由 abcosθ\large |\overrightarrow{a}|* |\overrightarrow{b}| * cos\theta 计算得出,这就使夹角的余弦值有了意义,什么意义呢?继续往下来验证:

仍然以 A=[3,4],B=[2,6] 两个点为原型,通过坐标点相加再相乘的方式,可以计算出 A * B = 30,那么现在来计算一下,为什么还可以由向量a和b以及夹角的余弦值求出:

9.png

上图中,向量A在向量B上的映射,可以理解为 acosθ\large |\overrightarrow{a}| *cos\theta ,根据直角坐标系统的三角函数的定义:CosθCos\theta = 邻边 / 斜边 ,我们开始计算为什么:ab=abcosθ\large a*b = |\overrightarrow{a}| *|\overrightarrow{b}|* cos\theta,对于坐标A来说,其向量值为:5,坐标B的向量值为:40\sqrt{40},那么有:

ab=540cosθ=30\large a *b = 5* \sqrt{40} * cos\theta = 30,可以计算出:cosθ=640=66.325=0.9486cos\theta = \frac{6}{\sqrt{40}} = \frac{6}{6.325} = 0.9486

也就是说,向量A和向量B的夹角的余弦值为:0.9486,而0度的余弦值为最大值1,所以0.9486可以看做是一个空间向量上的两个点之间的夹角的余弦值,设想一下极限情况下,如果为1,则说明两个向量没有夹角,是否意味着两个向量是完全一致的呢?所以在向量空间中,评估两个向量是否相似,也可以使用余弦相似度来进行评估。

补充一下三角函数知识:

基本函数英文缩写表达式语言描述
正弦函数sinesina/cA**的对边比斜边
余弦函数cosinecosb/cA**的邻边比斜边
正切函数tangenttana/bA**的对边比邻边
余切函数cotangentcotb/aA**的邻边比对边
正割函数secantsecc/bA**的斜边比邻边
余割函数cosecantcscc/aA**的斜边比对边

10.png

三、导数与梯度下降

1、什么是导数

导数的几何意义是切线的斜率。在平面坐标系中,函数图像上某一点的切线斜率等于该点的导数值。因此,通过求导可以确定曲线在某一点的切线斜率,进一步分析曲线的形状和变化趋势。

11.png

某个点的导数计算公式可以写为:P=ΔyΔx\large P’ = \frac{\Delta{y}}{\Delta{x}} 也可以写作为:P=dydx\large P’ = \frac{dy}{dx},即计算切线的斜率。但是由于在一条曲线上,导数都是在动态变化的,所以通常导数也使用一个函数来表示。比如 y’ = 2x + 1 之类的。

12.gif

导数还有以下作用:

(1) 判断单调性:通过求函数的导数,可以判断函数的单调性。如果函数在某个区间内的导数大于零,则函数在该区间内单调递增;如果导数小于零,则函数单调递减。

(2)判断极值和拐点:导数为零的点可能是函数的极值点或拐点。在极值点处,函数值从递增变为递减或从递减变为递增,因此极值点是函数值变化趋势的转折点。通过求导并令导数为零,我们可以找到可能的极值点或拐点,进一步分析这些点的性质。

(3)优化问题:在实际问题中,我们经常遇到需要找到函数的最值问题,如成本最低、利润最大等。通过求导找到函数的极值点,结合实际情况进行分析,可以找到最优解。

13.png

2、梯度下降

梯度下降可以说是机器学习的精髓,各种机器学习所产生的奇迹,都必须建立在梯度下降的机制之下才有了让人感觉智能的结果。

比如针对方程:f(x) = x^2 + 2x + 3,根据上述导数计算规则,其导函数 f(x)’ = 2x+2,基于导函数可以获取x取值时导函数y的取值。比如x为0时,y’=2,此时原函数单调递增,x=-1时,y’=0,此时原函数获得最小值2,x=-3时,y’=-4,此时,原函数单调递减。

梯度下降就是根据导函数来计算,如果导函数的值为正,则说明成上升趋势,这样就不可能找到最小值,如果导函数为负数,则说明成下降趋势,就有可能找到最小值。

14.png

那么每次调整的幅度就不能过大,过大的话就可能刚好跳过了最小值,也不能过小,否则运算量就会变大。在AI领域,我们将这个幅度称为学习速率。具体的调整需要根据具体情况来测试,没有标准答案。

画图工具:Windows自带画图,Matplotlib画图,在线画图:www.geogebra.org/graphing