机器学习数学基础之向量:基本运算
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。辅助线帮助清楚地表示出向量的起点和终点。
来源: