之所以说”使用”而不是”实现”,是因为python的相关类库已经帮我们实现了具体算法,而我们只要学会使用就可以了。随着对技术的逐渐掌握及积累,当类库中的算法已经无法满足自身需求的时候,我们也可以尝试通过自己的方式实现各种算法。

言归正传,什么是”最小二乘法”呢?

定义:最小二乘法(又称最小平方法)是一种数学优化技术,它通过最小化误差的平方和寻找数据的最佳函数匹配。

作用:利用最小二乘法可以简便地求得未知的数据,并使得这些求得的数据与实际数据之间误差的平方和为最小。

原则:以”残差平方和最小”确定直线位置(在数理统计中,残差是指实际观察值与估计值之间的差)

数学公式:

基本思路:对于一元线性回归模型,假设从总体中获取了n组观察值(X1,Y1),(X2,Y2),…,(Xn,Yn),对于平面中的这n个点,可以使用无数条曲线来拟合。而线性回归就是要求样本回归函数尽可能好地拟合这组值,也就是说,这条直线应该尽可能的处于样本数据的中心位置。因此,选择最佳拟合曲线的标准可以确定为:使总的拟合误差(即总残差)达到最小。

实现代码如下,代码中已经详细的给了注释:

##最小二乘法

import numpy as np ##科学计算库

import scipy as sp ##在numpy基础上实现的部分算法库

import matplotlib.pyplot as plt ##绘图库

from scipy.optimize import leastsq ##引入最小二乘法算法

'''

设置样本数据,真实数据需要在这里处理

'''

##样本数据(Xi,Yi),需要转换成数组(列表)形式

Xi=np.array([6.19,2.51,7.29,7.01,5.7,2.66,3.98,2.5,9.1,4.2])

Yi=np.array([5.25,2.83,6.41,6.71,5.1,4.23,5.05,1.98,10.5,6.3])

'''

设定拟合函数和偏差函数

函数的形状确定过程:

1.先画样本图像

2.根据样本图像大致形状确定函数形式(直线、抛物线、正弦余弦等)

'''

##需要拟合的函数func :指定函数的形状

def func(p,x):

k,b=p

return k*x+b

##偏差函数:x,y都是列表:这里的x,y更上面的Xi,Yi中是一一对应的

def error(p,x,y):

return func(p,x)-y

'''

主要部分:附带部分说明

1.leastsq函数的返回值tuple,第一个元素是求解结果,第二个是求解的代价值(个人理解)

2.官网的原话(第二个值):Value of the cost function at the solution

3.实例:Para=>(array([ 0.61349535, 1.79409255]), 3)

4.返回值元组中第一个值的数量跟需要求解的参数的数量一致

'''

#k,b的初始值,可以任意设定,经过几次试验,发现p0的值会影响cost的值:Para[1]

p0=[1,20]

#把error函数中除了p0以外的参数打包到args中(使用要求)

Para=leastsq(error,p0,args=(Xi,Yi))

#读取结果

k,b=Para[0]

print("k=",k,"b=",b)

print("cost:"+str(Para[1]))

print("求解的拟合直线为:")

print("y="+str(round(k,2))+"x+"+str(round(b,2)))

'''

绘图,看拟合效果.

matplotlib默认不支持中文,label设置中文的话需要另行设置

如果报错,改成英文就可以

'''

#画样本点

plt.figure(figsize=(8,6)) ##指定图像比例: 8:6

plt.scatter(Xi,Yi,color="green",label="样本数据",linewidth=2)

#画拟合直线

x=np.linspace(0,12,100) ##在0-15直接画100个连续点

y=k*x+b ##函数式

plt.plot(x,y,color="red",label="拟合直线",linewidth=2)

plt.legend(loc='lower right') #绘制图例

plt.show()

结果如下所示:

输出结果:

k= 0.900458420439 b= 0.831055638877

cost:1

求解的拟合直线为:

y=0.9x+0.83

绘图结果:

补充说明:简单的列举了直线的情况,曲线的求解方式类似,但是曲线会存在过度拟合的情况,在以后的博客中会讲到。

总结

以上就是本文关于Python中实现最小二乘法思路及实现代码的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!

