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)的参数评估算法本质的更多相关文章

  1. 从Java视角理解CPU上下文切换(Context Switch)

    从Java视角理解系统结构连载, 关注我的微博(链接)了解最新动态   在高性能编程时,经常接触到多线程. 起初我们的理解是, 多个线程并行地执行总比单个线程要快, 就像多个人一起干活总比一个人干要快 ...

  2. 线性代数的本质与几何意义 03. 矩阵与线性变换 (3blue1brown 咪博士 图文注解版)

    首先,恭喜你读到了咪博士的这篇文章.本文可以说是该系列最重要.最核心的文章.你对线性代数的一切困惑,根源就在于没有真正理解矩阵到底是什么.读完咪博士的这篇文章,你一定会有一种醍醐灌顶.豁然开朗的感觉! ...

  3. 线性代数的本质与几何意义 01. 向量是什么?(3blue1brown 咪博士 图文注解版)

    向量是线性代数最基础.最基本的概念之一,要深入理解线性代数的本质,首先就要搞清楚向量到底是什么? 向量之所以让人迷糊,是因为我们在物理.数学,以及计算机等许多地方都见过它,但又没有彻底弄懂,以至于似是 ...

  4. 线性代数的28法则:作为程序员掌握这些API就够用了……

    目录 1. 向量 & 矩阵 1.1. 问: np.ndarray 与 np.matrix 的区别 1.2. 向量空间 2. 算术运算 2.1. 为什么线性代数定义的乘积运算不按照加法的规则(按 ...

  5. 从Java视角理解CPU缓存(CPU Cache)

    从Java视角理解系统结构连载, 关注我的微博(链接)了解最新动态众所周知, CPU是计算机的大脑, 它负责执行程序的指令; 内存负责存数据, 包括程序自身数据. 同样大家都知道, 内存比CPU慢很多 ...

  6. 线性代数的本质与几何意义 02. 线性组合、张成的空间、基(3blue1brown 咪博士 图文注解版)

    1. 线性组合 接下来我们要换一个角度来看向量.以二维平面直角坐标系为例,i, j 分别是沿 2 个坐标轴方向的单位向量.那么坐标平面上的其他向量,例如 [ 3  -2 ] [3−与 i, j 是什么 ...

  7. 用三维的视角理解二维世界:完美解释meshgrid函数,三维曲面,等高线,看完你就懂了。...

    完美解释meshgrid函数,三维曲面,等高线 #用三维的视角理解二维世界 #完美解释meshgrid函数,三维曲面,等高线 import numpy as np import matplotlib. ...

  8. [转载]三十分钟理解:线性插值,双线性插值Bilinear Interpolation算法

    [转载]三十分钟理解:线性插值,双线性插值Bilinear Interpolation算法 来源:https://blog.csdn.net/xbinworld/article/details/656 ...

  9. 《深入理解 Java 虚拟机》学习 -- 垃圾回收算法

    <深入理解 Java 虚拟机>学习 -- 垃圾回收算法 1. 说明 程序计数器,虚拟机栈,本地方法栈三个区域随线程而生,随线程而灭,这几个区域的内存分配和回收都具备确定性 Java 堆和方 ...

随机推荐

  1. 【树】Convert Sorted Array to Binary Search Tree

    题目: Given an array where elements are sorted in ascending order, convert it to a height balanced BST ...

  2. 关于mpvue和wafer2-client-sdk的 微信登录失败,请检查网络状态

    关于mpvue和wafer2-client-sdk的登录使用. 错误形式: <script> // import {get} from './util' import qcloud fro ...

  3. android activity和fragment的生命周期图

    Activity的生命周期: Fragment的生命周期:

  4. WordPress上传文件类型限制解决办法

    文件类型不符合安全规则.试试别的文件. 这种错误是由于WordPress中做了文件上传格式的限制,这种限制可以在WordPress中的wp-include/functions.php的get_allo ...

  5. C++的函数对象优于函数指针地方

    转载自:http://blog.csdn.net/huang_xw/article/details/7934156 在C++编程语言中,有很多功能都与C语言相通,比如指针的应用等等.在这里我们介绍的则 ...

  6. golang-利用反射给结构体赋值

    由于想给一个结构体的部分成员赋值,但是有不知道具体名字,故将tag的json名字作为索引,按照json名字来一一赋值 1.通过tag反射//将结构体里的成员按照json名字来赋值 func SetSt ...

  7. golang-nsq消息队列应用

    1. 安装nsq brew install nsq 2.启动nsq https://nsq.io/overview/quick_start.html 3.golang client var produ ...

  8. 【.Net】水晶报表CrystalReport粗浅入门

    VB6代码大概是这样的: crystalreport1.Connect:='dsn=xxx;uid=yyy;pwd=zzz;dsq=aaa'; crystalreport1.DiscardSavedD ...

  9. ARP地址解析协议原理

    概述 网络层以上的协议用IP地址来标识网络接口,但以太数据帧传输时,以物理地址来标识网络接口.因此我们需要进行IP地址与物理地址之间的转化. 对于IPv4来说,我们使用ARP地址解析协议来完成IP地址 ...

  10. ruby文件操作

    Ruby代码 1.#读文件 2.f = File.open("myfile.txt", "r") 3.f.each_line do|line| 4.puts & ...