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 importmatplotlib3 importmatplotlib.pyplot as plt4 from matplotlib.font_manager importFontProperties5 from sklearn.linear_model importLinearRegression6 from scipy importsparse7

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 importmatplotlib3 importmatplotlib.pyplot as plt4 from matplotlib.font_manager importFontProperties5 from scipy.optimize importleastsq6 from sklearn.linear_model importLinearRegression7 from scipy importsparse8 importnumpy as np9

10 #拟合函数

11 deffunc(a, x):12 k, b =a13 return k * x +b14

15

16 #残差

17 defdist(a, x, y):18 return func(a, x) -y19

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 printk, b40

41 plt.plot(x, k*x+b, 'o-')42

43 plt.show()

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

关于leastsq备注:

scipy库中的函数,它可以省去中间那些具体的求解步骤,只需要输入一系列样本点,给出待求函数的基本形状(如一元一次函数,或者二元二次函数就是一种形状——f(x,y)=w0x^2+w1y^2+w2xy+w3x+w4y+w5,在形状给定后,我们只需要求解相应的系数w0~w6),即可得到相应的参数。至于中间到底是怎么求的,这一部分内容就像一个黑箱一样。

python sklearn 线性回归 报错_(转)Python- sklearn之最小二乘法相关推荐

  1. python下载库报错_下载python中Crypto库报错:ModuleNotFoundError: No module named ‘Crypto’的解决...

    下载python中Crypto库报错:ModuleNotFoundError: No module named 'Crypto'的解决 前言 最近在网上找了很多下载Crypto的方法,感觉作用都不算很 ...

  2. python 函数嵌套 报错_《Python》 函数嵌套、闭包和迭代器

    一.函数的嵌套: 1.函数的嵌套调用 defmax2(x,y): m= x if x>y elseyreturnmdefmax4(a,b,c,d): res1=max2(a,b) res2=ma ...

  3. python import random 报错_导致python中import错误的原因是什么

    Python程序可以调用一组基本的函数(即内建函数),比如print().input()和len()等函数.Python本身也内置一组模块(即标准库).每个模块都是一个Python程序,且包含了一组相 ...

  4. python安装pylad报错_用python画出某“毒王”的动态路线图

    河南前几天出现1例输入性新冠肺炎确诊病例 ,打破了连续十几天"0"增加的记录,也把河南人民重新带入疫情的黑暗恐怖之中 .为了让大家的清晰地掌握该"毒王"的行程, ...

  5. 安装fitz报错_解决python 虚拟环境删除包无法加载的问题

    项目开发一直在docker的虚拟环境上,遇到了一个问题,就是把虚拟环境的包删掉(rm -rf xxx)之后,再重新拷贝一个(跟原来包一模一样的文件夹)进去发现pycharm再也找不到这个包了,后来在同 ...

  6. python response.json()报错_解决Django响应JsonResponse返回json格式数据报错问题

    解决Django响应JsonResponse返回json格式数据报错问题,给大家,报错,代码,图书,希望能 解决Django响应JsonResponse返回json格式数据报错问题 易采站长站,站长之 ...

  7. python 第一行 报错_初学Python-只需4步,爬取网站图片

    很多人学习Python很重要的一个原因是,可以很简单的把一个网站的数据爬下来. 尤其是做我们这一行,产品经理,电商行业. 领导:弄一个买卖游戏周边商品的交易APP出来.我:行,那我们卖什么呀?领导:看 ...

  8. python 相对路径报错_小白学 Python(18):基础文件操作

    人生苦短,我选Python 前文传送门 小白学 Python(1):开篇 小白学 Python(2):基础数据类型(上) 小白学 Python(3):基础数据类型(下) 小白学 Python(4):变 ...

  9. python安装selenium报错_新手用Python运行selenium的常见问题

    1.更换Python版本 打开pycharm,点击 file--setting--project项目名--project Interpreter,点击右侧的设置,如下图 选择新Python版本的安装路 ...

最新文章

  1. gulp复制整个文件夹或文件到指定目录(包括拷贝单个文件)
  2. 让数据库支持SQL 2005 CLR 的必要条件
  3. 对scala函数总结
  4. Selenium-IDE脚本录制,selenium-side-runner自动化测试教程
  5. Linux命令 ls -l s输出内容含义详解
  6. h5自我介绍作品_自我介绍h5模板
  7. 如何下载电驴网站Verycd上的资源
  8. .net 对网络文件下载
  9. 我就知道肯定有人想要这个
  10. Linux Huge page
  11. 在JSP打开EXCEL文件
  12. 在线硬盘存储计算机,存储换算器 - 文件大小转换 - 电脑容量换算
  13. 超过70%的5G应用将发生于室内!共建共享室分助力5G高质量加速发展
  14. 燕山大学机器学习期末复习知识点罗列
  15. Kibana可视化界面操作
  16. C语言实现求n的阶乘(n!),阶乘的和。
  17. 计算机视觉——期末复习(简答题)
  18. matlab大地主题正算代码,大地主题解算正算
  19. 河工大大一c语言题库,河工大二级C语言题库.doc
  20. 抖音历史题材类短视频发展如何?创作灵感怎么找?新手上手难吗?

热门文章

  1. 明明是焦虑,为什么要吃抗抑郁药?焦虑症多久能治愈?
  2. # 关于解决路由器ADSL虚拟拨号与路由器动态IP(光纤)上网的问题
  3. 对main函数的理解c语言,C语言编程漫谈——main函数
  4. 仙魔契约显示当前服务器爆满,《仙魔契约》帮会系统
  5. 可以升级鸿蒙性价比高的华为手机,华为开启鸿蒙系统推送,15款华为手机可率先升级,看看有你的吗?...
  6. 荣耀9青春版鸿蒙,荣耀9青春版吃鸡怎么样?荣耀9青春版游戏体验:流畅吃鸡没问题...
  7. GGH非对称密码体制破解方法
  8. 【CSS】1104- 惊!妙用CSS变量和calc()实现放大镜效果
  9. 上海PHP学校排名,上海十大国际贵族学校排行榜
  10. 叮咚音响登录显示未连接服务器,联网问题 - 叮咚智能音箱联网教程_叮咚智能音箱联不上网解决办法...