机器学习数学基础之向量:基本运算

1.1 什么是向量

向量是数学中描述既有大小又有方向的量。在几何学中,我们通常将向量想象成从一点指向另一点的箭头。这个箭头的长度代表向量的大小,而指向代表向量的方向。

在二维空间中,向量可以表示为 v = (v1, v2),其中 v1 和 v2 分别是向量在水平和垂直方向上的长度。在三维空间中,向量则表示为 v = (v1, v2, v3)。

在机器学习领域,向量用于表示数据点的特征,因此理解向量的概念对于理解机器学习算法至关重要。

向量的表示方法有两种:

  • 几何表示:使用带箭头的线段表示向量,箭头的长度和指向分别表示向量的大小和方向。
  • 代数表示:在二维空间中,向量用一对数字表示,如 v = (3, 4),表示从原点 (0, 0) 指向点 (3, 4) 的向量。

示例代码:绘制二维向量及其和

以下是使用 Python 的 NumPy 和 Matplotlib 库绘制两个二维向量及其和的代码:

python

import numpy as np
import matplotlib.pyplot as plt

# 创建两个二维向量
v1 = np.array([3, 4])
v2 = np.array([1, 2])

# 计算向量的和
v_sum = v1 + v2

# 绘制向量
plt.figure()
plt.quiver(0, 0, v1[0], v1[1], angles='xy', scale_units='xy', scale=1, color='r', label='v1 = (3, 4)')
plt.quiver(0, 0, v2[0], v2[1], angles='xy', scale_units='xy', scale=1, color='g', label='v2 = (1, 2)')
plt.quiver(0, 0, v_sum[0], v_sum[1], angles='xy', scale_units='xy', scale=1, color='b', label='v1 + v2 = (4, 6)')

# 设置坐标轴
plt.xlim(-1, 5)
plt.ylim(-1, 5)
plt.axhline(0, color='black', linewidth=0.5)
plt.axvline(0, color='black', linewidth=0.5)
plt.grid(True)

# 添加图例和标题
plt.title('二维向量的几何表示')
plt.legend()
plt.show()

这段代码将生成一个图表,其中红色箭头表示向量 v1 = (3, 4),绿色箭头表示向量 v2 = (1, 2),蓝色箭头表示它们的和 v1 + v2 = (4, 6)。

图片

1.2 向量的运算

向量可以进行多种运算,包括加法、减法和数乘等。这些运算在处理和分析数据时非常有用。

向量加法:两个向量对应分量相加。例如,向量 a = (a1, a2) 和 b = (b1, b2) 的和为 c = a + b = (a1 + b1, a2 + b2)。

向量减法:一个向量的分量减去另一个向量的对应分量。例如,向量 a = (a1, a2) 和 b = (b1, b2) 的差为 d = a - b = (a1 - b1, a2 - b2)。

数乘向量:向量的每个分量乘以同一个数。例如,向量 a = (a1, a2) 和标量 k,则数乘的结果为 b = k * a = (k * a1, k * a2)。

以下是绘制向量加法的示例代码:

python

import numpy as np
import matplotlib.pyplot as plt

# 创建两个二维向量
a = np.array([2, 3])
b = np.array([4, 1])

# 计算向量和
c = a + b

# 绘制向量
plt.figure()
plt.quiver(0, 0, a[0], a[1], angles='xy', scale_units='xy', scale=1, color='r', label='a = (2, 3)')
plt.quiver(0, 0, b[0], b[1], angles='xy', scale_units='xy', scale=1, color='g', label='b = (4, 1)')
plt.quiver(0, 0, c[0], c[1], angles='xy', scale_units='xy', scale=1, color='b', label='a + b = (6, 4)')

# 设置坐标轴
plt.xlim(-1, 7)
plt.ylim(-1, 5)
plt.axhline(0, color='black', linewidth=0.5)
plt.axvline(0, color='black', linewidth=0.5)
plt.grid(True)

