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

正规方程推导,详细版

推导正规方程(Normal Equation)通常是在线性回归的上下文中进行的。线性回归的目标是找到一个线性模型 h θ ( x ) = θ T x h_\theta(x) = \theta^T x hθ(x)=θTx,使得模型的预测值与实际值之间的差异(通常是均方误差)最小。

以下是推导正规方程的详细步骤,每一步都会说明所依据的公式或原理:

1. 定义损失函数

线性回归的损失函数通常是均方误差(Mean Squared Error, MSE):

J ( θ ) = 1 2 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) 2 J(\theta) = \frac{1}{2m} \sum_{i=1}^{m} (h_\theta(x^{(i)}) - y^{(i)})^2 J(θ)=2m1i=1m(hθ(x(i))y(i))2

其中:

  • m m m 是样本数量。
  • x ( i ) x^{(i)} x(i) 是第 i i i 个样本的特征向量。
  • y ( i ) y^{(i)} y(i) 是第 i i i 个样本的实际值。
  • h θ ( x ( i ) ) h_\theta(x^{(i)}) hθ(x(i)) 是模型对第 i i i 个样本的预测值。
  • θ \theta θ 是模型的参数向量。

2. 展开损失函数

h θ ( x ( i ) ) h_\theta(x^{(i)}) hθ(x(i)) 替换为 θ T x ( i ) \theta^T x^{(i)} θTx(i),并将损失函数展开:

J ( θ ) = 1 2 m ∑ i = 1 m ( θ s h i z i T x ( i ) − y ( i ) ) 2 J(\theta) = \frac{1}{2m} \sum_{i=1}^{m} (\theta^shiziT x^{(i)} - y^{(i)})^2 J(θ)=2m1i=1m(θshiziTx(i)y(i))2

在推导正规方程的过程中,对损失函数求导是一个关键步骤。这里我们将详细说明如何使用矩阵微积分来求导。

首先,回顾损失函数的向量化表示:

J ( θ ) = 1 2 m ( X θ − y ) T ( X θ − y ) J(\theta) = \frac{1}{2m} (X\theta - y)^T (X\theta - y) J(θ)=2m1(y)T(y)

J ( θ ) = 1 2 m [ ( θ T X T − y T ) ( X θ − y ) ] J(\theta) = \frac{1}{2m} \left[ (\theta^T X^T - y^T)(X\theta - y) \right] J(θ)=2m1[(θTXTyT)(y)] 依据矩阵转置公式: ( A + B ) T = A T + B T (A+B)T=A^T+B^T (A+B)T=AT+BT, ( A B ) T = B T A T (AB)^T=B^TA^T (AB)T=BTAT

= 1 2 m [ θ T X T X θ − θ T X T y − y T X θ + y T y ] = \frac{1}{2m} \left[ \theta^T X^T X \theta - \theta^T X^T y - y^T X \theta + y^T y \right] =2m1[θTXTθTXTyyT+yTy] 乘法展开

  1. 求导
    我们的目标是找到使 J ( θ ) J(\theta) J(θ) 最小的 θ \theta θ。为此,我们需要对 J ( θ ) J(\theta) J(θ) 关于 θ \theta θ 求导。 因为最开始我们的式子 J ( θ ) = 1 2 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) 2 J(\theta) = \frac{1}{2m} \sum_{i=1}^{m} (h_\theta(x^{(i)}) - y^{(i)})^2 J(θ)=2m1i=1m(hθ(x(i))y(i))2 是一个二次方程,所以他是一个凸函数,在导数为0的时候有最小值。

现在,我们对上式中的每一项关于 θ \theta θ 求导。

  • 对于 θ T X T X θ \theta^T X^T X \theta θTXT

使用矩阵微积分的规则, d d θ ( θ T A θ ) = 2 A θ \frac{d}{d\theta} (\theta^T A \theta) = 2A\theta dθd(θTAθ)=2Aθ(其中 A A A 是对称矩阵)。

因此, d d θ ( θ T X T X θ ) = 2 X T X θ \frac{d}{d\theta} (\theta^T X^T X \theta) = 2X^T X \theta dθd(θTXT)=2XT

  • 对于 − θ T X T y -\theta^T X^T y θTXTy − y T X θ -y^T X \theta yT

