前言

最小二乘法在统计学的地位不必多言。本文的目的是全面地讲解最小二乘法,打好机器学习的基础。本文主要内容是最小二乘法的思想及在线性回归问题中的应用。后面的系列文章会继续讲解最小二乘的正则化。
至于非线性最小二乘和广义线性模型,如果以后有时间会进行整理。

不熟悉极大似然法的读者可以阅读我的另一篇文章《十分钟学习极大似然估计》

updata 2019/6/13:添加了对线性回归问题的矩阵定义和简要介绍,修改了少量句子,修正了公式中的少量错误。

这里是我的个人网站:
https://endlesslethe.com/easy-to-learn-ols.html
有更多总结分享,最新更新也只会发布在我的个人网站上。排版也可能会更好看一点=v=

核心思想

最小二乘法是勒让德( A. M. Legendre)于1805年在其著作《计算慧星轨道的新方法》中提出的。它的主要思想就是求解未知参数,使得理论值与观测值之差(即误差,或者说残差)的平方和达到最小:
\[E = \mathop \sum \limits_{i = 1}^n e_i^2 = \mathop \sum \limits_{i = 1}^n {\left( {{y_i} - \hat y} \right)^2}\]
观测值\(y_i\)就是我们的多组样本,理论值\(\hat y\)就是我们的假设拟合函数。目标函数也就是在机器学习中常说的损失函数\(E\),我们的目标是得到使目标函数最小化时候的参数。

所谓最小二乘,其实也可以叫做最小平方和,其目的就是通过最小化误差的平方和,使得拟合对象无限接近目标对象。换句话说,最小二乘法定义了一种函数的拟合标准,其目标是最小化误差的平方和。

直观理解

均方误差有非常好的几何意义,它对应了常用的欧几里德距离。在线性回归中,最小二乘法就是试图找到一条直线,使所有样本到直线的欧氏距离之和最小。

假设有一条直线\(y=ax+b\),要在这条直线上找到一点,距离\((x_0,y_0)\)这个点的距离最短。如果用绝对值的方法寻找,也就是取\(\min(|y-y_0|+|x-x_0|)\),由于绝对值最小为0,所以最小的情况就是\(x=x_0\)或者\(y=y_0\)处,如下图1所示。

如果用平方和的方法寻找,就是取\(\min {{(y - {y_0})^2} + {(x - {x_0})^2}}\),可以看出该式是两点间距离公式,也就是距离的概念。那么最短的距离,就是点到直线的垂线,如下图2所示。

事实上,线性回归中最小二乘法的解\(\theta= {\left( {{X^T}X} \right)^{ - 1}}{X^T}Y\)也就是投影矩阵的公式:将Y向量投影到X构成的平面上。

对任意函数f的通用解法

  1. 列出损失函数\(E = \mathop \sum \limits_{i = 1}^n e_i^2 = \mathop \sum \limits_{i = 1}^n {\left( {{y_i} - \hat y} \right)^2}\)
  2. 根据损失函数对参数应用多元函数的求极值方法,直接求解函数最小值。而更常见的方法即是将损失函数\(y_i\)用\(x_i\)和参数表示,然后使用梯度下降算法。
  3. 求得函数最小值的参数或待到梯度算法收敛,此时的参数即为所求
    这些个步骤说起来抽象,实际上这是在机器学习中应用最广泛的方法。但是对于后面的线性回归问题,有着更简洁的推导方法。

以算术平均值为例——为什么算术平均即是真值

可以说整部数理统计学的历史,就是对算术平均不断深入研究的历史。而最小二乘法可以解释为什么多次测量取算术平均的结果就是真值,比如估计身高可以测三次后取平均。

当我们对于某个未知量\(\theta\)观测\(m\)次,记每次的结果为\(x_i\)
\[E = \mathop \sum \limits_{i = 1}^m e_i^2 = \mathop \sum \limits_{i = 1}^m {\left( {{x_i} - \theta} \right)^2}\]
求导得
\[\mathop \sum \limits_{i = 1}^n - \left( {{x_i} - \theta} \right) = 0\]
所以\(\theta = \bar x = \frac{{\mathop \sum \nolimits^ {x_i}}}{m}\)

线性回归问题的定义

这部分我们简要回顾一下基本的线性代数知识。

