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

用Python和NumPy手把手实现投影矩阵:从二维投影到最小二乘法拟合

用Python和NumPy手把手实现投影矩阵从二维投影到最小二乘法拟合线性代数中的投影概念看似抽象但在数据科学和机器学习中无处不在。想象一下当你用线性回归拟合数据点时本质上是在寻找一个子空间使得所有数据点到该子空间的垂直距离最小——这正是投影的核心思想。本文将用Python和NumPy带你从零构建各种投影矩阵并通过可视化验证其数学性质最终实现一个完整的最小二乘法线性回归案例。1. 投影矩阵的基础构建投影矩阵的核心特性是幂等性——无论投影多少次结果都不会改变。我们先从最简单的二维投影开始逐步扩展到更复杂的情况。1.1 投影到坐标轴的实现让我们先用NumPy实现将向量投影到x轴的投影矩阵import numpy as np # 定义投影到x轴的矩阵 P_x np.array([[1, 0], [0, 0]]) # 测试向量 v np.array([3, 4]) # 计算投影 proj_v P_x v # 结果应为 [3, 0]验证幂等性# 验证P^2 P assert np.allclose(P_x P_x, P_x), 幂等性验证失败1.2 投影到任意直线的通用方法更一般地要将向量投影到任意方向的单位向量u上可以使用公式P uuᵀdef projection_matrix(u): 构建投影到单位向量u方向的矩阵 u np.array(u).reshape(-1, 1) # 转换为列向量 return u u.T # 示例投影到45度方向的直线 u np.array([1, 1]) / np.sqrt(2) # 单位向量 P_u projection_matrix(u) # 测试投影 v np.array([3, 4]) proj_v P_u v # 结果应为 [3.5, 3.5]关键性质验证表性质数学表达代码验证方法幂等性P² Pnp.allclose(P P, P)对称性Pᵀ Pnp.allclose(P.T, P)迹等于秩tr(P) rank(P)np.trace(P) np.linalg.matrix_rank(P)2. 高维空间中的投影从二维扩展到三维甚至更高维度投影矩阵的构建原理相同但计算复杂度会增加。2.1 三维空间中的平面投影# 投影到xy平面 P_xy np.array([[1, 0, 0], [0, 1, 0], [0, 0, 0]]) # 测试向量 v np.array([1, 2, 3]) proj_v P_xy v # 结果应为 [1, 2, 0]2.2 投影到任意子空间对于由一组基向量{u₁, u₂, ..., uₖ}张成的子空间投影矩阵公式为P U(UᵀU)⁻¹Uᵀ其中U是将基向量作为列向量组成的矩阵。def subspace_projection(basis): 构建投影到由basis列向量张成的子空间的矩阵 U np.array(basis).T # 确保每列是一个基向量 return U np.linalg.inv(U.T U) U.T # 示例投影到由[1,0,0]和[1,1,0]张成的平面 basis [[1, 0, 0], [1, 1, 0]] P subspace_projection(basis) # 验证投影矩阵性质 assert np.allclose(P P, P), 幂等性验证失败 assert np.allclose(P.T, P), 对称性验证失败3. 投影的几何可视化理解投影的几何意义至关重要。我们可以用Matplotlib将投影过程可视化import matplotlib.pyplot as plt def plot_projection_2d(v, P, title): proj_v P v origin np.zeros(2) plt.figure(figsize(8, 6)) plt.quiver(*origin, *v, scale1, scale_unitsxy, anglesxy, colorr, label原向量) plt.quiver(*origin, *proj_v, scale1, scale_unitsxy, anglesxy, colorb, label投影向量) # 绘制投影线 plt.plot([v[0], proj_v[0]], [v[1], proj_v[1]], k--, lw0.8) plt.xlim(-1, max(5, v[0]1)) plt.ylim(-1, max(5, v[1]1)) plt.axhline(0, colorblack, lw0.5) plt.axvline(0, colorblack, lw0.5) plt.grid(True) plt.title(title) plt.legend() plt.show() # 可视化x轴投影 v np.array([3, 4]) P_x np.array([[1, 0], [0, 0]]) plot_projection_2d(v, P_x, 投影到x轴)4. 最小二乘法实战应用投影矩阵最重要的应用之一就是解决最小二乘问题。我们将用投影的思想实现线性回归并与scikit-learn的结果对比。4.1 问题设定假设有以下数据点求最佳拟合直线y mx bxy1223354.2 投影矩阵解法# 构建矩阵A和向量b A np.array([[1, 1], [2, 1], [3, 1]]) b np.array([2, 3, 5]) # 计算投影矩阵 P_A A np.linalg.inv(A.T A) A.T # 计算b在A列空间上的投影 b_proj P_A b # 求解参数m和b params np.linalg.inv(A.T A) A.T b m, b_fit params print(f拟合直线方程: y {m:.2f}x {b_fit:.2f})4.3 与scikit-learn对比验证from sklearn.linear_model import LinearRegression # 准备数据 X np.array([1, 2, 3]).reshape(-1, 1) y np.array([2, 3, 5]) # 使用scikit-learn model LinearRegression(fit_interceptTrue) model.fit(X, y) # 对比结果 print(f投影矩阵结果: m{m:.4f}, b{b_fit:.4f}) print(fscikit-learn结果: m{model.coef_[0]:.4f}, b{model.intercept_:.4f})4.4 结果可视化# 生成拟合线数据点 x_line np.linspace(0, 4, 100) y_line m * x_line b_fit plt.figure(figsize(8, 6)) plt.scatter([1, 2, 3], [2, 3, 5], cr, label数据点) plt.plot(x_line, y_line, b-, labelf拟合直线: y{m:.2f}x{b_fit:.2f}) # 绘制投影线 for xi, yi in zip([1, 2, 3], [2, 3, 5]): y_proj m * xi b_fit plt.plot([xi, xi], [yi, y_proj], k--, lw0.8) plt.xlabel(x) plt.ylabel(y) plt.title(最小二乘法线性回归) plt.legend() plt.grid(True) plt.show()5. 高级应用与性能优化在实际应用中我们还需要考虑数值稳定性和计算效率问题。5.1 使用SVD提高稳定性当AᵀA接近奇异时直接求逆可能不稳定可以使用SVD分解def least_squares_svd(A, b): U, s, Vh np.linalg.svd(A, full_matricesFalse) s_inv np.diag(1/s) return Vh.T s_inv U.T b params_svd least_squares_svd(A, b)5.2 稀疏矩阵优化对于大规模稀疏问题可以使用稀疏矩阵运算from scipy.sparse import csr_matrix from scipy.sparse.linalg import lsqr # 假设A是稀疏矩阵 A_sparse csr_matrix(A) result lsqr(A_sparse, b) params_sparse result[0]5.3 正则化处理岭回归为防止过拟合可以加入L2正则化def ridge_regression(A, b, alpha0.1): n_features A.shape[1] return np.linalg.inv(A.T A alpha * np.eye(n_features)) A.T b params_ridge ridge_regression(A, b, alpha0.1)6. 常见问题与调试技巧在实际实现过程中可能会遇到各种问题。以下是一些常见问题及其解决方法矩阵不可逆检查矩阵A是否列满秩使用伪逆np.linalg.pinv代替逆添加小的正则化项数值不稳定对数据进行标准化处理使用SVD分解代替直接求逆增加浮点精度dtypenp.float64投影结果不符合预期验证投影矩阵的幂等性检查基向量是否线性独立可视化投影过程辅助调试# 调试示例检查矩阵条件数 print(f矩阵A的条件数: {np.linalg.cond(A):.2f}) # 条件数越大矩阵越接近奇异通过本文的代码实践我们不仅实现了各种投影矩阵还将其应用于实际的线性回归问题。这种从数学理论到代码实现的过程正是数据科学和机器学习工作中最核心的技能之一。