这两项是标量的转置,它们实际上是相等的(只是符号相反)。我们可以将它们合并为一个项( − 2 θ T X T y -2\theta^T X^T y 2θTXTy),并注意到 d d θ ( − θ T a ) = − a \frac{d}{d\theta} (-\theta^T a) = -a dθd(θTa)=a(其中 a a a 是常数向量, 这里a是 X T y X^Ty XTy)。 为什么这两项相等呢? 读者可以自行找三个矩阵乘一下试试, 为什么。 − θ T X T y -\theta^T X^T y θTXTy − y T X θ -y^T X \theta yT 是标量呢?

  1. 对于 − θ T X T y -\theta^T X^T y θTXTy

    • θ T \theta^T θT 是一个 1 × n 1 \times n 1×n 的矩阵(或向量)。
    • X T X^T XT 是一个 n × m n \times m n×m 的矩阵。
    • y y y 是一个 m × 1 m \times 1 m×1 的矩阵(或向量)。

    θ T \theta^T θT X T X^T XT 相乘时,结果是一个 1 × m 1 \times m 1×m 的矩阵。然后,这个 1 × m 1 \times m 1×m 的矩阵再与 y y y 相乘(这里实际上是行向量与列向量的点积),结果是一个 1 × 1 1 \times 1 1×1 的矩阵,即一个标量。

  2. 对于 − y T X θ -y^T X \theta yT

    • 虽然这个表达式的乘法顺序与上面的不同,但根据矩阵乘法的结合律和分配律,以及 X T X^T XT(如果 X X X 是实数矩阵)与 X X X 的对称性(如果 X X X 是对称矩阵,则 X = X T X = X^T X=XT,但在这里我们不需要 X X X 是对称的,只需要关注维度),这个表达式也可以化简为一个标量。然而,更直接的理解是:

      • y T y^T yT 是一个 1 × m 1 \times m 1×m 的矩阵。
      • X X X 是一个 m × n m \times n m×n 的矩阵。
      • θ \theta θ 是一个 n × 1 n \times 1 n×1 的矩阵。

      y T y^T yT X X X 相乘时,结果是一个 1 × n 1 \times n 1×n 的矩阵。然后,这个 1 × n 1 \times n 1×n 的矩阵再与 θ \theta θ 相乘(同样是行向量与列向量的点积,但在这里是通过矩阵乘法隐含地进行的),结果同样是一个 1 × 1 1 \times 1 1×1 的矩阵,即一个标量。

因此, d d θ ( − θ T X T y − y T X θ ) = − X T y − ( X T y ) T = − 2 X T y \frac{d}{d\theta} (-\theta^T X^T y - y^T X \theta) = -X^T y - (X^T y)^T = -2X^T y dθd(θTXTyyT)=XTy(XTy)T=2XTy(注意: ( X T y ) T = y T X (X^T y)^T = y^T X (XTy)T=yTX,但在这里我们不需要转置,因为 X T y X^T y XTy 已经是一个与 θ \theta θ 兼容的向量)。

  1. 组合导数

将上述导数组合起来,得到:

∇ θ J ( θ ) = 1 2 m [ 2 X T X θ − 2 X T y ] \nabla_\theta J(\theta) = \frac{1}{2m} \left[ 2X^T X \theta - 2X^T y \right] θJ(θ)=2m1[2XT2XTy]

= 1 m [ X T X θ − X T y ] = \frac{1}{m} \left[ X^T X \theta - X^T y \right] =m1[XTXTy]

令导数等于零

为了找到使损失函数最小的 θ \theta θ,我们令导数等于零:

1 m [ X T X θ − X T y ] = 0 \frac{1}{m} \left[ X^T X \theta - X^T y \right] = 0 m1[XTXTy]=0

X T X θ − X T y = 0 X^T X \theta - X^T y = 0 XTXTy=0

X T X θ = X T y X^T X \theta = X^T y XT=XTy

如果 X T X X^T X XTX 是可逆的,我们可以解出 θ \theta θ

θ = ( X T X ) − 1 X T y \theta = (X^T X)^{-1} X^T y θ=(XTX)1XTy

这一步推导过程如下:
在推导正规方程的过程中,我们得到了一个线性方程组:

X T X θ = X T y X^T X \theta = X^T y XT=XTy

