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

别怕数学!用Python和NumPy图解机器学习里的线性代数(附代码)

别怕数学用Python和NumPy图解机器学习里的线性代数附代码第一次接触机器学习时看到满屏的矩阵运算和希腊字母公式我的大脑直接宕机了三分钟。直到在Jupyter Notebook里用Matplotlib画出第一个旋转的向量才突然理解矩阵乘法原来是在做空间变换——这种啊哈时刻正是我想分享给你的体验。本文将用Python代码和动态可视化带你从几何角度重新认识线性代数。1. 从几何视角理解向量与矩阵1.1 向量不只是数字列表在NumPy中创建一个二维向量只需要一行代码import numpy as np v np.array([3, 1])但更直观的理解方式是把它看作平面上的箭头。用Matplotlib可视化import matplotlib.pyplot as plt plt.quiver(0, 0, v[0], v[1], anglesxy, scale_unitsxy, scale1, colorr) plt.xlim(-5, 5) plt.ylim(-5, 5) plt.grid() plt.show()你会看到一个从原点指向(3,1)的红色箭头。这就是向量的几何本质——具有大小和方向的量。1.2 矩阵空间变换的魔法师当我们将矩阵与向量相乘时实际上是在对向量进行变换。看这个例子A np.array([[2, 0], [0, 2]]) # 缩放矩阵 transformed_v A v # 矩阵乘法把变换前后的向量画在一起plt.quiver(0, 0, v[0], v[1], anglesxy, scale_unitsxy, scale1, colorr) plt.quiver(0, 0, transformed_v[0], transformed_v[1], anglesxy, scale_unitsxy, scale1, colorb) # [...] 省略其他绘图代码你会发现蓝色向量是红色向量的两倍——这个矩阵实现了2倍缩放。常见的矩阵变换类型包括矩阵类型变换效果示例矩阵缩放矩阵按比例放大/缩小[[2,0],[0,2]]旋转矩阵旋转特定角度[[0,-1],[1,0]](90°)剪切矩阵使形状倾斜[[1,1],[0,1]]2. 矩阵乘法变换的叠加2.1 矩阵乘法的几何意义连续应用两个矩阵变换等价于两个矩阵相乘后的单次变换。让我们用动画演示from matplotlib.animation import FuncAnimation fig, ax plt.subplots() def update(i): angle np.radians(i) R np.array([[np.cos(angle), -np.sin(angle)], [np.sin(angle), np.cos(angle)]]) # 旋转矩阵 transformed R v ax.clear() ax.quiver(0, 0, v[0], v[1], colorr) ax.quiver(0, 0, transformed[0], transformed[1], colorb) ax.set_xlim(-4, 4); ax.set_ylim(-4, 4) ani FuncAnimation(fig, update, frames360, interval50) plt.close()这段代码会生成向量v旋转360度的动画实际使用时需要保存为gif或视频。你会发现矩阵乘法完美描述了旋转这种连续变换。2.2 矩阵乘法的不可交换性与数字乘法不同矩阵乘法顺序会影响最终结果A np.array([[1, 1], [0, 1]]) # 剪切矩阵 B np.array([[0, -1], [1, 0]]) # 旋转矩阵 print(A×B:\n, A B) print(B×A:\n, B A)输出结果完全不同。这解释了为什么神经网络中层的顺序如此重要——不同的矩阵乘法顺序会导致完全不同的特征变换。3. 特征分解抓住变换的本质3.1 特征向量与特征值特征向量是在矩阵变换下方向保持不变的向量特征值则是其缩放比例。计算它们C np.array([[4, 1], [2, 3]]) eigenvalues, eigenvectors np.linalg.eig(C) print(特征值:, eigenvalues) print(特征向量:\n, eigenvectors)可视化特征向量origin np.zeros(2) plt.quiver(*origin, *eigenvectors[:,0], color[r], scale5) plt.quiver(*origin, *eigenvectors[:,1], color[b], scale5) # [...] 省略绘图代码红色和蓝色箭头代表两个特征向量方向。即使经过矩阵C变换它们也只会伸长或缩短不会改变方向。3.2 特征分解的应用特征分解在PCA降维中至关重要。假设我们有一个数据矩阵XPCA的核心步骤就是计算协方差矩阵的特征分解# 假设X是我们的数据矩阵每行是一个样本 X_centered X - X.mean(axis0) cov_matrix np.cov(X_centered.T) eig_vals, eig_vecs np.linalg.eig(cov_matrix) # 按特征值大小排序 sorted_idx np.argsort(eig_vals)[::-1] principal_components eig_vecs[:, sorted_idx[:2]] # 取前两个主成分通过投影到主成分方向我们就能实现降维X_pca X_centered principal_components4. 奇异值分解(SVD)更强大的工具4.1 SVD的几何解释任何矩阵都可以分解为旋转→缩放→旋转的组合D np.random.randn(3, 2) # 随机矩阵 U, S, Vt np.linalg.svd(D) print(U (左奇异向量):\n, U) print(S (奇异值):\n, S) print(Vt (右奇异向量转置):\n, Vt)可视化这个过程用Vt旋转输入空间用S缩放坐标轴用U旋转到输出空间4.2 SVD在推荐系统中的应用SVD是协同过滤推荐算法的核心。假设用户-物品评分矩阵为R# 假设R是m×n的评分矩阵 U, S, Vt np.linalg.svd(R, full_matricesFalse) k 10 # 选择前10个奇异值 R_approx U[:, :k] np.diag(S[:k]) Vt[:k, :]这个低秩近似R_approx可以预测缺失的评分实现个性化推荐。在实际项目中我们通常会使用更高级的变体如FunkSVD来处理稀疏矩阵。5. 线性代数在神经网络中的体现5.1 全连接层的矩阵表示神经网络的每一层本质上都是线性变换加非线性激活。考虑一个简单的两层网络# 输入层到隐藏层 W1 np.random.randn(input_size, hidden_size) * 0.01 b1 np.zeros(hidden_size) hidden np.maximum(0, X W1 b1) # ReLU激活 # 隐藏层到输出层 W2 np.random.randn(hidden_size, output_size) * 0.01 scores hidden W2反向传播中的梯度计算也大量使用矩阵运算# 假设dscores是损失函数对scores的梯度 dW2 hidden.T dscores db2 np.sum(dscores, axis0)5.2 卷积的Toeplitz矩阵形式虽然卷积通常用滑动窗口实现但它也可以表示为特殊的Toeplitz矩阵乘法def conv_to_matrix(kernel, input_size): # 为简单起见考虑1D情况 output_size input_size - len(kernel) 1 T np.zeros((output_size, input_size)) for i in range(output_size): T[i, i:ilen(kernel)] kernel return T kernel [1, -1, 0.5] T conv_to_matrix(kernel, 10) input_signal np.random.randn(10) conv_result T input_signal # 等价于卷积运算理解这种表示方式有助于分析CNN的性质。
http://www.rkmt.cn/news/1397430.html