我们知道一条直线,在三维空间中,可以用形如\(ax+by+cz=d\)的方程表示,而用矩阵的形式表达的话,即为AX=B,其中B为常数,而A和X都为n维向量。那么多个这样的方程联立在一起就被称为线性方程组,其中有两个基本问题:1)方程组是否有解,即解的存在性问题? 2)如果有解,解的个数有多少个?

为了回答这两个问题,我们令线性方程组中的方程都为线性无关方程(可以通过简单地初等行变换),方程个数为\(m\),特征数(参数数量)为\(n\)。在这样的假设下,如果\(m=n\),则一行方程对应一个参数的解,此时方程组有唯一解。如果\(m>n\),则方程无解,因为存在互相矛盾的两个方程。如果\(m<n\),则方程和参数不能一一对应,存在无穷多解。而最小二乘法是在\(m>n\)时可以使用的,其通过让残差平方和最小,找到互相矛盾解之间的近似解。

使用最小二乘求解线性回归问题

对于线性回归问题,当然可以使用求导的代数方法来找到损失函数的最小值。但矩阵法比代数法要简洁,所以现在很多书和机器学习库都是用的矩阵法来做最小二乘法,本文这里介绍一下如何使用矩阵法求解线性回归问题。

对于函数\({h_{\theta}}({x_1},{x_2},…{x_n}) = {\theta_0} + {\theta_1}{x_1} + … + {\theta_n}{x_n}\),我们将其的矩阵形式记作:
\[ X\theta = Y \]

故损失函数根据定义将Y用X和\(\theta\)代替:(系数1/2是为了简化计算添加的,求迹前和求迹后值不变)

应用矩阵迹的计算公式:

令上式为0,解得\(\theta= {\left( {{X^T}X} \right)^{ - 1}}{X^T}Y\)

Note:矩阵求导坑多,使用迹来计算比较方便。

线性回归的t检验

记n为回归方程的特征个数,m为样本数
\[S_回=\sum_{i=1}^m(\hat y - \overline y)\]
\[S_剩=\sum_{i=1}^m(y_i - \hat y)\]

总平方和(SST)可分解为回归平方和(SSR)与残差平方和(SSE)两部
\[MSR = SSR / k\]
\[MSE = SSE / (n - k - 1)\]
\[F = \frac{{MSR}}{{MSE}} = \frac{{{S_回}/k}}{{{S_剩}/(n - k - 1)}}\]

若用样本计算的\(F > F_{0.05} (k , n - k - 1)\),则拒绝\(H_0\),则回归方程在显著性水平\(\alpha=0.05\)下是显著的。

最小二乘法的适用场景

前面已经提到,根据方程数m和特征数n可以判定方程组解的存在性问题和个数问题。
当样本量\(m\)很少,小于特征数\(n\)的时候,这时拟合方程是欠定的,需要使用LASSO。当\(m=n\)时,用方程组求解。当\(m>n\)时,拟合方程是超定的,我们可以使用最小二乘法。

局限性

  • 首先,最小二乘法需要计算\({\left( {{X^T}X} \right)^{ - 1}}\)逆矩阵,有可能逆矩阵不存在,这样就没有办法直接用最小二乘法。
  • 第二,当样本特征n非常的大的时候,计算逆矩阵是一个非常耗时的工作,甚至不可行。建议不超过10000个特征。
  • 第三,如果拟合函数不是线性的,这时无法使用最小二乘法,需要通过一些技巧转化为线性才能使用。(非线性最小二乘)

最小二乘法和M估计

在统计数据时,难免会遇到异常值,即人为误差。而这种误差对结果的影响远比系统误差大,比如将1记录成10。所以我们使用稳健性来评价一个方法对异常值的敏感程度。

最小二乘法是一种稳健性较差的方法,原因在于其目标函数是误差的平方,是一个增长很快的函数,其对离群的异常值非常敏感。所以不难想到,对于\(E = \mathop \sum \nolimits f({x_i})\),我们可以取\(f(x)=|x|\)来减小函数的增长速度。
统计学家休伯将这一想法用于对单个未知量\(\theta\)参数估计的情况,误差满足正态分布\(x_i=\theta+e_i\),就给定\(\rho\)函数:
,取定函数\(\rho\),找出使函数\(M\left( {\theta} \right) = \mathop \sum \limits_{i = 1}^m \rho({x_i} - \theta)\)达到最小的\(\hat \theta\),将其作为\(\theta\)的估计值。\(\hat \theta\)称为\(\theta\)的M估计。

