【回归分析与预测】AI通识:数学与空间思维
【回归分析与预测】AI通识:数学与空间思维
【AI人工智能实战】 回归分析与预测(附完整版源码资料)
一、数组与几何维度
1、数组维度
在计算机中,我们可以定义一维数组,二维数组,三维数组,N维数组,比如可以使用Python定义如下数组:
# 定义一维数组,即Python的列表,为6个元素
array_1d = [1,2,3,4,5,6]
# 定义二维数组,一共3行5列,共15个元素
array_2d = [
[11,12,13,14,15],
[21,22,23,24,25],
[31,32,33,34,35]
]
# 定义三维数组,一共4个3行5列,共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、几何维度
考察几何维度,我们需要至少三个坐标系来绘制以下坐标点:

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

二、向量与距离计算
1、向量值计算
我们都清楚在二维坐标系中,一个坐标点的向量计算遵循勾股定理,也就是说,任意给定一个坐标点(x, y),计算该向量值为:
那么,在三维坐标系统中,任意一个坐标点的坐标必然为:(x ,y , z),那么该坐标点的向量值为:
\large |\overrightarrow{x,y,z}| = \sqrt{x2+y2+z^2}
三维中的点,可以用以下方式来直观表达:

向量:OB’ 的值的计算,可以看成是 OB’ 与 (X,Y) 这个平面上的投影 OB ,而OB为 ∣ x , y → ∣ = x 2 + y 2 \large |\overrightarrow{x,y}| = \sqrt{x^2+y^2} ∣x,y∣=x2+y2, 则OB’的值为:
O B ’ = O B 2 + B B ’ 2 = x 2 + y 2 2 + z 2 = x 2 + y 2 + z 2 \large OB’ = \sqrt{OB^2 + BB’^2} = \sqrt{{\sqrt{x^2+y^2}}^2 + z^2} = \sqrt{x^2+y^2+z^2} OB’=OB2+BB’2=x2+y22+z2=x2+y2+z2
推而广之,任意维度的几何向量的值,均为:
P → = x 1 2 + x 2 2 + x 3 2 + … … x n 2 \large \overrightarrow{P} = \sqrt{x_1^2 + x_2^2 + x_3^2 + …… x_n^2} P=x12+x22+x32+……xn2
2、向量距离计算
现在假设坐标系上有两个点:A(x1, y1),和B(x2, y2),那么这两个点的距离是如何计算的呢?公式为:
D i s t a n c e ( A , B ) = ( x 1 − x 2 ) 2 + ( y 1 − y 2 ) 2 \large Distance(A,B) = \sqrt{(x1-x2)^2 + (y1-y2)^2} Distance(A,B)=(x1−x2)2+(y1−y2)2
比如有点:A=(3, 4),B=(2,6),则A和B的距离为: 1 + 4 = 5 \large \sqrt{1+4} = \sqrt{5} 1+4=5,这个坐标可以画出以下图案,看看是否正确:

同样的,在三维坐标系统中,两个点之间的距离计算公式为:
D i s t a n c e ( A , B , C ) = ( x 1 − x 2 ) 2 + ( y 1 − y 2 ) 2 + ( z 1 − z 2 ) 2 \large Distance(A,B,C) = \sqrt{(x1-x2)^2 + (y1-y2)^2 + (z1-z2)^2} Distance(A,B,C)=(x1−x2)2+(y1−y2)2+(z1−z2)2
在N维坐标系统中,两个点之间的距离计算公式为:
D i s t a n c e ( A , B , C … . N ) = ( x 1 − x 2 ) 2 + ( y 1 − y 2 ) 2 + … + ( n 1 − n 2 ) 2 \large Distance(A,B,C….N) = \sqrt{(x_1-x_2)^2 + (y_1-y_2)^2 + … + (n_1-n_2)^2} Distance(A,B,C….N)=(x1−x2)2+(y1−y2)2+…+(n1−n2)2
3、向量和运算
在二维坐标平面中,直角坐标系遵循勾股定理,也就是说针对某一个点,比如(3, 4),其向量长度为5。

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

我们可以假设两个点的坐标为: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 a+b=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=9+25+49+4=34+53=5.83+7.28=13.11
上述结果说明,向量之和并非单纯的两个向量的数值相加,那还有什么?从上图中可以看出,向量之和虚拟出来了一个平行四边形,什么情况下,u+v=a+b呢?当u和v两个向量的夹角为0时的极限值时,两者相等。所以这里提出了一个夹角的概念。
2、向量积
我们再来看看向量的点积运算,在二维平面上,存在a和b两个向量,a=(ax, ay),b=(bx, by),那么 a ∗ b = a x ∗ b x + a y ∗ b y = n \large a*b = ax*bx+ay*by=n a∗b=ax∗bx+ay∗by=n,也就是说向量之积为一个标量,两条向量之间的夹角为 θ \theta θ,这又有什么意义呢?

