线性代数的视角理解LSR(least square regression)的参数评估算法本质
https://medium.com/@andrew.chamberlain/the-linear-algebra-view-of-least-squares-regression-f67044b7f39b
线性回归是初学者学习的最重要的统计模型工具。然而,传统的教学方式使得我们很难理解到这个regression的本质。大多数课程聚焦在"计算"视图上,在这个计算视图中,regression关注于每个观察值和预测值之间差的平方和所形成的表达式,随后我们对这个表达式应用求导取0,最终算得各个系数的值。
大多数教科书诱导学生们关注在这个痛苦的计算过程上,随后依赖于类似R或者Stata的统计软件包上,这导致学生严重依赖于这些软件,而不会深入理解到底是怎么工作的,其本质是什么。。这往往是不真正理解数学的老师去教regression的常见方式。
在本文中,我将更优雅简单地演示LSR的本质,我把他称为"线性代数"视图。
问题导入
regression的终极目标是找到一个合适的model来拟合一系列观测值的集合。本例中,我搜集了一些工厂每天机器故障的次数,比如我已经获取了三个数据点(day, number of failure): (1,1),(2,2),(3,2)。
我们的目标是寻找到一个线性方程来拟合这三个点。我们相信存在一个数学映射,将"days"唯一映射为"failures",或者说:
以 的形式来映射
这里b就是每天的机器故障数, x是day, C,D是线性变换的系数,这也是我们要寻找的未知数。
我们将已知的三个数据点代入线性方程,得到:
对于前两个点,model fit的非常好,但是第三个点却开始出现问题,也就是说我们已经意识到:这三个点并不在一条直线上,我们的model只能最大限度的近似它。
我们来看看如何以$Ax = b$的方式来表达我们的线性模型:
从这个矩阵中,我们可以说我们希望向量$\vec{b}$存在于矩阵$A$的列空间$C(A)$中.也就是说,我们希望通过矩阵A的列向量做线性组合能够得到我们的观测值$b$列向量。
然而,不幸的是,我们已经知道$b$本身并不能完全由A的列向量线性表示。这意味着向量$b$并不在$A$的列空间中.所以我们并不能通过解线性方程组的方式来求解到$x(C,D)$.
我们来继续通过画图来了解发生着什么。
在下面的手绘中,矩阵A的列向量空间被记为$C(A)$。它为三维空间中的一个平面。如果我们将矩阵$A$的两个列向量记录为$a_1,a_2$,则列空间就是两个列向量所有线性组合构成的平面。
同时你可以看到观测值构成的列向量$b$并不存在于该平面中,而是和该平面有所交集,被标志为$b$。
平面$C(A)$是我们理想的数学模型,而向量$b$则是我们实际的观测值向量,并不能完美地落在线性空间$C(A)$中,那么我们需要怎么去做呢?
线性回归模型的方法是:我们应该放弃寻找一个model能够完美拟合到$b$,相反的是我们应该找到一个另外一个足够接近目标$b$向量的向量,而该向量能够在$A$的列空间中。也就是说我们需要在列空间中找到一个向量$p$,使得$p$和$a$越靠近越好。
下面的图片演示了这个过程。我们可以想象一下,如果从$C(A)$平面的正上方向下打一个光线,这将在$C(A)$上形成一个线段的影子。这实际上就是向量$b$在矩阵$A$的列空间平面上的投影projection.这个投影在图中我们以$p$标签来标识。
被标注为$e$的向量实际上是真值向量$b$和我们计划使用的投影向量$p(\hat{b})$之间的。现在我们可以将我们的目标使用另外一种方式来描述:寻找一个合适的向量$p$使得$e$越小越好。也就是说,我们希望最小化$p,b$之间的误差。
在上面的图中,$e$就是观察值向量$b$减去投影向量$p$或者记为$b-p$.而投影向量$p$本身就是$A$的列向量线性组合----这也是为什么$p$能够在$A$的列空间中的原因----所以$p$应该等于$A$去乘以一个向量,我们记为$\hat{x}$
为了最小化这个$e$,我们希望选择一个垂直于$e$但和$b$同向的向量$p$,在图中,$e$和$p$的夹角我们标注为90度的角。
求解Regression系数
既然e和A的列空间平面垂直,那么意味着$A$的列向量和$e$的点乘都为0(因为列空间的所有向量都和$e$垂直,而$A$的列向量必然在列空间里,故而),$A\cdot e = 0,A^T\times e = 0$, 同时既然$e=b-p, p = A \times \hat{x}$,我们就可以得到:
$$A^{T}(b-A\hat{x})=0$$
从上面方程中解出$\hat{x}$,我们就得到:
$\hat{x}$的每个元素就是计算出来的系数$C,D$,这正是我们要寻找的。做线性回归本质上就是在解方程:$Ax = b$,但是如果任何b中的观测值背离线性模型,那么A将不是可逆矩阵。因此我们通过在左右分别乘上矩阵$A$的转置矩阵$A^{T}$使得其为可逆矩阵。$A^{T}A$总是一个对称的方阵,所以是可逆的,然后我们就用它来求解$\hat{x}$
使用这种代数视图还有其他的一些好处,其中之一:非常方便理解相关系数$r$.如果我們正規化x,y数据点,也就是说分别减去其均值,那么r就是$b,C(A)$的夹角的余弦值。
$cos()$函数值的范围是-1到1,就和r的值域一样。如果regression完全拟合,r=1,这意味着$b$在平面上。如果b在平面上,那么夹角是0,而$cos(0)=1$,相反,如果regression非常糟糕,r=0,而b和平面是垂直的,这时$cos(pi/2)=0$
线性代数的视角理解LSR(least square regression)的参数评估算法本质的更多相关文章
- 从Java视角理解CPU上下文切换(Context Switch)
从Java视角理解系统结构连载, 关注我的微博(链接)了解最新动态 在高性能编程时,经常接触到多线程. 起初我们的理解是, 多个线程并行地执行总比单个线程要快, 就像多个人一起干活总比一个人干要快 ...
- 线性代数的本质与几何意义 03. 矩阵与线性变换 (3blue1brown 咪博士 图文注解版)
首先,恭喜你读到了咪博士的这篇文章.本文可以说是该系列最重要.最核心的文章.你对线性代数的一切困惑,根源就在于没有真正理解矩阵到底是什么.读完咪博士的这篇文章,你一定会有一种醍醐灌顶.豁然开朗的感觉! ...
- 线性代数的本质与几何意义 01. 向量是什么?(3blue1brown 咪博士 图文注解版)
向量是线性代数最基础.最基本的概念之一,要深入理解线性代数的本质,首先就要搞清楚向量到底是什么? 向量之所以让人迷糊,是因为我们在物理.数学,以及计算机等许多地方都见过它,但又没有彻底弄懂,以至于似是 ...
- 线性代数的28法则:作为程序员掌握这些API就够用了……
目录 1. 向量 & 矩阵 1.1. 问: np.ndarray 与 np.matrix 的区别 1.2. 向量空间 2. 算术运算 2.1. 为什么线性代数定义的乘积运算不按照加法的规则(按 ...
- 从Java视角理解CPU缓存(CPU Cache)
从Java视角理解系统结构连载, 关注我的微博(链接)了解最新动态众所周知, CPU是计算机的大脑, 它负责执行程序的指令; 内存负责存数据, 包括程序自身数据. 同样大家都知道, 内存比CPU慢很多 ...
- 线性代数的本质与几何意义 02. 线性组合、张成的空间、基(3blue1brown 咪博士 图文注解版)
1. 线性组合 接下来我们要换一个角度来看向量.以二维平面直角坐标系为例,i, j 分别是沿 2 个坐标轴方向的单位向量.那么坐标平面上的其他向量,例如 [ 3 -2 ] [3−与 i, j 是什么 ...
- 用三维的视角理解二维世界:完美解释meshgrid函数,三维曲面,等高线,看完你就懂了。...
完美解释meshgrid函数,三维曲面,等高线 #用三维的视角理解二维世界 #完美解释meshgrid函数,三维曲面,等高线 import numpy as np import matplotlib. ...
- [转载]三十分钟理解:线性插值,双线性插值Bilinear Interpolation算法
[转载]三十分钟理解:线性插值,双线性插值Bilinear Interpolation算法 来源:https://blog.csdn.net/xbinworld/article/details/656 ...
- 《深入理解 Java 虚拟机》学习 -- 垃圾回收算法
<深入理解 Java 虚拟机>学习 -- 垃圾回收算法 1. 说明 程序计数器,虚拟机栈,本地方法栈三个区域随线程而生,随线程而灭,这几个区域的内存分配和回收都具备确定性 Java 堆和方 ...
随机推荐
- Types方法之upperBound-lowerBound-isUnbounded-containsType
1.upperBound(Type t)方法 /** * The "rvalue conversion". * The upper bound of most types is t ...
- IntelliJ IDEA使用心得之非Maven项目篇
今天和大家分享下非Maven项目在IDEA中的配置方法,由于非Maven项目的配置方法基本相同,所以此篇只对不同点进行说明. 1.声明依赖库 我们可以使用库的方式来添加项目依赖,这是一个非常好的实践. ...
- numpy.linalg.norm(求范数)
1.linalg=linear(线性)+algebra(代数),norm则表示范数. 2.函数参数 x_norm=np.linalg.norm(x, ord=None, axis=None, keep ...
- LR问题集合
LR如何解决低维不可分 特征映射:通过特征变换的方式把低维空间转换到高维空间,而在低维空间不可分的数据,到高维空间中线性可分的几率会高一些.具体方法:核函数,如:高斯核,多项式核等等. 从图模型角度看 ...
- PTA (Advanced Level) 1027 Colors in Mars
Colors in Mars People in Mars represent the colors in their computers in a similar way as the Earth ...
- spark报错处理
Spark报错处理 1.问题:org.apache.spark.SparkException: Exception thrown in awaitResult 分析:出现这个情况的原因是spark启动 ...
- 远程通信机制RPC与RMI的关系
1.RPC RPC(Remote Procedure Call Protocol)远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议.RPC不依赖于具体的网 ...
- nginx学习笔记(8)虚拟主机名---转载
通配符名字正则表达式名字其他类型的名字优化兼容性 虚拟主机名使用server_name指令定义,用于决定由某台虚拟主机来处理请求.具体请参考<nginx如何处理一个请求>.虚拟主机名可以使 ...
- 国际化实现之基于jquery
jQuery.i18n.properties是一款轻量级的jQuery国际化插件,能实现Web前端的国际化. jQuery.i18n.properties 采用 .properties 文件对 Jav ...
- 玩转Git之初识Git
git是什么 Git是一款免费.开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目 Git 和 svn 有什么区别 它们之间的主要区别是Git是分布式的,而svn是集中式. 当然Git也可 ...