机器学习之最小二乘法

1.背景:

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

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

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

                                                            ----维基百科

2. 最小二乘法在机器学习中被用来

3. 高中关于最小二乘法估计

概括:

假设有若干个样本点,(x1,y1),(x2,y2),(x3,y3),(x4,y4),(x5,y5),求解直线y=kx+b,是的这些样本点到直线的距离最小.

我们高中的求解方式也是这样的:

展开为:

min_sum = [y1- (kx1+b)]^2+[y2- (kx2+b)]^2+[y3- (kx3+b)]^2+[y4- (kx4+b)]^2+[y5- (kx5+b)]^2

就是各个点到我们设定的直线的欧式距离

化简为:

     

以上就是我们高中对于最小二乘法的最初认知. 这个求解的过程,我们称之为最小二乘法,而求解的这条直线,我们称之为线性回归,线性回归用来近似的预测数据的真是情况.

举个例子:(此题来自:北师大版高中数学)

从某所高中随机抽取一些可爱的萌妹子,就比如6个女生好了,测出她们的体重和身高如下表,现在来了一个60kg的女生,求问它的身高会有多高?

女生数据
女生ID 1 2 3 4 5 6 7 8
身高 165 165 157 170 175 165 155 170
体重 48 57 50 54 64 61 43 59

      

用python画图来表示这些数据好了:

 1 # encoding: utf8
 2 import matplotlib
 3 import matplotlib.pyplot as plt
 4 from matplotlib.font_manager import FontProperties
 5 from sklearn.linear_model import LinearRegression
 6 from scipy import sparse
 7
 8 print matplotlib.matplotlib_fname()  # 将会获得matplotlib包所在文件夹
 9 font = FontProperties()
10 plt.rcParams[‘font.sans-serif‘] = [‘Droid Sans Fallback‘]  # 指定默认字体
11 plt.rcParams[‘axes.unicode_minus‘] = False  # 解决保存图像是负号‘-‘显示为方块的问题
12
13 plt.figure()
14 plt.title(u‘ 可爱女生的数据 ‘)
15 plt.xlabel(u‘x 体重‘)
16 plt.ylabel(u‘y 身高‘)
17 plt.axis([40, 80, 140, 200])
18 plt.grid(True)
19 x = [[48], [57], [50], [54], [64], [61], [43], [59]]
20 y = [[165], [165], [157], [170], [175], [165], [155], [170]]
21 plt.plot(x, y, ‘k.‘)
22 model = LinearRegression()
23 model.fit(x, y)
24 # y2 = model.predict(x)
25 # plt.plot(x, y2, ‘g-‘)
26 plt.show()

散点图:

对于这个例子,我们可以使用上面的公式,求解出回归方程,并可以得到方程拟合的该女生的身高值,但是这太麻烦了 , 毕竟高中还是太too yong too simple了~

4. 大学关于最小二乘法

基于上面的那个问题,我们大学有没有更好的一点的求解方式 ?

4.1 大学对于最小二乘法的概括:

          找到那样一条函数曲线使得观测值的残差平方之和最小.   通俗的讲:见高中部分概括

4.2 继续上面的这个问题思路:

  我们已知这些数据:

      f(x,y) = [y1- (kx1+b)]^2+[y2- (kx2+b)]^2+[y3- (kx3+b)]^2+[y4- (kx4+b)]^2+[y5- (kx5+b)]^2+[y6- (kx6+b)]^2+[y7- (kx7+b)]^2+[y7- (kx7+b)]^2

如果存在最大值,那么只需要满足f(x,y)对于x,y的一阶偏导数均为0

求解得:

k= 0.849  , b =85.172

所以预测值为:

y = 0.849x - 85.172  将y = 60kg  代入求解得:  x = 170.99175

我们再使用Python求解一次:

 1 # encoding: utf8
 2 import matplotlib
 3 import matplotlib.pyplot as plt
 4 from matplotlib.font_manager import FontProperties
 5 from scipy.optimize import leastsq
 6 from sklearn.linear_model import LinearRegression
 7 from scipy import sparse
 8 import numpy as np
 9
10 # 拟合函数
11 def func(a, x):
12     k, b = a
13     return k * x + b
14
15
16 # 残差
17 def dist(a, x, y):
18     return func(a, x) - y
19
20
21 font = FontProperties()
22 plt.rcParams[‘font.sans-serif‘] = [‘Droid Sans Fallback‘]  # 指定默认字体
23 plt.rcParams[‘axes.unicode_minus‘] = False  # 解决保存图像是负号‘-‘显示为方块的问题
24
25 plt.figure()
26 plt.title(u‘ 可爱女生的数据 ‘)
27 plt.xlabel(u‘x 体重‘)
28 plt.ylabel(u‘y 身高‘)
29 plt.axis([40, 80, 140, 200])
30 plt.grid(True)
31 x = np.array([48.0, 57.0, 50.0,54.0, 64.0, 61.0, 43.0, 59.0])
32 y = np.array([165.0, 165.0,157.0, 170.0, 175.0, 165.0, 155.0, 170.0])
33 plt.plot(x, y, ‘k.‘)
34
35 param = [0, 0]
36
37 var= leastsq(dist, param, args=(x, y))
38 k, b = var[0]
39 print k, b
40
41 plt.plot(x, k*x+b, ‘o-‘)
42
43 plt.show()

从图中,可以发现结果大致相符.

时间: 2024-11-05 01:41:13

机器学习之最小二乘法的相关文章

机器学习--线性回归 最小二乘法