# 添加图例和标题
plt.title('向量加法的几何表示')
plt.legend()
plt.show()

这段代码将生成一个图表,其中红色箭头表示向量 a = (2, 3),绿色箭头表示向量 b = (4, 1),蓝色箭头表示它们的和 a + b = (6, 4)。

图片

向量减法

想象一下,你有两个向量,我们称之为向量a和向量b。向量a的坐标是(5, 4),向量b的坐标是(2, 3)。向量减法就是把向量b的每个分量逐一从向量a的对应分量中减去。所以,向量a减向量b的结果是一个新的向量,其坐标为(5-2, 4-3),即(3, 1)。

下面是一个Python代码示例,展示了如何在二维平面上绘制这两个向量,并显示它们相减的结果:

python

import numpy as np
import matplotlib.pyplot as plt

# 定义两个向量
a = np.array([5, 4])
b = np.array([2, 3])

# 计算向量差
d = a - b

# 绘制向量
plt.figure()
plt.quiver(0, 0, a[0], a[1], angles='xy', scale_units='xy', scale=1, color='r', label='a = (5, 4)')
plt.quiver(0, 0, b[0], b[1], angles='xy', scale_units='xy', scale=1, color='g', label='b = (2, 3)')
plt.quiver(0, 0, d[0], d[1], angles='xy', scale_units='xy', scale=1, color='b', label='a - b = (3, 1)')

# 设置图表
plt.xlim(-1, 6)
plt.ylim(-1, 5)
plt.axhline(0, color='black', linewidth=0.5)
plt.axvline(0, color='black', linewidth=0.5)
plt.grid(True)
plt.title('向量减法的几何表示')
plt.legend()
plt.show()

在这幅图中,红色箭头代表向量a,绿色箭头代表向量b,而蓝色箭头则表示向量a减去向量b的结果。

图片

数乘向量

现在,让我们看看数乘。数乘就是把向量的每个分量乘以一个标量。比如,我们有一个向量a,坐标为(2, 3),我们要把这个向量的每个分量乘以2。这样,数乘的结果是一个新的向量,其坐标为(22, 32),即(4, 6)。

以下是展示这一过程的Python代码:

python复制

import numpy as np
import matplotlib.pyplot as plt

# 定义一个向量
a = np.array([2, 3])

# 定义一个标量
k = 2

# 计算数乘结果
b = k * a

# 绘制向量
plt.figure()
plt.quiver(0, 0, a[0], a[1], angles='xy', scale_units='xy', scale=1, color='r', label='a = (2, 3)')
plt.quiver(0, 0, b[0], b[1], angles='xy', scale_units='xy', scale=1, color='g', label=f'{k} * a = (4, 6)')

# 设置图表
plt.xlim(-1, 5)
plt.ylim(-1, 7)
plt.axhline(0, color='black', linewidth=0.5)
plt.axvline(0, color='black', linewidth=0.5)
plt.grid(True)
plt.title('数乘向量的几何表示')
plt.legend()
plt.show()

在这幅图中,红色箭头代表原始向量a,而绿色箭头则代表数乘后的结果。

图片

1.3 向量的点积

点积(也称为内积)是向量运算中的一种重要方式,其结果是一个标量。对于两个向量 a = (a1, a2) 和 b = (b1, b2),它们的点积计算公式为:

a · b = a1 * b1 + a2 * b2

点积的几何意义与向量之间的夹角有关。根据向量的定义,点积也可以表示为:

a · b = |a| * |b| * cos(θ)

其中 |a| 和 |b| 分别是向量 a 和 b 的长度,θ 是它们之间的夹角。

示例代码:计算点积及其几何表示

python

import numpy as np
import matplotlib.pyplot as plt

# 创建两个二维向量
a = np.array([2, 3])
b = np.array([4, 1])

# 计算点积
dot_product = np.dot(a, b)

# 计算夹角
cos_theta = dot_product / (np.linalg.norm(a) * np.linalg.norm(b))
theta = np.arccos(cos_theta) * (180 / np.pi)  # 转换为角度