我们现在假设有两个点为:A=[3,4],B=[2,6],则A*B=6+24=30,并可计算出 A向量的线条为5,B向量的线条为 40 \sqrt{40} 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()

先说结论:向量 a x b 即可以由两个点的坐标相乘再相加计算出来,即 a ∗ b = a x ∗ b x + a y ∗ b y \large a*b = ax*bx+ay*by a∗b=ax∗bx+ay∗by,同时还可以由 ∣ a → ∣ ∗ ∣ b → ∣ ∗ c o s θ \large |\overrightarrow{a}|* |\overrightarrow{b}| * cos\theta ∣a∣∗∣b∣∗cosθ 计算得出,这就使夹角的余弦值有了意义,什么意义呢?继续往下来验证:
仍然以 A=[3,4],B=[2,6] 两个点为原型,通过坐标点相加再相乘的方式,可以计算出 A * B = 30,那么现在来计算一下,为什么还可以由向量a和b以及夹角的余弦值求出:

上图中,向量A在向量B上的映射,可以理解为 ∣ a → ∣ ∗ c o s θ \large |\overrightarrow{a}| *cos\theta ∣a∣∗cosθ ,根据直角坐标系统的三角函数的定义: C o s θ Cos\theta Cosθ = 邻边 / 斜边 ,我们开始计算为什么: a ∗ b = ∣ a → ∣ ∗ ∣ b → ∣ ∗ c o s θ \large a*b = |\overrightarrow{a}| *|\overrightarrow{b}|* cos\theta a∗b=∣a∣∗∣b∣∗cosθ,对于坐标A来说,其向量值为:5,坐标B的向量值为: 40 \sqrt{40} 40,那么有:
a ∗ b = 5 ∗ 40 ∗ c o s θ = 30 \large a *b = 5* \sqrt{40} * cos\theta = 30 a∗b=5∗40∗cosθ=30,可以计算出: c o s θ = 6 40 = 6 6.325 = 0.9486 cos\theta = \frac{6}{\sqrt{40}} = \frac{6}{6.325} = 0.9486 cosθ=406=6.3256=0.9486
也就是说,向量A和向量B的夹角的余弦值为:0.9486,而0度的余弦值为最大值1,所以0.9486可以看做是一个空间向量上的两个点之间的夹角的余弦值,设想一下极限情况下,如果为1,则说明两个向量没有夹角,是否意味着两个向量是完全一致的呢?所以在向量空间中,评估两个向量是否相似,也可以使用余弦相似度来进行评估。
补充一下三角函数知识:
| 基本函数 | 英文 | 缩写 | 表达式 | 语言描述 |
|---|---|---|---|---|
| 正弦函数 | sine | sin | a/c | *∠*A**的对边比斜边 |
| 余弦函数 | cosine | cos | b/c | *∠*A**的邻边比斜边 |
| 正切函数 | tangent | tan | a/b | *∠*A**的对边比邻边 |
| 余切函数 | cotangent | cot | b/a | *∠*A**的邻边比对边 |
| 正割函数 | secant | sec | c/b | *∠*A**的斜边比邻边 |
| 余割函数 | cosecant | csc | c/a | *∠*A**的斜边比对边 |

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

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

导数还有以下作用:
(1) 判断单调性:通过求函数的导数,可以判断函数的单调性。如果函数在某个区间内的导数大于零,则函数在该区间内单调递增;如果导数小于零,则函数单调递减。
(2)判断极值和拐点:导数为零的点可能是函数的极值点或拐点。在极值点处,函数值从递增变为递减或从递减变为递增,因此极值点是函数值变化趋势的转折点。通过求导并令导数为零,我们可以找到可能的极值点或拐点,进一步分析这些点的性质。
(3)优化问题:在实际问题中,我们经常遇到需要找到函数的最值问题,如成本最低、利润最大等。通过求导找到函数的极值点,结合实际情况进行分析,可以找到最优解。

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,此时,原函数单调递减。
梯度下降就是根据导函数来计算,如果导函数的值为正,则说明成上升趋势,这样就不可能找到最小值,如果导函数为负数,则说明成下降趋势,就有可能找到最小值。

那么每次调整的幅度就不能过大,过大的话就可能刚好跳过了最小值,也不能过小,否则运算量就会变大。在AI领域,我们将这个幅度称为学习速率。具体的调整需要根据具体情况来测试,没有标准答案。
画图工具:Windows自带画图,Matplotlib画图,在线画图:https://www.geogebra.org/graphing
更多推荐


所有评论(0)