M估计是一类估计,主要包括\(\rho(u)=u^2\)的最小二乘法和\(\rho(u)=|x|\)的最小一乘法。M估计也可以和最小二乘法一样,推广到多元线性回归,称为稳健回归,但是因为难于计算等局限,应用并不广泛。

Note:最小一乘法对未知参数θ的估计值\(\hat \theta =x_i的中位数\)

最小二乘法和正则化

当\({\left( {{X^T}X} \right)^{ - 1}}\)不存在,即\(X_TX\)不满秩时,\(\theta\)无唯一解。

故考虑在原先的A的最小二乘估计中加一个小扰动\(\lambda I\),使原先无法求广义逆的情况变成可以求出其广义逆,使得问题稳定并得以求解。有:
\(\hat \theta= {\left( {{X^T}X} + \lambda I \right)^{ - 1}}{X^T}Y\)

而此时对应的损失函数为
\[ J(\theta ) = \mathop \sum \limits_{i = 1}^m {({y_i} - {\theta T}{x_i})2} + \lambda || \theta || _2^2 \]
上式称为岭回归(ridge regression),通过引入L2范数正则化。


当然也可以将L2范数替换为L1范数。对应有
\[ J(\theta ) = \mathop \sum \limits_{i = 1}^m {({y_i} - {\theta T}{x_i})2} + \lambda || \theta || _1 \]
上式称为LASSO。

对于L2范数,本质上其实是对误差的高斯先验。
而L1范数则对应于误差的Laplace先验。

最小二乘法的理论证明

拉普拉斯指出随机误差应满足正态分布,而高斯创造性地发明并使用极大似然法证明了最小二乘法。
故测量误差服从高斯分布的情况下, 最小二乘法等价于极大似然估计。

对于任何拟合方程都有:\(y = \hat y + e\)
因为\(e \sim N(0,{\sigma^2})\),故\(y \sim N(\hat y,{\sigma^2})\)

由极大似然估计,\(L(\theta ) = \mathop \prod \limits_i f({y_i})\)
\[L = \frac{1}{{{{\left( {\sqrt {2\pi } \sigma } \right)}^n}}}exp\left\{ { - \frac{1}{{2{\sigma ^2}}}\sum\limits_{i = 1}^n {{{\left( {{y_i} - \hat y} \right)}^2}} } \right\} = \frac{1}{{{{\left( {\sqrt {2\pi } \sigma } \right)}^n}}}exp{ - \frac{1}{{2{\sigma ^2}}}\sum\limits_{i = 1}^n {e_i^2} }\]

Note:数学的发展史很多时候是不符合逻辑顺序的。事实上,高斯当时是循环论证最小二乘法的,推理有缺陷。而后拉普拉斯才弥补了这一点。其中故事可以见《数理统计学简史》。

参考文献

I. 《数理统计学简史》 陈希孺著
II. 《机器学习》 周志华著
III. 正态分布的前世今生(二)
IV. 最小二乘法的本质是什么?
V. 最小二乘法小结
VI. 到底什么是最小二乘法?
VII. 最小二乘法和线性回归及很好的总结
VIII. 最小二乘法与岭回归的介绍与对比
IX. 最小二乘法
X. 最优化理论·非线性最小二乘
XI. Linear least squares, Lasso,ridge regression有何本质区别?
XII. 为什么最小二乘法对误差的估计要用平方?

