机器学习-最小二乘法

输过败过不曾怕过 输过败过不曾怕过     2022-09-03     256

关键词:

一、引言

这段时间学习《机器学习》,学到第5章的“Logistic回归”,感觉相当吃力。追本溯源,从“Logistic回归”到“线性回归”,再到“最小二乘法”。最终定格到了《高等数学》(第六版·下册)第九章第10节“最小二乘法”,这才了解到最小二乘法背后的数学原理出自哪里。

“最小二乘法”是最优化问题中建立经验公式的一种实现方法。了解它的原理,对于了解“Logistic回归”和“支持向量机的学习”都很有裨益。

二、背景知识

“最小二乘法”出现的历史背景是很有意思的。(以下文字摘录维基百科)

1801年,意大利天文学家朱赛普·皮亚齐发现了第一颗小行星谷神星。经过40天的跟踪观测后,由于谷神星运行至太阳背后,使得皮亚齐失去了谷神星的位置。随后全世界的科学家利用皮亚齐的观测数据开始寻找谷神星,但是根据大多数人计算的结果来寻找谷神星都没有结果。时年24岁的高斯也计算了谷神星的轨道。奥地利天文学家海因里希·奥尔伯斯根据高斯计算出来的轨道重新发现了谷神星。

高斯使用的最小二乘法的方法发表于1809年他的著作《天体运动论》中,而法国科学家勒让德于1806年独立发现“最小二乘法”,但因不为时人所知而默默无闻。两人曾为谁最早创立最小二乘法原理发生争执。

1829年,高斯提供了最小二乘法的优化效果强于其他方法的证明,见高斯-马尔可夫定理。

三、知识运用

“最小二乘法”的核心就是保证所有数据偏差的平方和最小。(“平方”的在古时侯的称谓为“二乘”)

假设我们收集到一些战舰的长度与宽度数据

 

1

2

3

4

5

6

7

8

9

10

长度(m)

208

152

113

227

137

238

178

104

191

130

宽度(m)

21.6

15.5

10.4

31.0

13.0

32.4

19.0

10.4

19.0

11.8

根据这些数据我们用python画出散点图:

技术分享

画散点图的代码如下:

 

# -*- coding: utf-8 -*
import numpy as np
import os
import matplotlib.pyplot as plt
def drawScatterDiagram(fileName):
    #改变工作路径到数据文件存放的地方
    os.chdir("d:/workspace_ml")
    xcord=[];ycord=[]
    fr=open(fileName)
    for line in fr.readlines():
        lineArr=line.strip().split()
        xcord.append(float(lineArr[1]));ycord.append(float(lineArr[2]))
    plt.scatter(xcord,ycord,s=30,c=‘red‘,marker=‘s‘)
    plt.show()

 

假如我们取前两个点(238,32.4)(152, 15.5)就可以得到两个方程

152*a+b=15.5

328*a+b=32.4

解这两个方程得a=0.197,b=-14.48

那样的话,我们可以得到这样的拟合图:

技术分享

好了,新的问题来了,这样的a,b是不是最优解呢?用专业的说法就是:a,b是不是模型的最优化参数?在回答这个问题之前,我们先解决另外一个问题:a,b满足什么条件才是最好的?答案是:保证所有数据偏差的平方和最小。至于原理,我们会在后面讲,先来看看怎么利用这个工具来计算最好的a和b。

假设所有数据的平方和为M,则技术分享

我们现在要做的就是求使得M最小的a和b。请注意这个方程中,我们已知yi和xi

那其实这个方程就是一个以(a,b)为自变量,M为因变量的二元函数。

回想一下高数中怎么对一元函数就极值。我们用的是导数这个工具。那么在二元函数中,

我们依然用导数。只不过这里的导数有了新的名字“偏导数”。偏导数就是把两个变量中的一个视为常数来求导。

通过对M来求偏导数,我们得到一个方程组

技术分享=0

技术分享=0

这两个方程中xi和yi都是知道的。

很容易就求得a和b了。由于采用的是维基百科的数据,我这里就直接用答案来画出拟合图像:

技术分享

 

# -*- coding: utf-8 -*
import numpy as np
import os
import matplotlib.pyplot as plt
def drawScatterDiagram(fileName):
    #改变工作路径到数据文件存放的地方
    os.chdir("d:/workspace_ml")
    xcord=[];ycord=[]
    fr=open(fileName)
    for line in fr.readlines():
        lineArr=line.strip().split()
        xcord.append(float(lineArr[1]));ycord.append(float(lineArr[2]))
    plt.scatter(xcord,ycord,s=30,c=‘red‘,marker=‘s‘)
    #a=0.1965;b=-14.486
    a=0.1612;b=-8.6394
    x=np.arange(90.0,250.0,0.1)
    y=a*x+b
    plt.plot(x,y)
    plt.show()

 

 

