机器学习数学基础之向量:向量空间

2.1 向量空间

向量空间是线性代数中的一个基本概念,主要由向量组成,这些向量具有相似的属性。向量空间的定义包括两个主要部分:集合和操作。

向量空间的定义

一个集合 V 被称为向量空间,如果它满足以下条件:

  • 加法封闭性:对任意向量 u 和 v 属于 V,u + v 也属于 V。
  • 数乘封闭性:对任意向量 u 属于 V 和任意标量 a,a*u 也属于 V。
  • 加法交换律:对任意向量 u 和 v 属于 V,有 u + v = v + u。
  • 加法结合律:对任意向量 u、v 和 w 属于 V,有 (u + v) + w = u + (v + w)。
  • 存在加法单位元:存在一个零向量 0,对任意向量 u 属于 V,有 u + 0 = u。
  • 存在加法逆元:对任意向量 u 属于 V,存在一个向量 -u,使得 u + (-u) = 0。
  • 数乘结合律:对任意标量 a 和 b 以及任意向量 u 属于 V,有 a*(bu) = (ab)*u。
  • 数乘分配律:对任意标量 a 和任意向量 u、v 属于 V,有 a*(u + v) = au + av。
  • 加法分配律:对任意标量 a 和任意向量 u 和任意标量 b,有 (a + b)u = au + b*u。
  • 数乘单位元:对任意向量 u 属于 V,有 1*u = u。

示例代码:向量空间的可视化

python

import numpy as np
import matplotlib.pyplot as plt

# 创建向量
u = np.array([1, 2])
v = np.array([2, 1])

# 绘制向量空间
plt.figure(figsize=(8, 8))
plt.quiver(0, 0, u[0], u[1], angles='xy', scale_units='xy', scale=1, color='r', label='u = (1, 2)')
plt.quiver(0, 0, v[0], v[1], angles='xy', scale_units='xy', scale=1, color='g', label='v = (2, 1)')

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

# 设置坐标轴
plt.xlim(-1, 3)
plt.ylim(-1, 3)
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()

图片

2.2 子空间

子空间是向量空间的一个重要概念,它本身也是一个向量空间。子空间必须包含原空间中的零向量,并且对于任何两个子空间中的向量,它们的和以及数乘结果仍然在该子空间中。

子空间的性质

  • 非空:子空间至少包含零向量。
  • 闭合性:若 u 和 v 属于子空间 W,则 u + v 也属于 W。
  • 数乘:若 u 属于子空间 W,则对任意标量 a,a*u 也属于 W。

示例代码:子空间的可视化

python

import numpy as np
import matplotlib.pyplot as plt

# 创建基底向量
b1 = np.array([1, 0])
b2 = np.array([0, 1])

# 创建子空间向量
s1 = b1 + b2
s2 = b1 - b2

# 绘制子空间
plt.figure(figsize=(8, 8))
plt.quiver(0, 0, b1[0], b1[1], angles='xy', scale_units='xy', scale=1, color='r', label='b1 = (1, 0)')
plt.quiver(0, 0, b2[0], b2[1], angles='xy', scale_units='xy', scale=1, color='g', label='b2 = (0, 1)')
plt.quiver(0, 0, s1[0], s1[1], angles='xy', scale_units='xy', scale=1, color='b', label='s1 = b1 + b2')
plt.quiver(0, 0, s2[0], s2[1], angles='xy', scale_units='xy', scale=1, color='y', label='s2 = b1 - b2')

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

# 设置坐标轴
plt.xlim(-2, 2)
plt.ylim(-2, 2)
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()

图片

2.3 线性组合

线性组合是指通过对向量进行加权求和所形成的新向量。具体来说,如果有向量 u1, u2, ..., un 和标量 a1, a2, ..., an,那么它们的线性组合定义为:

c = a1 * u1 + a2 * u2 + ... + an * un

线性组合的性质

  • 线性组合的结果仍然属于原始向量空间。
  • 线性组合的权重(系数)可以为零或负数,但必须是标量。

示例代码:线性组合的可视化

python

import numpy as np
import matplotlib.pyplot as plt

# 创建两个向量
u1 = np.array([1, 2])
u2 = np.array([2, 1])

# 创建线性组合
c1 = 0.5 * u1 + 0.5 * u2  # 线性组合

# 绘制向量及其线性组合
plt.figure(figsize=(8, 8))
plt.quiver(0, 0, u1[0], u1[1], angles='xy', scale_units='xy', scale=1, color='r', label='u1 = (1, 2)')
plt.quiver(0, 0, u2[0], u2[1], angles='xy', scale_units='xy', scale=1, color='g', label='u2 = (2, 1)')
plt.quiver(0, 0, c1[0], c1[1], angles='xy', scale_units='xy', scale=1, color='b', label='c = 0.5 * u1 + 0.5 * u2')

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