这个方程组是一个 n × n n \times n n×n 的矩阵 X T X X^T X XTX 与一个 n × 1 n \times 1 n×1 的向量 θ \theta θ 的乘积等于另一个 n × 1 n \times 1 n×1 的向量 X T y X^T y XTy

为什么可逆就能求出来结果?

  1. 定义与性质
    一个矩阵 A A A 是可逆的(或非奇异的),如果存在一个矩阵 A − 1 A^{-1} A1,使得 A A − 1 = A − 1 A = I AA^{-1} = A^{-1}A = I AA1=A1A=I,其中 I I I 是单位矩阵。可逆矩阵的一个重要性质是,对于任何向量 b b b,线性方程组 A x = b Ax = b Ax=b 都有唯一解 x = A − 1 b x = A^{-1}b x=A1b

  2. 应用到正规方程
    在我们的情况下, A = X T X A = X^T X A=XTX。如果 X T X X^T X XTX 是可逆的,那么我们可以直接通过乘以 X T X X^T X XTX 的逆矩阵来求解 θ \theta θ

    θ = ( X T X ) − 1 X T y \theta = (X^T X)^{-1} X^T y θ=(XTX)1XTy

    这个表达式给出了 θ \theta θ 的唯一解(在 X T X X^T X XTX 可逆的条件下)。

  3. 可逆的条件
    X T X X^T X XTX 可逆的一个充分条件是 X X X 的列向量线性无关(即 X X X 的列满秩)。这意味着 X X X 的列向量不能通过其他列向量的线性组合来表示,从而保证了 X T X X^T X XTX 是一个满秩矩阵,因此是可逆的。

  4. 求解过程
    X T X X^T X XTX 可逆时,我们实际上是在执行以下步骤来求解 θ \theta θ

    • 首先,计算 X T y X^T y XTy,这是一个线性变换,将 y y y 投影到 X X X 的列空间上(或者更准确地说,是 X X X 的行空间,因为 X T X^T XT X X X 的转置)。
    • 然后,通过乘以 ( X T X ) − 1 (X^T X)^{-1} (XTX)1,我们实际上是在“撤销” X T X X^T X XTX 对某个向量所做的变换,从而找到原始参数向量 θ \theta θ

总结

在求导过程中,我们使用了矩阵微积分的规则,特别是关于二次型和线性项的导数。通过仔细展开和组合这些项,我们得到了损失函数关于 θ \theta θ 的导数,并令其等于零来找到最优解。

以上过程通过提问文心一言获得,目前在这方面最好用的大模型。

相关文章:

正规方程推导,详细版