四、原理探究

数据拟合中,为什么要让模型的预测数据与实际数据之差的平方而不是绝对值和最小来优化模型参数?

这个问题已经有人回答了,见链接(http://blog.sciencenet.cn/blog-430956-621997.html

个人感觉这个解释是非常有意思的。特别是里面的假设:所有偏离f(x)的点都是有噪音的。

一个点偏离越远说明噪音越大,这个点出现的概率也越小。那么偏离程度x与出现概率f(x)满足什么关系呢?——正态分布。

技术分享

已知N个点(用D来表示),求直线(用h来表示)出现的概率就可以表示为:P(h|D)

根据贝叶斯定理:P(h|D)=P(D|h)*P(h)/P(D)即P(h|D)∝P(D|h)*P(h) (∝表示“正比于”)

这就是一个生成模型了——由直线h生成点集D。

我们再作一个假设:h生成D中的每一个点都是独立的(如果了解贝叶斯文本分类的话,这里就很好理解了),那么P(D|h)=p(d1|h)*p(d2|h)…

结合前面正态分布,我们可以写出这样的式子:p(di|h)∝ exp(-(ΔYi)^2)

那么P(D|h)∝EXP[-(ΔY1)^2]* EXP[-(ΔY2)^2] * EXP[-(ΔY3)^2] * ..

又因为:ea*eb*ec=ea+b+c

所以p(D|h)∝ EXP{-[(ΔY1)^2 +(ΔY2)^2 + (ΔY3)^2 + ..]}

我们知道f(x)=ex的分布图像为:

技术分享

因为e的指数永远小于0,所以,想要p(D|h)最大,就必须使[(ΔY1)^2 + (ΔY2)^2 + (ΔY3)^2 + ..]无限接近于0,即:最大化p(D|h)就是要最小化[(ΔY1)^2 + (ΔY2)^2 + (ΔY3)^2 + ..]

到此,最小二乘法的原理得到了诠释。

 

 

 

四、最小二乘法与梯度下降法

 

   最小二乘法跟梯度下降法都是通过求导来求损失函数的最小值,那它们有什么区别呢。

 

   相同
  1.本质相同:两种方法都是在给定已知数据(independent & dependent variables)的前提下对dependent variables算出出一个一般性的估值函数。然后对给定新数据的dependent variables进行估算。
  2.目标相同:都是在已知数据的框架内,使得估算值与实际值的总平方差尽量更小(事实上未必一定要使用平方),估算值与实际值的总平方差的公式为:

 

                             技术分享

 

   其中技术分享为第i组数据的independent variable,技术分享为第i组数据的dependent variable,技术分享为系数向量。
   不同
  1.实现方法和结果不同:最小二乘法是直接对技术分享求导找出全局最小,是非迭代法。而梯度下降法是一种迭代法,先给定一个技术分享,然后向技术分享下降最快的方向调整技术分享,在若干次迭代之后找到局部最小。梯度下降法的缺点是到最小点的时候收敛速度变慢,并且对初始点的选择极为敏感,其改进大多是在这两方面下功夫。

五、拓展延伸

上面讲的都是二维的情况,也就是只有一个自变量。但现实世界中影响最后结果的都是多种因素的叠加,即自变量会有多个的情况。

对于一般N元线性函数,用《线性代数》中的逆矩阵来求解就OK了;由于暂时没有找到合适的例子,就作为一个引子,留在这里了。

当然自然界更多的是多项式拟合,而非简单的线性,那就是更高级的内容了。

 

 





机器学习白板,最小二乘法,线性回归,矩阵表达

机器学习-白板推导系列(三)-线性回归(LinearRegression)_哔哩哔哩_bilibili目录最小二乘法,线性回归 几何意义讲解 查看详情

机器学习线性回归——最小二乘法的几何意义

查看详情

机器学习线性回归——最小二乘法(理论+图解+公式推导)

查看详情

梦开始的地方,从最小二乘法开始学机器学习(代码片段)

梦开始的地方,从最小二乘法开始学机器学习从这篇博客开始,我们将逐步实现不同的机器学习代码,以此来深入学习了解不同的机器学习背后的原理~文章目录梦开始的地方,从最小二乘法开始学机器学习00.参考... 查看详情

梦开始的地方,从最小二乘法开始学机器学习(代码片段)

梦开始的地方,从最小二乘法开始学机器学习从这篇博客开始,我们将逐步实现不同的机器学习代码,以此来深入学习了解不同的机器学习背后的原理~文章目录梦开始的地方,从最小二乘法开始学机器学习00.参考... 查看详情

机器学习之用python实现最小二乘法预测房价,进行额度预测

使用最小二乘法进行房价预测:给定训练样本集合如下:求解:当房屋面积为55平方时,租赁价格是多少?给出代码与运行结果图。首先明白什么是最小二乘法,利用最小二乘法公式p=(X^TX)^-1X^TYimportnumpyasnpfromnumpyimportmatimportmatplot... 查看详情

《机器学习——数学公式推导合集》1.最小二乘法(leastsquaremethod)求解线性模型

1.1什么是最小二乘法(leastsquaremethod)最小二乘法:基于均方误差最小化来进行模型求解的方法称为“最小二乘法(leastsquaremethod)”。1.2线性模型(linearmodel)基本形式线性模型(linearmodel)试... 查看详情

《机器学习——数学公式推导合集》1.最小二乘法(leastsquaremethod)求解线性模型

1.1什么是最小二乘法(leastsquaremethod)最小二乘法:基于均方误差最小化来进行模型求解的方法称为“最小二乘法(leastsquaremethod)”。1.2线性模型(linearmodel)基本形式线性模型(linearmodel)试... 查看详情

机器学习理论基础学习2——线性回归

1.最小二乘法解的的推导,几何意义解释最小二乘法   2.从概率的角度解释最小二乘法结论:最小二乘法等价于最大似然估计(条件是噪音需要满足高斯分布) 3.L2正则化--- 岭回归   4.从概率的角度看正... 查看详情

机器学习:r语言中如何使用最小二乘法

    详细内容见上一篇文章:http://www.cnblogs.com/lc1217/p/6514734.html    这里只是介绍下R语言中如何使用最小二乘法解决一次函数的线性回归问题。    代码如下:(数据同上一篇博客)(是不是... 查看详情

关于机器学习中的最小二乘法相关推导

650)this.width=650;"src="https://s3.51cto.com/wyfs02/M02/07/D4/wKiom1nRoBLjofwDAADP_oNshh4151.png"style="float:none;"title="1.png"alt="wKiom1nRoBLjofwDAADP_oNshh4151.png"/>650)this.width=650;"src="htt 查看详情