# 设置坐标轴
plt.xlim(-1, 3)
plt.ylim(-1, 3)
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()

在此示例中,红色箭头表示向量 u1 = (1, 2),绿色箭头表示向量 u2 = (2, 1),蓝色箭头表示它们的线性组合 0.5 * u1 + 0.5 * u2。辅助线帮助我们清晰地观察每个向量的起点和终点。

图片

2.4 线性独立性

线性独立性指的是一组向量是否可以用其他向量的线性组合来表示。如果一组向量中的任意向量都不能表示为其他向量的线性组合,则称这些向量是线性独立的。

线性独立性的性质

  • 零向量的独立性:任何向量集合中都包含零向量,集合就不是线性独立的。
  • 基底的概念:基底是向量空间中一组线性独立的向量,且其线性组合可以生成整个向量空间。

示例代码:线性独立与线性相关的可视化

python

import numpy as np
import matplotlib.pyplot as plt

# 创建线性独立的两个向量
u1 = np.array([1, 2])
u2 = np.array([2, 1])

# 创建线性相关的两个向量
v1 = np.array([1, 1])
v2 = np.array([2, 2])  # 这是v1的2倍

# 绘制线性独立的向量
plt.figure(figsize=(12, 5))

# 线性独立的向量图
plt.subplot(1, 2, 1)
plt.quiver(0, 0, u1[0], u1[1], angles='xy', scale_units='xy', scale=1, color='r', label='u1 = (1, 2)')
plt.quiver(0, 0, u2[0], u2[1], angles='xy', scale_units='xy', scale=1, color='g', label='u2 = (2, 1)')
plt.plot([0, u1[0]], [0, u1[1]], 'r--', alpha=0.5)
plt.plot([0, u2[0]], [0, u2[1]], 'g--', alpha=0.5)

# 设置坐标轴
plt.xlim(-1, 3)
plt.ylim(-1, 3)
plt.axhline(0, color='black', linewidth=0.5)
plt.axvline(0, color='black', linewidth=0.5)
plt.grid(True)
plt.title('线性独立的向量')
plt.legend()

# 线性相关的向量图
plt.subplot(1, 2, 2)
plt.quiver(0, 0, v1[0], v1[1], angles='xy', scale_units='xy', scale=1, color='r', label='v1 = (1, 1)')
plt.quiver(0, 0, v2[0], v2[1], angles='xy', scale_units='xy', scale=1, color='g', label='v2 = (2, 2)')
plt.plot([0, v1[0]], [0, v1[1]], 'r--', alpha=0.5)
plt.plot([0, v2[0]], [0, v2[1]], 'g--', alpha=0.5)

# 设置坐标轴
plt.xlim(-1, 3)
plt.ylim(-1, 3)
plt.axhline(0, color='black', linewidth=0.5)
plt.axvline(0, color='black', linewidth=0.5)
plt.grid(True)
plt.title('线性相关的向量')
plt.legend()

# 显示图形
plt.tight_layout()
plt.show()

在此示例中,左侧图展示了线性独立的向量 u1 和 u2,右侧图展示了线性相关的向量 v1 和 v2。

图片

2.5 基底与维度

基底是一个向量空间中的一组线性独立的向量,其线性组合可以生成该空间中的所有向量。维度则是基底中向量的数量,表示该向量空间的“大小”。

基底与维度的性质

  • 基底的唯一性:对于有限维向量空间,其基底并不唯一,但所有基底的向量个数相同。
  • 维度的意义:维度可以用于判断向量空间的复杂程度,维度越高,表示空间越复杂。

示例代码:基底与维度的可视化

python

import numpy as np
import matplotlib.pyplot as plt

# 创建基底向量
b1 = np.array([1, 0])
b2 = np.array([0, 1])

# 绘制基底向量
plt.figure()
plt.quiver(0, 0, b1[0], b1[1], angles='xy', scale_units='xy', scale=1, color='r', label='b1 = (1, 0)')
plt.quiver(0, 0, b2[0], b2[1], angles='xy', scale_units='xy', scale=1, color='g', label='b2 = (0, 1)')

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

# 设置坐标轴
plt.xlim(-1, 2)
plt.ylim(-1, 2)
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()

# 输出维度
dimension = 2
print(f"向量空间的维度为:{dimension}")

在此示例中,红色箭头表示基向量 b1 = (1, 0),绿色箭头表示基向量 b2 = (0, 1)。

图片

THE END