半小时学习最小二乘法相关推荐

  1. “抗击”新型肺炎!阿里达摩院研发AI算法,半小时完成疑似病例基因分析

    利用技术辅助抗击疫情,阿里巴巴.百度等科技巨头各显身手. 此前,AI科技大本营采访报道了阿里达摩院<数十名工程师作战5天,阿里达摩院连夜研发智能疫情机器人>一文,后者为了解决客服人力不足的 ...

  2. smarty半小时快速上手入门教程

    本文讲述了smarty快速上手入门的方法,可以让读者在半小时内快速掌握smarty的用法.分享给大家供大家参考.具体实现方法如下: 一.smarty的程序设计部分: 在smarty的模板设计部分我简单 ...

  3. 马云缺席的一个半小时,李彦宏和马化腾都聊了什么

     马云缺席的一个半小时,李彦宏和马化腾都聊了什么 搜狐IT 文/杨舒芳 今天上午,科技圈儿的一个大party,IT领袖峰会又嗨起来了.一个传统是,BAT大佬们同台对话,但是今年马云在北京玩着,所以 ...

  4. python做excel麻烦_高效办公必备:别人通宵做的 Excel,我用Python 半小时搞定!

    原标题:高效办公必备:别人通宵做的 Excel,我用Python 半小时搞定! 最近经常听到周围的人抱怨:"工作忙,在加班--" 不知不觉,当代职场人早就被"996&qu ...

  5. 阿里达摩院又火了!引入AI确诊肺炎提速16倍,仅需半小时!网友神回复了

    针对新型冠状病毒的确诊,全国大多数医院基本都采用核酸检测.果壳网发文称:从病人样本送到实验室即刻开始测试,到出检测报告,差不多需要8个小时. 但是8个小时太长,在现在这种病毒传播速度下,让人焦急万分. ...

  6. 半个小时用计算机怎么算,CPA机考计算器操作指南,掌握这些快捷键,考试“延长”半小时!...

    原标题:CPA机考计算器操作指南,掌握这些快捷键,考试"延长"半小时! 注册会计师考试就是一场在有限的时间内得分最多的比拼游戏!不仅要求考生学习各种专业知识,同时还需要掌握一定的策 ...

  7. php正则表达式经典实例,php半小时精通正则表达式

    php半小时精通正则表达式 更新时间:2006年11月26日 00:00:00   作者: 想必很多人都对正则表达式都头疼.今天,我以我的认识,加上网上一些文章,希望用常人都可以理解的表达方式.来和大 ...

  8. 百度文库崩溃半小时:赶论文的网友也集体崩了

    疫情期间停课不停学,马上要放暑假了,期末论文还是要交的,你写完没? 昨天晚上,百度文库崩溃半小时,吓坏一众在家学习赶论文的学子:你默默在手边的时候不觉得有多重要,但是失去的瞬间却真真切切感觉到不舍(痛 ...

  9. 仅用半小时,从Python爬取到BI可视化,告诉你深圳房价有多贵

    我有个小外甥,今年准备毕业,在我的极力劝说下来到了深圳工作,那第一件事就是租房子了. 深圳的房价大家也知道,最近几年涨的厉害,3万一平都买不到什么好房子,其实看到这个情况,我着实为下一代担心,月入2W ...

最新文章

  1. 用thttpd做Web Server
  2. SQL Server 2008企业试用版到期,升级为企业版
  3. Android混淆详解
  4. imdb导mysql_keras如何导入本地下载的imdb数据集?
  5. boost::range模块uniqued相关的测试程序
  6. java处理linux中的 m_Linux下处理BOM头和^M的简单方法
  7. 打开一个页面,并监听该页面的关闭事件
  8. c语言break和return区别,C语言break,continue和return的区别
  9. 高仿微信聊天界面长按弹框样式
  10. [.NET]使用十年股价对比各种序列化技术
  11. rk3399 io工具的使用示例
  12. [转]UML建模的要点总结
  13. matlab中ones()、inf用法
  14. 国产手机均价下跌,苹果逆势增长,iPhone仍是消费者最爱
  15. 对接支付宝php版easysdk接口分享
  16. (投影:Projector)Unity Projector 投影器原理以及优化
  17. java微信支付v3系列——1.微信支付准备工作
  18. 使用poi导出excel
  19. Spark生态系统和运行架构
  20. POJO VO PO DTO 和JavaBean

热门文章

  1. RapidIO PCB布线要求
  2. 机器人工程→合适的课程←
  3. python天猫秒杀脚本_Python3.7环境下天猫秒杀程序
  4. 【超详细】matlab LMI 工具箱教程——特别是lmivar函数和lmiterm函数讲解——用于求解优化问题
  5. audio realtek 耳机没声_win7系统下realtek high definition audio声卡耳机无声怎么办
  6. 志愿填报时,“大城市211”or“小城市985”,你怎么选择?(下)
  7. 官方整顿网盘限速,网友齐刷刷@百度网盘
  8. Qt优秀开源项目之四:茶绘君
  9. ubuntu 禁用透明大页_禁用 Transparent Huge Pages (THP) 透明巨大页面
  10. 报表中如何实现中国地图钻取到各省地图?