原文作者:马同学

原文地址:最小二乘法的本质是什么?

最小平方法是十九世纪统计学的主题曲。从许多方面来看,它之于统计学就相当于十八世纪的微积分之于数学。

---史蒂芬-史蒂格勒《The History of Statics》

目录

一、日用而不知

二、最小二乘法

三、推广

四、最小二乘法与正太分布

五、skleran的LR模型使用


一、日用而不知

来看一个生活中的例子,比如有5把尺子,如下图所示:

用他们分别测量一线段的长度,得到的数值分别为(颜色指不同的尺子):

  长度
10.2
10.3
9.8
9.9
绿 9.8

之所以出现的不同的值,可能因为:

  • 不同厂家生产的尺子,精度不同
  • 材质不同,热胀冷缩不一样
  • 测量的时候心情起伏不定
  • 。。。。

总之就是有误差,这种情况下,一般取平均值来作为线段的长度:

日常中就是这么使用的,可是作为很事er的数学爱好者,自然要想下:

  • 这样做有道理么?
  • 用调和平均数行不行?
  • 用中位数行不行?
  • 用几何平均数行不行?

二、最小二乘法

换一种思路来思考刚才的问题,首先把测试得到的值画在笛卡尔坐标系中,分别记做yi:

首先,要把猜测的线段长度的真实值用平行于横轴的直线来表示,因为是猜测的,所以用虚线画,记做y:

每个点都向y做垂线,垂线的长度就是|y-yi|,也可以理解为测量值和真实值之间的误差:

因为误差是长度还要取绝对值,计算起来麻烦,就干脆用平方来代表误差:

误差的平方和就是:

因为y是猜测的,可以不断变化:

自然误差的平方和是不断变化的,

法国数学家,阿德里安-马里·勒让德提出让总的误差的平方最小的y值就是真值,这是基于,如果误差是随机的,应该围绕真值上下波动,(关于这点可以看下如何理解无偏估计)。勒让德的想法变成代数式就是:

这个猜想也蛮符合直觉的,来算一下。这是一个二次函数,对其求导,导数为0的时候取得最小值:

正好是算数平均数。原来算数平均数可以让误差最小啊,这样看来选用它显得讲道理了。以下这种方法就是最小二乘法,所谓二乘就是平方的意思,台湾直接翻译为最小平方法

三、推广

算数平均数只是最小二乘法的特例,适用范围比较狭窄,而最小二乘法用途就比较广泛。比如温度与冰淇淋的销量:

看上去像某种线性关系:

可以假设这种线性关系为:

通过最小二乘法的思想:

上图的i、y、x分别为:

总的误差平方为:

不同的a、b会导致不同的误差平方,根据多元微积分的知识,当:

这个时候误差平方取最小值。对于a、b而言,上述方程组为线性方程组,用之前的数据解出来,

也就是这跟直线:

其实还可以假设:

在这个假设下,可以根据最小二乘法,算出a、b、c,得到下面这个红色的曲线:

同一组数据,选择不同的f(x),通过最小二乘法可以得到不一样的拟合曲线:

不同的数据,更可以选择不同的f(x),通过最小二乘法可以得到不一样的拟合曲线:

f(x)也不能选择任意的函数,还是有一些讲究的,这里就不介绍了。

四、最小二乘法与正太分布

我们对勒让德的猜测,即最小二乘法,仍然抱有怀疑,万一这个猜测是错误的怎么办?

数学王子高斯也想我们一样持有怀疑,高斯换了一个思考框架,通过统计论那一套来思考

五、skleran的LR模型使用

LinearRegression 拟合一个带有系数  的线性模型,使得数据集实际观测数据和预测数据(估计值)之间的误差平方和最小。其数学表达式为:

LinearRegression 会调用 fit 方法来拟合数组(x,y),并且将线性模型的系数  存储在其成员变量 coef_ 中:

>>> from sklearn import linear_model
>>> reg = linear_model.LinearRegression()
>>> reg.fit ([[0, 0], [1, 1], [2, 2]], [0, 1, 2])
LinearRegression(copy_X=True, fit_intercept=True, n_jobs=1, normalize=False)
>>> reg.coef_
array([ 0.5,  0.5])

然而,对于最小二乘的系数估计问题,其依赖于模型各项的相互独立性。当各项是相关的,且设计矩阵  的各列近似线性相关,那么,设计矩阵会趋向于奇异矩阵,这会导致最小二乘估计对于随机误差非常敏感,产生很大的方差。例如,在没有实验设计的情况下收集到的数据,这种多重共线性(multicollinearity)的情况可能真的会出现。