相关文章:

  • MySQL 聚合函数
  • 《jQuery UI 使用指南》
  • 别再手动标点了!OpenCV相机标定后,用undistort()一键搞定图像去畸变(附Python代码)
  • pandas sort_values 排序原理与生产级实战指南
  • 【从零搭建本地电商智能客服 Agent:Dify+Ollama+Qwen3.5 部署全流程】
  • CRNN实战解析:从图像到文本的端到端识别之旅
  • 建筑动画压缩优化:MPEG框架结合DCT与LLE算法实践
  • 2026雨水收集系统厂家推荐榜:消防不锈钢水箱/焊接不锈钢水箱/生活不锈钢水箱/组合式不锈钢水箱/调蓄型雨水收集系统/选择指南 - 优质品牌商家
  • 11- Claude Code 最强插件库详解:从安装到全插件用途全吃透
  • 有哪些一键生成论文工具是真的契合专业内容,而不是模板套话?
  • 人机融合,瓦伦丁的心态越来越好了
  • “智”的起源:现代AI所缺乏的“是非之心”该如何弥补?
  • 简单三步让Zotero中文文献管理效率提升10倍:Jasminum插件完全指南
  • C# 自动化设备运动控制上位机模拟系统
  • 文献综述速成术,从选题到定稿仅需72小时:基于IEEE/ACM双盲评审标准的ChatGPT提示工程实战
  • 模型驱动的汽车稳定性控制系统关键技术【附程序】
  • 卖无纺布怎么找客户?下游工厂和产业带在哪里
  • MySQL命令行导出数据库
  • 开源框架 vs 自研:哪种路线更有前途?
  • 基于51单片机的LED显示屏(设计源文件+万字报告+讲解)(支持资料、图片参考_降重降ai)_文章底部可以扫码
  • java复习笔记(1)
  • 芦荟叶片叶子健康状态检测数据集VOC+YOLO格式2989张4类别
  • SpringBoot集成JWT的生产级安全实践指南
  • OCLP-Mod:终极免费方案让老旧Mac焕发新生的完整指南
  • 3步解锁Book118文档下载器:告别付费墙的技术方案
  • GSTGCN:融合全局结构与时间依赖的动态图神经网络设计与实践
  • 数据中心通用紧凑路由方案WMGR:基于字度量空间与有限状态自动机
  • 3分钟拯救你的Windows 11:开源神器Win11Debloat终极优化指南
  • 【独家首发】中国制造业AI Agent成熟度白皮书(覆盖17个细分行业,含68家样本企业实测数据)
  • 留学生 Turnitin AIGC 率超标?paperxie 一键降重,告别学术申诉焦虑