机器学习第1天 欢迎转载,请标明出处(http://blog.csdn.net/tonyshengtan),尊重劳动,尊重知识,欢迎讨论. 开篇废话 话说在高中数学统计的部分就有学过最小二乘法,现在想想,当时没有严格的推倒和实用背景,单纯的给了公式然后做应用题,不过也印证了乔布斯的一句话,不管你现在在做什么,你都无法预料到这对你以后是否有影响,你只能看到过去,无法看到未来. 最小二乘法(Least squares) 为什么叫最小二乘法,首先最小明确的告诉你,俺们求出来的是全局的最值,不是极值,就

白话机器学习-最小二乘解和无偏估计

机器学习之最小二乘法解和无偏估计 更新中 ----------------------------------------------- 照例广告时间,休息一下,马上回来 炼数成金课程报名5折优惠码:C181 性价比最高VPN:http://61.164.116.28:8080/?ad_str=49261 广告结束,没偷没抢,自力更生,力求赚回学费,现在学费已经消费近4000了,但我还没有被扣学费过,至少现在是这样. ---------------------------------------

机器学习(3)之最小二乘法的概率解释

机器学习(3)之最小二乘法的概率解释 在前面梯度下降以及正规方程组求解最优解参数Θ时,为什么选择最小二乘作为计算参数的指标,使得假设预测出的值和真正y值之间面积的平方最小化? 我们提供一组假设,证明在这组假设下最小二乘是有意义的,但是这组假设不唯一,还有其他很多方法可以证明其有意义. (1)      假设1: 假设输入与输出为线性函数关系,表示为: 其中,为误差项,这个参数可以理解为对未建模效应的捕获,如果还有其他特征,这个误差项表示了一种我们没有捕获的特征,或者看成一种随机的噪声. 假设服从

机器学习-最小二乘法

最小二乘法是机器学习中的基础知识点,一致对最小二乘法的理解不够深入,今天就花点时间来深入理解和探讨一下最小二乘法 最小二乘法,又称最小平方法,基本公式通俗来讲,二者先取个差值,在来个平方,最后搞一个和号上去,这就是最小二乘问题的思想,下面介绍下 最小二乘法 我们以最简单的一元线性模型来解释最小二乘法.什么是一元线性模型呢? 监督学习中,如果预测的变量是离散的,我们称其为分类(如决策树,支持向量机等),如果预测的变量是连续的,我们称其为回归.回归分析中,如果只包括一个自变量和一个因变量,且二者的关

机器学习中简易方法----线性建模:最小二乘法

在机器学习中,学习或者推断 属性 变量与相应 响应 变量或 目标 变量之间的 函数 关系,使得对于一个给定的属性(特征)集合,可以进行相应的预测. 例如,建立一个用户对物品的喜好预测模型.已知的数据中有用户信息(年龄,性别等),物品信息(种类,颜色等) ,以及用户对物品的喜好关系(例如 A用户喜好B物品).在给定的用户和物品间(喜好关系未知),希望预测出用户对这个物品的喜好. 在此种情况下,建立一个 关于某个顾客以前买过物品的描述(属性) 和 该顾客最终是否喜好该产品(响应) 的模型.这个模型可

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

详细内容见上一篇文章:http://www.cnblogs.com/lc1217/p/6514734.html 这里只是介绍下R语言中如何使用最小二乘法解决一次函数的线性回归问题. 代码如下:(数据同上一篇博客)(是不是很简单????) > x<-c(6.19,2.51,7.29,7.01,5.7,2.66,3.98,2.5,9.1,4.2) > y<-c(5.25,2.83,6.41,6.71,5.1,4.23,5.05,1.98,10.5,6.3) > lsfit(x,y

机器学习:Python中如何使用最小二乘法

之所以说"使用"而不是"实现",是因为python的相关类库已经帮我们实现了具体算法,而我们只要学会使用就可以了.随着对技术的逐渐掌握及积累,当类库中的算法已经无法满足自身需求的时候,我们也可以尝试通过自己的方式实现各种算法. 言归正传,什么是"最小二乘法"呢? 定义:最小二乘法(又称最小平方法)是一种数学优化技术,它通过最小化误差的平方和寻找数据的最佳函数匹配. 作用:利用最小二乘法可以简便地求得未知的数据,并使得这些求得的数据与实际数据之间误

机器学习算法分类

转自@王萌,有少许修改. 机器学习起源于人工智能,可以赋予计算机以传统编程所无法实现的能力,比如飞行器的自动驾驶.人脸识别.计算机视觉和数据挖掘等. 机器学习的算法很多.很多时候困惑人们的是,很多算法是一类算法,而有些算法又是从其他算法中延伸出来的.这里,我们从两个方面来给大家介绍,第一个方面是学习的方式,第二个方面是算法的类似性. 学习方式 将算法按照学习方式分类可以让人们在建模和算法选择的时候考虑能根据输入数据来选择最合适的算法来获得最好的结果. 监督学习  在监督学习中,输入数据被称为"训

机器学习中的数学(3)-模型组合(Model Combining)之Boosting与Gradient Boosting

版权声明: 本文由LeftNotEasy发布于http://leftnoteasy.cnblogs.com, 本文可以被全部的转载或者部分使用,但请注明出处,如果有问题,请联系[email protected] 前言: 本来上一章的结尾提到,准备写写线性分类的问题,文章都已经写得差不多了,但是突然听说最近Team准备做一套分布式的分类器,可能会使用Random Forest来做,下了几篇论文看了看,简单的random forest还比较容易弄懂,复杂一点的还会与boosting等算法结合(参见i