相关文章:

用Python和NumPy手把手实现投影矩阵:从二维投影到最小二乘法拟合

用Python和NumPy手把手实现投影矩阵:从二维投影到最小二乘法拟合 线性代数中的投影概念看似抽象,但在数据科学和机器学习中无处不在。想象一下,当你用线性回归拟合数据点时,本质上是在寻找一个子空间,使得所有数据点到…...

电机控制-PMSM无感FOC控制(五)SVPWM——过调制区的谐波抑制策略

1. 过调制区的谐波问题从哪来? 第一次调试PMSM过调制区时,我被电机发出的尖锐噪音吓了一跳。示波器上原本光滑的正弦电流波形突然出现了明显的毛刺,THD(总谐波失真)直接从5%飙到15%。这种现象的本质,是传统…...

Stegsnow使用教程

Stegsnow是一款轻量级的隐写术工具,专门用于在文本文件中隐藏秘密信息。其核心原理是利用文本文件中的”空白字符”(如空格、制表符、换行符)存储二进制数据,通过调整这些不可见字符的组合来编码秘密信息,从而实现隐蔽…...

Python实战:如何用多线程加速破解ZIP/RAR密码(附完整代码)

Python多线程密码破解实战:从原理到性能优化 在数据恢复和渗透测试领域,密码保护的压缩文件处理是常见需求。当我们面对遗忘密码的ZIP/RAR文件时,Python提供了高效的解决方案。本文将深入探讨如何利用多线程技术显著提升密码破解效率&#xf…...

VRM模型创作全流程:从骨骼配置到物理模拟的技术实践