php最小二乘法,Python中实现最小二乘法思路及实现代码相关推荐

  1. python代码大全表解释-Python中顺序表的实现简单代码分享

    顺序表python版的实现(部分功能未实现) 结果展示: 代码示例: #!/usr/bin/env python # -*- coding:utf-8 -*- class SeqList(object ...

  2. python代码大全表解释-python中的字典用法大全的代码

    如下代码是关于python中的字典用法大全的代码. #!/usr/bin/env python # # [SNIPPET_NAME: Dictionaries 101] # [SNIPPET_CATE ...

  3. python停止线程池_详解python中Threadpool线程池任务终止示例代码

    需求 加入我们需要处理一串个位数(0~9),奇数时需要循环打印它:偶数则等待对应时长并完成所有任务:0则是错误,但不需要终止任务,可以自定义一些处理. 关键点 定义func函数处理需求 callbac ...

  4. python代码大全-python中的字典用法大全的代码

    如下代码是关于python中的字典用法大全的代码. #!/usr/bin/env python # # [SNIPPET_NAME: Dictionaries 101] # [SNIPPET_CATE ...

  5. 在python中使用最小二乘法画出拟合曲线_基于jupyter notebook的python编程-----运用最小二乘法,导入文件数据模拟一元线性回归分析...

    基于jupyter notebook的python编程-----运用最小二乘法,导入文件数据模拟一元线性回归分析 用最小二乘法模拟一元线性回去曲线的目录 一.运行jupyter notebook,搭建 ...

  6. 独家 | 快速掌握spacy在python中进行自然语言处理(附代码链接)

    作者:Paco Nathan 翻译:笪洁琼 校对:和中华 本文约6600字,建议阅读15分钟. 本文简要介绍了如何使用spaCy和Python中的相关库进行自然语言处理(有时称为"文本分析& ...

  7. 教你在Python中实现潜在语义分析(附代码)

    作者:PRATEEK JOSHI 翻译:李润嘉 校对:万文菁 本文约3400字,建议阅读15分钟. 本文将通过拆解LSA的原理及代码实例来讲解如何运用LSA进行潜在语义分析. 介绍 你有没有去过那种运 ...

  8. python中的scaler_Python preprocessing.MaxAbsScaler方法代码示例

    本文整理汇总了Python中sklearn.preprocessing.MaxAbsScaler方法的典型用法代码示例.如果您正苦于以下问题:Python preprocessing.MaxAbsSc ...

  9. 在python中要表示一个空的代码块可以使用空语句什么_Python条件判断语句if

    Apple iPhone 11 (A2223) 128GB 黑色 移动联通电信4G手机 双卡双待 4999元包邮 去购买 > 程序在一般情况下是按顺序执行的,就像流水账一样,一条一条从上往下顺序 ...

  10. python中string.digits_Python string.hexdigits方法代码示例

    本文整理汇总了Python中string.hexdigits方法的典型用法代码示例.如果您正苦于以下问题:Python string.hexdigits方法的具体用法?Python string.he ...

最新文章

  1. [Python_7] Python Socket 编程
  2. 从JavaScript数组获取随机值
  3. Hive客户端secureCRT中文显示设置
  4. 工程建筑行业SAP整体解决方案
  5. Android数据存储之SharePreference和内部存储
  6. C# 路由(Route)
  7. 看懂这5幅图,研发效能分析和改进就容易了
  8. 网络爬虫_第二章_提取_第四单元_BeautifulSoup库入门(未完待续)
  9. 统计自然语言处理基础——学习摘要(1)
  10. 基于对比学习(Contrastive Learning)的文本表示模型为什么能学到语义相似度?
  11. 学习单片机入门需要准备什么?
  12. CCF 201412-4 最优灌溉
  13. 不要在作死的边缘试探(最后那个英雄手势挺好玩儿的)
  14. C语言成绩管理分析系统
  15. 跨境电商热之下推ShopExpress,微盟靠什么出海寻新增量?
  16. ubuntu磁盘分区与挂载
  17. 【Unity】游戏音效制作工具
  18. 基于java写的雷霆战机
  19. Snipaste常用快捷键(详细总结)
  20. Vue项目实战——实现一个任务清单【基于 Vue3.x 全家桶(简易版)】

热门文章

  1. 解决win10计算机管理中没有本地用户和组
  2. 手机怎么识别图中文字?这两个方法靠谱
  3. 德州农工大学计算机专业如何,德州农工大学美国排名
  4. 变量名和变量地址之间的关系
  5. 零基础能学大数据吗 需要知道什么核心知识
  6. 如何完整删除Windows.old(详细教程)
  7. com.android.pngp.tln,杂七杂八的记录
  8. 京东朱健:聊聊京东广告系统的数据库选型
  9. 小米5.0以上设备最完美激活xposed框架的流程
  10. CSS 文字背景水印