推导正规方程(Normal Equation)通常是在线性回归的上下文中进行的。线性回归的目标是找到一个线性模型 h θ ( x ) θ T x h_\theta(x) \theta^T x hθ​(x)θTx,使得模型的预测值与实际值之间的差异(通常是均方误差&#xff0…...

【原创】java+ssm+mysql在线文件管理系统设计与实现

个人主页:程序猿小小杨 个人简介:从事开发多年,Java、Php、Python、前端开发均有涉猎 博客内容:Java项目实战、项目演示、技术分享 文末有作者名片,希望和大家一起共同进步,你只管努力,剩下的交…...

cocos Creator + fairyGUI 快速入门

版本 Creator 3.8.x,FairyGUI 2022 大部分内容来自 https://en.fairygui.com/docs/sdk/creator 1.新建cocos项目,根目录运行 npm install --save fairygui-cc 引入 fairyGUI库 2.assets目录之外新建fairyGUI项目 3.fairyGUI中编辑UI 完成后发布到Creato…...

UICollectionView 的UICollectionReusableView复用 IOS18报错问题记录

- (UICollectionReusableView *)collectionView:(UICollectionView *)collectionView viewForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath 方法复用报错 报错详情: Terminating app due to uncaught exception NSInternal…...

Ansible Roles与优化

Ansible Roles与优化 Ansible作为一款自动化运维工具,凭借其简洁的语法、强大的功能以及良好的扩展性,在IT运维领域得到了广泛应用。Ansible Roles作为Ansible的核心特性之一,为自动化部署和管理提供了极大的便利。本文将深入探讨Ansible Ro…...

Ubuntu 22.04上安装Miniconda

在Ubuntu 22.04上安装Miniconda,可以按照以下步骤进行: 步骤1:更新系统 首先,更新您的系统软件包: sudo apt update sudo apt upgrade -y步骤2:下载Miniconda安装脚本 访问Miniconda的官方网站或使用以下…...

【MySQL】入门篇—SQL基础:数据定义语言(DDL)

数据定义语言(DDL,Data Definition Language)是SQL(结构化查询语言)的一部分,主要用于定义和管理数据库的结构。 DDL允许用户创建、修改和删除数据库及其对象(如表、索引、视图等)。…...

电影评论网站开发:Spring Boot技术详解

摘要 随着信息技术在管理上越来越深入而广泛的应用,管理信息系统的实施在技术上已逐步成熟。本文介绍了电影评论网站的开发全过程。通过分析电影评论网站管理的不足,创建了一个计算机管理电影评论网站的方案。文章介绍了电影评论网站的系统分析部分&…...

20240817 全志 笔试

文章目录 1、选择题1.11.21.31.41.51.61.71.81.91.101.111.121.131.141.151.161.171.181.191.202、填空题2.12.23、问答题3.14、编程题4.14.2岗位:NO2510 嵌入式软件设计工程师(珠海/广州/西安/深圳) 题型:20 道选择题,2 道填空题,1 道问答题,2 道编程题 1、选择题 1.…...

laravel 查询数据库

数据库准备 插入 三行 不同的数据 自行搭建 laravel 工程 参考 工程创建点击此处 laravel 配置 数据库信息 DB_CONNECTIONmysql #连接什么数据库 DB_HOST127.0.0.1 # 连接 哪个电脑的 ip (决定 电脑 本机) DB_PORT3306 # 端口 DB_DATABASEyanyu…...

【Codeforces】CF 2009 F

Firefly’s Queries #前缀和 #数据结构 #数学 题目描述 Firefly is given an array a a a of length n n n. Let c i c_i ci​ denote the i i i’th cyclic shift ∗ ^{\text{∗}} ∗ of a a a. She creates a new array b b b such that b c 1 c 2 ⋯ c n b c…...

GTP4聊天记录中letax保存为word

​ 别的不说,GPT4用来看代码很是很爽的,可以让他直接恢复出函数中的数学公式,有的时候为了做笔记,GPT4回复的答案,复制出来使markdown、letax等格式,为了更好的记笔记,可以使用下面的工具将复制…...

vscode调试编译找不到gcc,只有cl,但是检查cmd是对的,控制面板的路径也更改了

🏆本文收录于《全栈Bug调优(实战版)》专栏,主要记录项目实战过程中所遇到的Bug或因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&am…...

空间解析几何5-空间圆到平面的距离【附MATLAB代码】

目录 理论公式 matlab代码 理论公式 matlab代码 function [dis,P,Q,L]Circle2PlaneDistance(T,R,n,Pn) % output % dis 为最短距离,P为距离最短时圆上的点 Q为P对应的投影点 L为最小值有几个 % input % T为园心到基坐标系的变换矩阵 R为圆半径 n为平面的单位法向…...

[已解决] pycharm添加本地conda虚拟环境 + 配置解释器 - pycharm找不到conda可执行文件

目录 问题: 方法: 补充:创建conda虚拟环境 参考文档:pycharm找不到conda可执行文件怎么办?-CSDN 问题: 1.显示:未为项目配置 Python 解释器 2.想在pycharm中使用本地创建的虚拟环境 方法&a…...

SENT - Single Edge Nibble Transmission for Automotive

SENT 总线的特征和优势 SENT 总线是一种数字信号传输协议,具有更高的传输精度和速度;SENT 总线是单线传输数据,减少信号线,降低成本。加上电源和地线,总共 3 线;SENT 总线具有更强大的诊断功能;…...

2024年软件设计师中级(软考中级)详细笔记【7】面向对象技术(下)23种设计模式(分值10+)

目录 前言阅读前必看 第七章 面向对象技术(下)7.3 设计模式(固定4分)7.3.1 设计模式的要素7.3.2 创建型设计模式7.3.2.1 Abstract Factory(抽象工厂)7.3.2.2 Builder(生成器)7.3.2.3…...

未来人工智能的发展对就业市场的影响 人工智能在生活中的相关

人工智能(Artificial Intelligence),英文缩写为AI.是新一轮科技革命和产业变革的重要驱动力量, 是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门新的技术科学. 人工智能的发展对就业市场的影响主要…...

Oracle EBS 中财务模块

Oracle E-Business Suite (EBS) 提供了全面的财务管理解决方案,涵盖了企业财务活动的各个方面。以下是EBS中主要的财务模块及其功能概述: 总账(General Ledger, GL):Oracle EBS 中 GL 模块的财务流程概览-CSDN博客 总账…...

基于SSM公廉租房维保系统的设计

管理员账户功能包括:系统首页,个人中心,业主管理,维修单位管理,房屋信息管理,维修申报管理,维修完成,房屋维护管理 业主账号功能包括:系统首页,个人中心&…...

【AI大模型】深入Transformer架构:解码器部分的实现与解析

目录 🍔 解码器介绍 🍔 解码器层 2.1 解码器层的作用 2.2 解码器层的代码实现 2.3 解码器层总结 🍔 解码器 3.1 解码器的作用 3.2 解码器的代码分析 3.3 解码器总结 学习目标 🍀 了解解码器中各个组成部分的作用. &#…...

前端html js css 基础巩固3

一个这样的首页 滑动显示 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title>&l…...

如在下载自己的需要的rmp包呢

下载地址&#xff1a;https://pkgs.org/和https://rpmfind.net/linux/rpm2html/search.php 根基自己的需要进行下载使用。...

Android TextView实现一串文字特定几个字改变颜色

遇到一个需求&#xff0c;让Android端实现给定一个字符串指定下标的几个字颜色与其他字颜色不一致。 主要是用ForegroundColorSpan这个API来传入颜色值&#xff0c;用SpannableString来设置指定索引下标的字的颜色值。 这里通过给定一个输入文字描述框&#xff0c;要求输入指定…...

桃子叶片病害分类检测数据集(猫脸码客 第221期)

桃子叶片病害分类检测数据集 一、引言 桃子作为世界上广泛种植的果树之一&#xff0c;其叶片的健康状况直接关系到果实的产量和品质。然而&#xff0c;桃子叶片易受多种病害的侵袭&#xff0c;这些病害不仅影响叶片的光合作用&#xff0c;还可能导致果实减产、品质下降&#…...

Vue--》掌握自定义依赖引入的最佳实践

在现代前端开发中&#xff0c;vue凭借其灵活性和高效性&#xff0c;已成为开发者们的宠儿&#xff0c;然而随着项目的复杂度提升&#xff0c;如何高效地管理和引入依赖&#xff0c;尤其是自定义引入依赖&#xff0c;成为了许多开发者面临的一大挑战。无论是为了优化加载速度&am…...

repo 命令大全详解(第十四篇 repo overview)

repo overview 命令用于显示当前项目的概览信息&#xff0c;帮助用户快速了解项目的状态和分支信息。 参数分类及解释 基本参数 [--current-branch]: 可选&#xff0c;仅考虑已检出的分支。 示例: repo overview --current-branch [<project>...]: 可选&#xff0c;指定…...

【设计模式】深入理解Python中的抽象工厂设计模式

深入理解Python中的抽象工厂设计模式 设计模式是软件开发中解决常见问题的经典方案&#xff0c;而**抽象工厂模式&#xff08;Abstract Factory Pattern&#xff09;**是其中非常重要的一种创建型模式。抽象工厂模式的主要作用是提供一个接口&#xff0c;创建一系列相关或依赖…...

网站建设完成后,多久需要升级迭代一次

网站建设完成后&#xff0c;一般每隔几个月就会进行一次迭代升级。以下是关于网站迭代周期和原因的具体分析&#xff1a; 更新频率&#xff1a;网站在建设完成后&#xff0c;一般每隔几个月就会进行一次迭代升级。这种周期性的更新有助于保持网站的现代感和竞争力。更新目的&a…...

一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字

这里写目录标题 问题详情分析问题代码展示 问题详情 剑指 Offer 56&#xff1a; 一个整型数组 nums 里除两个数字之外&#xff0c;其他数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n)&#xff0c;空间复杂度是O(1)。 示例&#xff1a; 输入&a…...