VRM模型创作全流程:从骨骼配置到物理模拟的技术实践 【免费下载链接】VRM-Addon-for-Blender VRM Importer, Exporter and Utilities for Blender 2.93 to 5.0 项目地址: https://gitcode.com/gh_mirrors/vr/VRM-Addon-for-Blender 在3D角色创作领域&#xf…...

工作流自动化革命:用KeymouseGo解放重复操作困境

工作流自动化革命:用KeymouseGo解放重复操作困境 【免费下载链接】KeymouseGo 类似按键精灵的鼠标键盘录制和自动化操作 模拟点击和键入 | automate mouse clicks and keyboard input 项目地址: https://gitcode.com/gh_mirrors/ke/KeymouseGo 你是否每天重复…...

终极指南:如何使用MTEX工具箱进行材料微观结构分析

终极指南:如何使用MTEX工具箱进行材料微观结构分析 【免费下载链接】mtex MTEX is a free Matlab toolbox for quantitative texture analysis. Homepage: 项目地址: https://gitcode.com/gh_mirrors/mt/mtex MTEX是一款强大的开源MATLAB工具箱,专…...

QMCDecode技术解密:让加密音频重获自由的无损转换方案

QMCDecode技术解密:让加密音频重获自由的无损转换方案 【免费下载链接】QMCDecode QQ音乐QMC格式转换为普通格式(qmcflac转flac,qmc0,qmc3转mp3, mflac,mflac0等转flac),仅支持macOS,可自动识别到QQ音乐下载目录,默认转…...

从NetworkManager冲突到配置文件错误:一步步教你排查Linux网络服务故障

从NetworkManager冲突到配置文件错误:一步步教你排查Linux网络服务故障 当你深夜加班部署服务器时,突然发现网络服务无法启动,屏幕上跳出那行熟悉的Job for network.service failed错误提示,是不是瞬间血压飙升?作为L…...

车辆状态估计模型EKF/AEKF 基于Carsim和simulink联合仿真,在建立车辆三自由...

车辆状态估计模型EKF/AEKF 基于Carsim和simulink联合仿真,在建立车辆三自由度模型(自行车模型加纵向)的基础上,分别使用EKF和AEKF算法对纵向车速,横摆角速度,质心侧偏角进行估计,并进行结果对比。 自适应扩展卡尔曼滤…...

Hunyuan-MT Pro快速上手:添加语音输入/输出模块(Whisper+VITS)扩展方案

Hunyuan-MT Pro快速上手:添加语音输入/输出模块(WhisperVITS)扩展方案 1. 项目概述与扩展价值 Hunyuan-MT Pro是一个基于腾讯混元大模型的多语言翻译终端,原本专注于文本翻译。但实际使用中,我们经常遇到这样的场景&…...

NPM -v报错Error: Cannot find module ‘./cli/validate-engines.js‘

问题描述 C:\Users\Administrator>npm -v Error: Cannot find module ./cli/validate-engines.js Require stack: - C:\Users\Administrator\AppData\Roaming\npm\node_modules\npm\lib\cli.js - C:\Users\Administrator\AppData\Roaming\npm\node_modules\npm\bin\npm-cli…...

AI写论文新选择!4款AI论文生成工具,高效完成毕业论文创作!

实测四款AI论文写作工具 在撰写期刊论文、毕业论文或者职称论文的过程中,许多学者常常会遇到不少困难。人工撰写论文时庞大的文献资料让人感到无从下手,查找相关信息就像是在大海中捞针。同时,论文格式的复杂与严格要求常常让人陷入焦虑之中…...

StreamCap:构建直播内容捕获的神经网络式生态系统

StreamCap:构建直播内容捕获的神经网络式生态系统 【免费下载链接】StreamCap Multi-Platform Live Stream Automatic Recording Tool | 多平台直播流自动录制客户端 基于FFmpeg 支持监控/定时/转码 项目地址: https://gitcode.com/gh_mirrors/st/StreamCap …...

OpenClaw+百川2-13B-4bits:个人博客内容自动生成与发布方案

OpenClaw百川2-13B-4bits:个人博客内容自动生成与发布方案 1. 为什么需要自动化博客工作流 作为一个坚持写了5年技术博客的开发者,我深知内容创作的痛点:灵感转瞬即逝,写作耗时费力,排版发布流程繁琐。每次从灵感到最…...

如何高效下载八大网盘文件:完全免费的直链获取解决方案

如何高效下载八大网盘文件:完全免费的直链获取解决方案 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国移动云盘 / 天翼…...

douyin-downloader:高效采集抖音内容的全流程解决方案

douyin-downloader:高效采集抖音内容的全流程解决方案 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback suppo…...

百度网盘直链解析:如何绕过限速实现高速下载的技术方案

百度网盘直链解析:如何绕过限速实现高速下载的技术方案 【免费下载链接】baidu-wangpan-parse 获取百度网盘分享文件的下载地址 项目地址: https://gitcode.com/gh_mirrors/ba/baidu-wangpan-parse 在数字化资源获取过程中,百度网盘作为国内主流云…...

