线性回归最小二乘法公式推导「建议收藏」

线性回归最小二乘法公式推导「建议收藏」#1.符号表示首先我们将训练样本的**特征矩阵X**进行表示,其中N为样本个数,p为特征个数,每一行表示为每个样本,每一列表示特征的每个维度:

大家好,又见面了,我是你们的朋友全栈君。

1. 符号表示

首先我们将训练样本的特征矩阵X进行表示,其中N为样本个数,p为特征个数,每一行表示为每个样本,每一列表示特征的每个维度:
X = ( x 11 x 12 . . . x 1 p x 21 x 22 . . . x 2 p . . . . . . . . . . . . x N 1 x N 2 . . . x N p ) N ⋅ p X= \begin{gathered} \begin{pmatrix} x_{11} & x_{12} & … & x_{1p} \\ x_{21} & x_{22} & … & x_{2p} \\ … & … &… &… \\ x_{N1} & x_{N2} & … & x_{Np} \end{pmatrix} \quad \end{gathered}_{N\cdot p} X=⎝⎜⎜⎛​x11​x21​...xN1​​x12​x22​...xN2​​............​x1p​x2p​...xNp​​⎠⎟⎟⎞​​N⋅p​

然后我们对训练样本的标签向量Y和权重向量w进行表示,其中权重向量指的是线性回归中各个系数形成的向量。
Y = ( y 1 y 2 . . . y N ) Y = \begin{gathered} \begin{pmatrix} y_{1} \\ y_{2} \\ … \\ y_{N} \end{pmatrix} \quad \end{gathered} Y=⎝⎜⎜⎛​y1​y2​...yN​​⎠⎟⎟⎞​​

w = ( w 1 w 2 . . . w p ) w = \begin{gathered} \begin{pmatrix} w_{1} \\ w_{2} \\ … \\ w_{p} \end{pmatrix} \quad \end{gathered} w=⎝⎜⎜⎛​w1​w2​...wp​​⎠⎟⎟⎞​​
为了方便运算,我们把 y i = x i w + b y_{i} = x_{i}w + b yi​=xi​w+b中的b也并入到w和x中。则上述的符号表示则为:

X = ( x 10 x 11 x 12 . . . x 1 p x 20 x 21 x 22 . . . x 2 p . . . . . . . . . . . . . . . x N 0 x N 1 x N 2 . . . x N p ) N ⋅ p X= \begin{gathered} \begin{pmatrix} x_{10} & x_{11} & x_{12} & … & x_{1p} \\ x_{20} & x_{21} & x_{22} & … & x_{2p} \\ … & … &… &… &… \\ x_{N0} & x_{N1} & x_{N2} & … & x_{Np} \end{pmatrix} \quad \end{gathered}_{N\cdot p} X=⎝⎜⎜⎛​x10​x20​...xN0​​x11​x21​...xN1​​x12​x22​...xN2​​............​x1p​x2p​...xNp​​⎠⎟⎟⎞​​N⋅p​

w = ( w 0 w 1 w 2 . . . w p ) w = \begin{gathered} \begin{pmatrix} w_{0} \\ w_{1} \\ w_{2} \\ … \\ w_{p} \end{pmatrix} \quad \end{gathered} w=⎝⎜⎜⎜⎜⎛​w0​w1​w2​...wp​​⎠⎟⎟⎟⎟⎞​​

2. 公式推导

L ( w ) = ∑ i = 1 N ( x i w − y i ) 2 L(w) = \sum^{N}_{i =1 } (x_{i}w – y_{i})^{2} L(w)=i=1∑N​(xi​w−yi​)2
w = arg ⁡ min ⁡ L ( w ) = arg ⁡ min ⁡ ∑ i = 1 N ( x i w − y i ) 2 w = \operatorname { arg } \operatorname { min }L(w) = \operatorname { arg } \operatorname { min } \sum^{N}_{i =1 } (x_{i}w – y_{i})^{2} w=argminL(w)=argmini=1∑N​(xi​w−yi​)2
为什么是转置乘以原矩阵,这是由于Y是列向量,则 ( X W − Y ) (XW – Y) (XW−Y)则也是列向量。根据矩阵乘法的定义,只有行向量乘以列向量,最终结果才是一个常数。
L ( w ) = ( X W − Y ) T ( X W − Y ) L(w) = (XW-Y)^{T} (XW-Y) L(w)=(XW−Y)T(XW−Y)

