2019/3/25 真的,当那个图像出现的时候,我真的感觉太美了。 或许是一路上以来自我的摸索加深的我对于这个模型的感受吧。 二次函数拟合——最小二乘法公式法 与线性回归相似,对二次函数进行拟合某种意义上也只是加了一个函数,虽然求解的方程变得更加繁琐,需要准备的变量也增加到了七个。 思路有借鉴于:最小二乘法拟合二次曲线 C语言 为了更好的理解回归问题中最小二乘法的求偏导过程,这次我选择自己手打公式。 大概流程如下

但是到此处之后便被这三个繁琐的方程给难倒了,虽然肯定可以说是能强解,但是感觉就是不断地消元,还是在大量系数的情况下,于是我查找了资料,自然万能的python库是无所不能的,解三元一次方程这种小事当然轻松——sympy库 这个库简直是神器,我主要运用了一下几个功能

声明变量

b0=sp.Symbol('b0')

b1=sp.Symbol('b1')

b2=sp.Symbol('b2')

毕竟出现在方程中的未知数是未定义的,一般情况下是不能允许定义前的运算,可以说这是解方程的基础。

解方程

f1=((s1-b1*s2-b2*s3)/100)-b0

f2=((s4-b0*s2-b2*s5)/s3)-b1

f3=((s6-b0*s3-b1*s5)/s7)-b2

result=sp.solve([f1,f2,f3],[b0,b1,b2])

或 sp.solve([((s1-b1*s2-b2*s3)/100)-b0,((s4-b0*s2-b2*s5)/s3)-b1,((s6-b0*s3-b1*s5)/s7)-b2],[b0,b1,b2])

然而此处出现了一个巨大的坑,那就是,最终如果这样输出 print(sp.solve([f1,f2,f3],[b0,b1,b2])) 结果便是 {b0: 5.54334244651814, b1: 0.458746450400443, b2: 0.960930395945233} 一开始我没有意识到,直到运行时满屏幕红字报错,其中最主要的一句话 TypeError: can't convert expression to float 我当时就纳了闷了,print结果好好的,都是float,怎么还不行? 后来不断查阅网上相关博客,直到 使用python的sympy解符号方程组后,如何将结果带入之后的符号表达式 真的是,一语点醒梦中人。 solve得出的解并不是完好的存在了之前“声明”的变量中,严格意义上来讲,是存储在了一个词典中。他的索引是那个变量名。也就是说,我们把变量名当成了字符形式,真正意义上只是个摆设,表示未知量却不存储最终结果,看到这里真是又兴奋有懊悔,或许是我对python的特殊数据类型不熟悉吧。也因此最终用了以下函数解决

a=result[b0]

b=result[b1]

c=result[b2]

plt.plot()函数也遇到了这个问题,不过也解决了。 至此呈上结果图

或许这就是完成一个小工程的喜悦吧。

完整代码如下(留有过去删改及笔记):

import xlrd

import xlwt

import sympy as sp

import matplotlib.pyplot as plt

import numpy as np

workbook=xlrd.open_workbook(r'6.xls')

sheet=workbook.sheet_by_index(0)

cols1=sheet.col_values(0) #获取第一列

cols2=sheet.col_values(1) #获取第二列

n=100

s1=0

s2=0

s3=0

s4=0

s5=0

s6=0

s7=0

for i in range(n):

s1=s1+cols2[i]

s2=s2+cols1[i]

s3=s3+cols1[i]*cols1[i]

s4=s4+cols1[i]*cols2[i]

s5=s5+cols1[i]*cols1[i]*cols1[i]

s6=s6+cols1[i]*cols1[i]*cols2[i]

s7=s7+cols1[i]*cols1[i]*cols1[i]*cols1[i]

b0=sp.Symbol('b0')

b1=sp.Symbol('b1')

b2=sp.Symbol('b2')

f1=((s1-b1*s2-b2*s3)/100)-b0

f2=((s4-b0*s2-b2*s5)/s3)-b1

f3=((s6-b0*s3-b1*s5)/s7)-b2

result=sp.solve([f1,f2,f3],[b0,b1,b2])

#{b0: 5.54334244651814, b1: 0.458746450400443, b2: 0.960930395945233}

#b0=sp.Symbol('b0')

#b1=sp.Symbol('b1')

#b2=sp.Symbol('b2')

#sp.solve([((s1-b1*s2-b2*s3)/100)-b0,((s4-b0*s2-b2*s5)/s3)-b1,((s6-b0*s3-b1*s5)/s7)-b2],[b0,b1,b2])

a=result[b0]

b=result[b1]

c=result[b2]

plt.scatter(cols1,cols2,color = 'blue')

x=np.linspace(0,15,100)

y=a+b*x+c*x*x

plt.plot(x,y,color="red")

plt.show()