# 绘制向量
plt.figure()
plt.quiver(0, 0, a[0], a[1], angles='xy', scale_units='xy', scale=1, color='r', label='a = (2, 3)')
plt.quiver(0, 0, b[0], b[1], angles='xy', scale_units='xy', scale=1, color='g', label='b = (4, 1)')

# 添加辅助线
plt.plot([0, a[0]], [0, a[1]], 'r--', alpha=0.5)
plt.plot([0, b[0]], [0, b[1]], 'g--', alpha=0.5)

# 设置坐标轴
plt.xlim(-1, 5)
plt.ylim(-1, 5)
plt.axhline(0, color='black', linewidth=0.5)
plt.axvline(0, color='black', linewidth=0.5)
plt.grid(True)

# 添加图例和标题
plt.title(f'向量的点积 (a · b = {dot_product}, 夹角 = {theta:.2f}°)')
plt.legend()
plt.show()

在这个图中,红色箭头表示向量 a = (2, 3),绿色箭头表示向量 b = (4, 1)。点积的结果 a · b 和夹角 θ 被展示在标题中。辅助线帮助清楚地表示出向量的起点和终点。

图片

1.4 向量的长度

向量的长度(或模)是一个表示向量大小的标量。对于二维向量 a = (a1, a2),其长度计算公式为:

|a| = sqrt(a1² + a2²)

示例代码:计算向量长度及其几何表示

python

import numpy as np
import matplotlib.pyplot as plt

# 创建一个二维向量
a = np.array([3, 4])

# 计算向量长度
length = np.linalg.norm(a)

# 绘制向量
plt.figure()
plt.quiver(0, 0, a[0], a[1], angles='xy', scale_units='xy', scale=1, color='r', label=f'a = (3, 4), |a| = {length:.2f}')

# 添加辅助线
plt.plot([0, a[0]], [0, a[1]], 'r--', alpha=0.5)

# 设置坐标轴
plt.xlim(-1, 5)
plt.ylim(-1, 5)
plt.axhline(0, color='black', linewidth=0.5)
plt.axvline(0, color='black', linewidth=0.5)
plt.grid(True)

# 添加图例和标题
plt.title('向量长度的几何表示')
plt.legend()
plt.show()

在这个图中,红色箭头表示向量 a = (3, 4),并在标题中展示了其长度 |a|。辅助线帮助清楚地表示出向量的起点和终点。

图片

1.5 向量的单位向量

单位向量是指长度为1的向量,它表示了方向而不包含大小。给定一个非零向量 a,其单位向量 u 的计算公式为:

u = a / |a|

示例代码:计算单位向量及其几何表示

python

import numpy as np
import matplotlib.pyplot as plt

# 创建一个二维向量
a = np.array([4, 3])

# 计算单位向量
unit_vector = a / np.linalg.norm(a)

# 绘制向量
plt.figure()
plt.quiver(0, 0, a[0], a[1], angles='xy', scale_units='xy', scale=1, color='r', label='a = (4, 3)')
plt.quiver(0, 0, unit_vector[0], unit_vector[1], angles='xy', scale_units='xy', scale=1, color='g', label='单位向量 u')

# 添加辅助线
plt.plot([0, a[0]], [0, a[1]], 'r--', alpha=0.5)
plt.plot([0, unit_vector[0]], [0, unit_vector[1]], 'g--', alpha=0.5)

# 设置坐标轴
plt.xlim(-1, 5)
plt.ylim(-1, 5)
plt.axhline(0, color='black', linewidth=0.5)
plt.axvline(0, color='black', linewidth=0.5)
plt.grid(True)

# 添加图例和标题
plt.title('单位向量的几何表示')
plt.legend()
plt.show()

在这个图中,红色箭头表示向量 a = (4, 3),绿色箭头表示其单位向量 u。辅助线帮助清楚地表示出向量的起点和终点。

图片

来源: 数据挖掘练习生

THE END