监督学习—最小二乘法相关推荐

  1. 最小二乘法MSE 梯度下降法

    为什么要比较这两种方法呢?很多人可能不知道,我先简单的介绍一下 机器学习有两种,一种是监督学习,另一种是非监督学习.监督学习就是我告诉计算机你把班上同学分个类,分类标准是按照性别,男生和女生:非监督分 ...

  2. 干货丨从线性回归到无监督学习,数据科学家需要掌握的十大统计技术

    不管你对数据科学持什么态度,都不可能忽略分析.组织和梳理数据的重要性.Glassdoor 网站根据大量雇主和员工的反馈数据制作了「美国最好的 25 个职位」榜单,其中第一名就是数据科学家.尽管排名已经 ...

  3. 监督学习应用与梯度下降

     监督学习应用与梯度下降 (2013-12-01 21:37:37) 转载▼ 标签: 梯度下降算法 回归 机器学习 分类: 机器学习与数据挖掘 (斯坦福大学公开课--监督学习应用与梯度下降笔记) ...

  4. 机器学习知识点(四)最小二乘法Java实现

    最小二乘法(又称最小平方法)是一种数学优化技术.它通过最小化误差的平方和寻找数据的最佳函数匹配.利用最小二乘法可以简便地求得未知的数据,并使得这些求得的数据与实际数据之间误差的平方和为最小.最小二乘法 ...

  5. 机器学习中有监督学习——回归

    机器学习中有监督学习--回归 一.引言 本材料参考Andrew Ng大神的机器学习课程 http://cs229.stanford.edu,以及斯坦福无监督学习UFLDL tutorial http: ...

  6. 机器学习:线性回归I 最小二乘法

    原文在此 线性回归是最基础和常见的算法,属于监督学习的一种,是讲述算法开始的地方.我们在中学.大学学过很多次,虽然我已完全不记得.线性回归作为基础,虽然simple但不意味着easy,对其掌握很重要的 ...

  7. 有监督学习和无监督学习举例_监督学习入门学习笔记

    以下内容引用:An Introduction to Machine Learning with Python by Andreas C. Müller and Sarah Guido (O'Reill ...

  8. 如何学习 azure_Azure的监督学习

    如何学习 azure Machine learning sounds cool, doesn't it? I'm a biology student who didn't have any idea ...

  9. 小白学数据:教你用Python实现简单监督学习算法

    转载自 小白学数据:教你用Python实现简单监督学习算法 今天,文摘菌想谈谈监督学习. 监督学习作为运用最广泛的机器学习方法,一直以来都是从数据挖掘信息的重要手段.即便是在无监督学习兴起的近日,监督 ...

最新文章

  1. 查找一段文字中最长的重复字串 – 编程珠玑(排过序的后缀数组的应用)
  2. VTK:Utilities之PiecewiseFunction
  3. 基于遗传算法实现自动组卷
  4. go get github.com/astaxie/beego 没有反应
  5. 计算机组成原理tec9,(15-16-2)实验1-寄存器-TEC9.docx
  6. Java集合和泛型练习及面试题——博客园:师妹开讲啦
  7. python中import os_Python常用模块os--与操作系统交互
  8. C语言求x和y的乘积,计算方程式,求x,C语言中怎么计算x,y的值?
  9. “CSDN开发助手”:【必备插件 · 安装与使用教程】
  10. sas一元回归分析_商业分析的应用
  11. Computer Browser服务自动停止
  12. 《Android开发艺术探索》— Android 书籍
  13. main函数执行前后发生了什么
  14. CentOS-7 安装mosquitto(MQTT的开源消息代理)
  15. IDM下载浮动条使用详解
  16. Element select表单必填验证
  17. matplotlib cmap取值
  18. 我爱我家 - 抗争你们这些黑中介滴致命武器之-要你命1000
  19. sql查询查询半小时内数据的方法
  20. Java--JAVA_HOME环境变量的配置

热门文章

  1. jquery ajax异步调用
  2. 新开activity并且新旧窗口之间传值
  3. mmsPlayer 2.0 将开源java部分
  4. android webview 加载进度和自定义404错误页面
  5. hdu 6386 Age of Moyu (重边判断)
  6. win10 uwp 使用 Matrix3DProjection 进行 3d 投影
  7. BZOJ3123: [Sdoi2013]森林
  8. C# does not contain a constructor that takes no parameter
  9. PyQt4 开发入门
  10. 在子线程中创建新的窗体,遇到的问题。