当前位置: 首页 > news >正文

【深度学习与大模型基础】第5章-线性相关与生成子空间

线性相关是指一组向量中,至少有一个向量可以表示为其他向量的线性组合。具体来说,对于向量组 v1,v2,…,vn,如果存在不全为零的标量 c1,c2,…,cn使得:

c1v1+c2v2+…+cnvn=0

则称这些向量线性相关。否则,它们线性无关

举例

  1. 二维空间

    • 向量 v1=(1,2)和 v2=(2,4) 线性相关,因为 v2=2v1​。

  2. 三维空间

    • 向量 v1=(1,0,0)、v2=(0,1,0)和 v3=(1,1,0) 线性相关,因为 v3=v1+v2​。

计算机科学中的应用

  1. 数据压缩

    • 在图像和视频压缩中,线性相关用于减少冗余数据。例如,JPEG利用离散余弦变换(DCT)将图像数据转换为线性相关的频率分量,从而压缩数据。

  2. 机器学习

    • 在特征选择中,线性相关用于去除冗余特征。如果两个特征高度线性相关,只需保留一个,以减少计算复杂度并避免过拟合。

  3. 计算机图形学

    • 在三维图形渲染中,线性相关用于判断点是否共面。如果四个点线性相关,则它们位于同一平面上,这在碰撞检测和光照计算中非常重要。

  4. 网络流分析

    • 在网络流分析中,线性相关用于识别流量模式。通过分析数据包的线性相关性,可以检测异常流量或网络攻击。

  5. 密码学

    • 在线性密码分析中,线性相关用于破解加密算法。通过分析密文和明文之间的线性关系,可以推断出密钥信息。

python演示相关系数

pip install numpy matplotlib seaborn scipy

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
#线性相关
# 生成随机数据
np.random.seed(0)
x = np.random.rand(100)
y = 2 * x + np.random.normal(0, 0.1, 100)  # y = 2x + noise

# 创建DataFrame
data = pd.DataFrame({'X': x, 'Y': y})

# 计算相关系数
correlation = data['X'].corr(data['Y'])
print(f"相关系数: {correlation}")

# 绘制散点图
plt.figure(figsize=(10, 6))
sns.scatterplot(data=data, x='X', y='Y')
plt.title(f'散点图 (相关系数: {correlation:.2f})')
plt.xlabel('X')
plt.ylabel('Y')
plt.grid(True)
plt.show()

生成子空间是由一组向量通过线性组合生成的空间。具体来说,给定向量集合 {v1,v2,…,vk},其生成子空间是所有形如 c1v1+c2v2+⋯+ckvk​ 的向量的集合,其中 c1,c2,…,ckc1​,c2​,…,ck​ 为标量。

关键点

  1. 线性组合:生成子空间中的向量是给定向量的线性组合。

  2. 子空间:生成子空间满足向量空间的封闭性,即对加法和标量乘法封闭。

  3. :生成子空间的维数等于向量集合的最大线性无关向量数,这些向量构成子空间的一组基。

例子

给定向量 v1=(1,0)和 v2=(0,1),其生成子空间是整个 R2,因为任何 R2 中的向量都可以表示为 c1v1+c2v2。

python演示生成子空间

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

# 定义向量
v1 = np.array([1, 0, 0])
v2 = np.array([0, 1, 0])
v3 = np.array([0, 0, 1])

# 生成线性组合
a_values = np.linspace(-2, 2, 10)
b_values = np.linspace(-2, 2, 10)
c_values = np.linspace(-2, 2, 10)
a_grid, b_grid, c_grid = np.meshgrid(a_values, b_values, c_values)
linear_combinations = a_grid[:, :, :, np.newaxis] * v1 + b_grid[:, :, :, np.newaxis] * v2 + c_grid[:, :, :, np.newaxis] * v3

# 提取x, y, z坐标
x_coords = linear_combinations[:, :, :, 0].flatten()
y_coords = linear_combinations[:, :, :, 1].flatten()
z_coords = linear_combinations[:, :, :, 2].flatten()

# 绘制生成子空间
fig = plt.figure(figsize=(10, 10))
ax = fig.add_subplot(111, projection='3d')
ax.scatter(x_coords, y_coords, z_coords, s=1, c='blue', alpha=0.5)
ax.quiver(0, 0, 0, v1[0], v1[1], v1[2], color='red', label='v1')
ax.quiver(0, 0, 0, v2[0], v2[1], v2[2], color='green', label='v2')
ax.quiver(0, 0, 0, v3[0], v3[1], v3[2], color='blue', label='v3')
ax.set_title('生成子空间 (三维)')
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('Z')
ax.legend()
plt.show()

相关文章:

  • 音视频缓存数学模型
  • AI-医学影像分割方法与流程
  • Spring Validation参数校验
  • P1118 [USACO06FEB] Backward Digit Sums G/S
  • 前端项目的构建流程无缝集成到 Maven 生态系统(一)
  • C Sharp 集合
  • 包装类简单认识泛型
  • 音视频入门基础:RTCP专题(1)——RTCP官方文档下载
  • C/C++实现工厂模板设计模式(Factory Pattern)
  • 多模态RAG框架(一)ViDoRAG:Visual Document RAG via Dynamic Iterative Reasoning Agents
  • 【一起来学kubernetes】14、StatefulSet使用详解
  • 开箱即用的whisper-service服务
  • ccf3501密码
  • 重生之我在学Vue--第15天 Vue 3 动画与过渡实战指南
  • [IP]UART
  • HTML深度解读
  • [特殊字符] 轻松掌握JavaScript DOM:从入门到实战 [特殊字符]
  • Centos内核升级
  • C#的字符串之String类与StringBuilder类区别于适用场景
  • 基于物联网的幼儿看护辅助系统设计方案
  • 痴情与真爱
  • 北京人艺新戏《一日顶流》将出现人工智能角色
  • 中国戏剧梅花奖终评结果公示,蓝天、朱洁静等15名演员入选
  • 张宇祥已任上海闵行区委常委、副区长
  • 国际金价下跌,中概股多数上涨,穆迪下调美国主权信用评级
  • 沃尔玛上财季净利下滑12%:关税带来成本压力,新财季价格涨幅将高于去年