qmc-decoder:QMC加密音乐格式转换工具的全方位应用指南

qmc-decoder:QMC加密音乐格式转换工具的全方位应用指南 【免费下载链接】qmc-decoder Fastest & best convert qmc 2 mp3 | flac tools 项目地址: https://gitcode.com/gh_mirrors/qm/qmc-decoder 一、问题引入:当音乐文件被"锁住"…...

目标金额是否能被给定硬币组成或者最少硬币数量

在编程中,判断一个目标金额能否由一组给定的硬币组成,这是一个经典的“硬币找零”或“完全背包”问题。 最常用且高效的解决方法是使用动态规划 核心思路 将这个问题分解成更小的子问题。 是不是在想当前金额,怎么知道能够由哪些已知硬币凑成…...

互联网创业者的AI助手:用Nanbeige 4.1-3B快速生成产品文案与市场分析

互联网创业者的AI助手:用Nanbeige 4.1-3B快速生成产品文案与市场分析 你是不是也遇到过这种情况?产品功能已经开发得七七八八,但产品介绍文档还是一片空白;明天就要发新品预热微博,文案却憋了一下午只写出个标题&…...

YOLOv11与OFA-Image-Caption联动:实现视频流中实时物体检测与描述生成

YOLOv11与OFA-Image-Caption联动:实现视频流中实时物体检测与描述生成 你有没有想过,让机器不仅能“看见”视频里有什么,还能像人一样,用语言把看到的东西“说”出来?比如,在监控画面里,它不仅…...

Qwen-Turbo-BF16实战案例:电商主图生成——白底产品图+场景化展示图双输出

Qwen-Turbo-BF16实战案例:电商主图生成——白底产品图场景化展示图双输出 1. 电商主图生成的新选择 电商卖家每天都要面对一个头疼的问题:商品主图怎么设计?白底图要干净专业,场景图要吸引眼球,找设计师成本高&#…...

MTKClient全平台高效应用指南:从环境配置到设备交互的实战方案

MTKClient全平台高效应用指南:从环境配置到设备交互的实战方案 【免费下载链接】mtkclient MTK reverse engineering and flash tool 项目地址: https://gitcode.com/gh_mirrors/mt/mtkclient MTKClient作为联发科设备刷机与调试的专业工具,提供跨…...

霜儿-汉服-造相Z-Turbo效果可视化:同一提示词不同采样步数质量对比

霜儿-汉服-造相Z-Turbo效果可视化:同一提示词不同采样步数质量对比 1. 引言:为什么关注采样步数? 当你使用AI生成汉服人像时,是否遇到过这样的困惑:同样的提示词,为什么有时候生成的效果惊艳,…...

XUnity.AutoTranslator:Unity游戏自动翻译插件完整使用指南

XUnity.AutoTranslator:Unity游戏自动翻译插件完整使用指南 【免费下载链接】XUnity.AutoTranslator 项目地址: https://gitcode.com/gh_mirrors/xu/XUnity.AutoTranslator 🎮 什么是XUnity.AutoTranslator? XUnity.AutoTranslator是…...

3分钟解锁QQ音乐加密文件:QMCDecode让你的音乐重获自由

3分钟解锁QQ音乐加密文件:QMCDecode让你的音乐重获自由 【免费下载链接】QMCDecode QQ音乐QMC格式转换为普通格式(qmcflac转flac,qmc0,qmc3转mp3, mflac,mflac0等转flac),仅支持macOS,可自动识别到QQ音乐下载目录,默认…...

突破网盘限速壁垒:ctfileGet实现技术民主化的创新实践

突破网盘限速壁垒:ctfileGet实现技术民主化的创新实践 【免费下载链接】ctfileGet 获取城通网盘一次性直连地址 项目地址: https://gitcode.com/gh_mirrors/ct/ctfileGet 在数字资源高速流通的今天,网盘服务已成为信息传递的重要基础设施。然而&a…...

抖音直播数据采集技术:WebSocket逆向与实时弹幕抓取解决方案

抖音直播数据采集技术:WebSocket逆向与实时弹幕抓取解决方案 【免费下载链接】DouyinLiveWebFetcher 抖音直播间网页版的弹幕数据抓取(2025最新版本) 项目地址: https://gitcode.com/gh_mirrors/do/DouyinLiveWebFetcher 在直播电商和…...

G-Helper终极指南:3分钟摆脱华硕笔记本性能烦恼

G-Helper终极指南:3分钟摆脱华硕笔记本性能烦恼 【免费下载链接】g-helper Lightweight, open-source control tool for ASUS laptops and ROG Ally. Manage performance modes, fans, GPU, battery, and RGB lighting across Zephyrus, Flow, TUF, Strix, Scar, an…...