机器学习模型和算法(代码片段)

文章目录python简介python基本语法监督学习--回归模型线性回归模型一元线性回归线性回归最小二乘代码实现多元线性回归梯度下降法和最小二乘法相比线性回归梯度下降代码实现非线性回归python简介略python基本语法文件开头加上#... 查看详情

spark机器学习(10):als交替最小二乘算法

...rnatingLeastSquareALS(AlternatingLeastSquare),交替最小二乘法。在机器学习中,特指使用最小二乘法的一种协同推荐算法。如下图所示,u表示用户,v表示商品,用户给商品打分,但是并不是每一个用户都会给每一种商品打分。比如用户u... 查看详情

梦开始的地方,从最小二乘法开始学机器学习(代码片段)

梦开始的地方,从最小二乘法开始学机器学习从这篇博客开始,我们将逐步实现不同的机器学习代码,以此来深入学习了解不同的机器学习背后的原理~文章目录梦开始的地方,从最小二乘法开始学机器学习00.参考... 查看详情

最小二乘法小结

...最小二乘法是用来做函数拟合或者求函数极值的方法。在机器学习,尤其是回归模型中,经常可以看到最小二乘法的身影,这里就对我对最小二乘法的认知做一个小结。1.最小二乘法的原理与要解决的问题     最小二乘法... 查看详情

最小二乘法小结

...最小二乘法是用来做函数拟合或者求函数极值的方法。在机器学习,尤其是回归模型中,经常可以看到最小二乘法的身影,这里就对我对最小二乘法的认知做一个小结。  1.最小二乘法的原理与要解决的问题     最小二... 查看详情

最小二乘法小结

...最小二乘法是用来做函数拟合或者求函数极值的方法。在机器学习,尤其是回归模型中,经常可以看到最小二乘法的身影,这里就对我对最小二乘法的认知做一个小结。1.最小二乘法的原理与要解决的问题     最小二乘法... 查看详情

机器学习基础---线性回归(linearregression)

内容简介符号说明一、线性回归(最小二乘法及其几何意义)1、矩阵表达下的最小二乘法2、最小二乘法的几何意义二、线性回归(最小二乘法-概率视角-高斯噪声-MLE)三、线性回归(正则化-岭回归)四、线性... 查看详情