L ( w ) = ( W T X T − Y T ) ( X W − Y ) L(w) = (W^{T}X^{T} – Y^{T})(XW-Y) L(w)=(WTXT−YT)(XW−Y)

L ( w ) = ( W T X T X W − 2 W T X T Y + Y T Y ) L(w) = (W^{T}X^{T}XW-2W^{T}X^{T}Y+Y^{T}Y) L(w)=(WTXTXW−2WTXTY+YTY)

∂ L ( w ) ∂ w = 2 X T X W − 2 X T Y = 0 \frac { \partial L(w)} {\partial w} = 2X^{T}XW – 2X^{T}Y = 0 ∂w∂L(w)​=2XTXW−2XTY=0

W = ( X T X ) − 1 X T Y W = {(X^{T}X)}^{-1}X^{T}Y W=(XTX)−1XTY

  后记:其实求非线性回归的时候也可以使用该最小二乘法来计算多项式系数 w w w,只要把高次项添加到原始的 X X X后面即可。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/145499.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • jquery 用于操作动态元素的delegate/on方法

    jquery 用于操作动态元素的delegate/on方法delegate()方法的事件处理程序适用于当前或未来的元素(比如由脚本创建的新元素)。在做项目中有很多由ajax动态生成的html标签,jquery对这些标签不会响应$(selector).click(function..或者$(selector).bind(‘click’,function..,。查看资料有的推荐使用live方法,但live在jQuery1.7中就不再建议使用,在1

    2022年10月21日
  • The method assertEquals(double, double) from the type Assert is deprecated

    The method assertEquals(double, double) from the type Assert is deprecated从网上下载的视频,看着视频做。居然和人家的不一样。assertEquals(doubleexpected,doubleactul)被废弃了,换成assertEquals(doubleexpected,doubleactul,doubledelta)也就是在原来的方法上加一个误差值(double类型)官方解释为:@Deprecatedstaticpublicvoi

    2022年7月12日
  • 解决删除symantec,需要输入密码的问题

    解决删除symantec,需要输入密码的问题安装了symantec后,感觉系统满了好多,决定卸载了。在卸载是发现需要输入密码,从来没有设置过密码,也不知是要输那个密码。研究了一阵子,可以通过以下步骤来绕过输入密码问题。1.安全模式启动,在命令行中输入serviecs.msc打开服务管理器,找到Symantec相关的项,在启动选项里设为禁用。其实发现真正要禁用的Symantecendpointprotecion,启动项是灰的,根本禁用不了。只能找到C:/\ProgramFiles\Symantec\Symantecendp

    2022年6月1日
  • 二小姐对群环域的理解

    二小姐对群环域的理解从本质上来看,群=非空集合+二元运算,群的定义主要包括四个方面:封闭性:二元运算的定义就可以满足这个性质 结合律:可以确保多个元素运算时得到唯一的结果,不受运算先后的影响,从而有(或na)的表达式 单位元:唯一 逆元:任意元素均有且唯一特殊的群为循环群;群举例:Z(加法);Zn(加法)明确了群的定义后,我们接着了解群的各类特殊子群的定义和性质:子群H=群G的子集合+二元运算…

    2022年6月21日
  • Linux 内核编译(三天吐血经历!)[通俗易懂]

    Linux 内核编译(三天吐血经历!)[通俗易懂]写在前面的话:本人大二,东南大学一个软工狗,正在修一门名为《操作系统原理》的坑爹课!前几天做一个实验:编译Linux内核并向其增加一个系统调用。这个实验实在是太让人无语了,各种坑!昨天这个时候,我还在苦苦煎熬中。在今天凌晨四点才做好。为了让其他人少走一些弯路,鄙人就把自己的经验以及教训写下来。里面会有一些不足,希望大家多多指教~废话不多说,那就开始吧:一、实验前的准备:Vm

    2022年7月23日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号