python二次函数拟合_Python实现——二次多项式回归(最小二乘法)相关推荐

  1. ML之LiR2PolyR4PolyR:使用线性回归LiR、二次多项式回归2PolyR、四次多项式回归4PolyR模型在披萨数据集上拟合(train)、价格回归预测(test)

    ML之LiR&2PolyR&4PolyR:使用线性回归LiR.二次多项式回归2PolyR.四次多项式回归4PolyR模型在披萨数据集上拟合(train).价格回归预测(test) 目录 ...

  2. ML之LiR2PolyR:使用线性回归LiR、二次多项式回归2PolyR模型在披萨数据集上拟合(train)、价格回归预测(test)

    ML之LiR&2PolyR:使用线性回归LiR.二次多项式回归2PolyR模型在披萨数据集上拟合(train).价格回归预测(test) 目录 输出结果 设计思路 核心代码 输出结果 设计思路 ...

  3. python多项式拟合_Python 普通最小二乘法(OLS)进行多项式拟合,最小二乘法拟合二次多项式,多元函数拟合。如 电...

    Python 普通最小二乘法(OLS)进行多项式拟合,最小二乘法拟合二次多项式,多元函数拟合.如 电 多元函数拟合.如 电视机和收音机价格多销售额的影响,此时自变量有两个. python 解法:imp ...

  4. python爬虫影评_Python爬虫(二十)_动态爬取影评信息

    本案例介绍从JavaScript中采集加载的数据.更多内容请参考:Python学习指南 #-*- coding:utf-8 -*- import requests import re import t ...

  5. python 直线拟合_python matplotlib拟合直线的实现

    这篇文章主要介绍了python matplotlib拟合直线的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 代码如下 import numpy ...

  6. python多变量拟合_python多元拟合问题

    貌似关于多元拟合的使用没有太多文章进行讲解. 首先给出数据集:数据集 目标函数: 在python中,我们使用scipy.optimize库中的curve_fit,首先给出其官方文档中一些比较重要的参数 ...

  7. python 重启内核_Python从零开始的内核回归

    python 重启内核 Every beginner in Machine Learning starts by studying what regression means and how the ...

  8. python dict遍历_Python 容器(二):字典(Dict)

    Python 容器(二):字典(Dict) 一.字典 1.定义:Python的字典数据类型是基于hash散列算法实现的,采用键值对(key:value)的形式,根据key的值计算value的地址,具有 ...

  9. python实验题_python实验二

    安徽工程大学 Python 程序设计 实验报告 班级 物流191 姓名 王凡 学号 3190505102 成绩____________ 日期20200322 指导教师 修宇 [实验名称] 实验二 顺序 ...

  10. python创建矩阵_Python创建二维数组的正确姿势

    List (列表)是 Python 中最基本的数据结构.在用法上,它有点类似数组,因为每个列表都有一个下标,下标从 0 开始.因此,我们可以使用 list[1] 来获取下标对应的值.如果我们深入下列表 ...

最新文章

  1. python程序员最害怕的东西,面试!恭喜你收到了offer,来看下吧
  2. JAVA(利用jsp+javabean+servlet)实现简易计算器
  3. bootstrap 列表--水平定义列表
  4. 编辑神器Vi介绍及常用命令
  5. Android之WebView学习
  6. 手术后多久可以做胆摘除_近视手术后多久可以化眼妆?
  7. 演练 构造函数的显示调用与隐式调用 c# 1613715344
  8. 利用Gitee搭建个人图床(下)
  9. 目标检测用在《人脸识别》
  10. android java代码重启,如何在Android中重启服务?
  11. python123第七周小测验_python+request+untitest的接口自动化测试
  12. 奇特的Local System权限(转载)
  13. 放出几个E-book,经典啊,Ruby的
  14. Hierarchical Features Driven Residual Learning for Depth Map Super-Resolution 2019TIP 论文阅读
  15. 小程序JSAPI预下单与回调
  16. python单向认证_使用Python进行单向方差分析的四种方法
  17. win10内存占用率过高怎么办_win10系统终极优化
  18. violate关键字的用法
  19. vant-ui area.js文件
  20. java常见的5个异常_java常见的5种异常举例

热门文章

  1. 软考——计算机基础知识总结
  2. 文献 | 一眨眼就错过了的心理机制
  3. 零零后Java架构师斗胆挑战下一个传智播客,你怎么看?
  4. 七年之后再次地说:大家好。。。
  5. python编程考试_Python编程练习(一)
  6. 从菜鸟到架构师(三)
  7. excel不同文件表格批量加表头vba_多个excel表格自动汇总|如何把两个文件表格用VBA从另一个EXCEL表格导入数据到这个表格中?...
  8. 柴油车污染治理4G远程排放管理车载终端H6 (远程OBD)GB-17691
  9. ubuntu16.04安装Preempt RT实时内核
  10. uni-app nvue/vue 引入第三方字体教程,在线ttf转base64和在线识别字体网站分享