在科学实验中,人们研究各物理量之间的关系,通常是通过实验测得一批实验数据,然后求得自变量 x 与因变量y之间的近似函数关系 y=f(x) , 这就是按给定的 n 个点的数据拟合的问题。

线性回归(最小二乘方法)

1、今有实验数据:(共有N= 6组数据 )
| 序号 | 0 |1 | 2 |3 |4 |5|
|Xi |1 |2 |3 4 5 6
Yi 2.5 3.51 4.45 5.52 6.47 7.51

序号 0 1 2 3 4 5
Xi 1 2 3 4 5 6
Yi 2.5 3.51 4.45 5.52 6.47 7.51

假设 y = ax + b, 求 a, b=?


统计学上,为了评估实验数据x与y的线性相关性,定义相关系数:

当 r=0时,x与y完全线性无关,当 r=1时,x与y完全线性相关。

Python实现

import math
#线性拟合
#入口:
#    x = 实验数据的x向量
#    y = 实验数据的y向量
#返回:
#   a,b,r        a=斜率 b=截距 r=相关系数
#模型 y=ax + b
def linefit( x,y):N = len(x)sx,sy,sxx,syy,sxy=0,0,0,0,0for i in range(0,N):sx  += x[i]sy  += y[i]sxx += x[i]*x[i]syy += y[i]*y[i]sxy += x[i]*y[i]a = (sy*sx/N -sxy)/( sx*sx/N -sxx)b = (sy - a*sx)/Nr = abs(sy*sx/N-sxy)/math.sqrt( (sxx-sx*sx/N)*(syy-sy*sy/N))return a,b,r
X=[ 1    ,2    ,3  ,4  ,5  ,6]
Y=[ 2.5    ,3.51   ,4.45   ,5.52   ,6.47   ,7.51]
a,b,r=linefit(X,Y)
print("实验数据:")
print("X=",X)
print("Y=",Y)
print("拟合结果: y= %10.5f x + %10.5f , r=%10.5f" % (a,b,r) )


2、实验测得某段铜导线在不同温度下的电阻数据如下:
温度 T(℃) = 19.1 ,25.0 ,30.1 ,36.0,40.0 ,45.1 ,50.0
电阻 R(Ω) = 76.30,77.80 ,79.25 ,80.80 ,82.35 ,83.90 ,85.10
试按 R = a * T + b 拟合出该关系中的a,b。

#温度 T(℃) = 19.1 ,25.0 ,30.1 ,36.0,40.0 ,45.1 ,50.0
#电阻 R(Ω) = 76.30,77.80 ,79.25 ,80.80 ,82.35 ,83.90 ,85.10
import math
#线性拟合
#入口:
#    x = 实验数据的x向量
#    y = 实验数据的y向量
#返回:
#   a,b,r
#   a=斜率 b=截距 r=相关系数
#模型 y=ax + b
def linefit( x,y):N = len(x)sx,sy,sxx,syy,sxy=0,0,0,0,0for i in range(0,N):sx  += x[i]sy  += y[i]sxx += x[i]*x[i]syy += y[i]*y[i]sxy += x[i]*y[i]a = (sy*sx/N -sxy)/( sx*sx/N -sxx)b = (sy - a*sx)/Nr = abs(sy*sx/N-sxy)/math.sqrt( (sxx-sx*sx/N)*(syy-sy*sy/N))return a,b,r
T=[19.1 ,25.0 ,30.1 ,36.0,40.0 ,45.1 ,50.0 ]
R=[76.30,77.80 ,79.25 ,80.80 ,82.35 ,83.90 ,85.10]
a,b,r=linefit(T,R)
print("实验数据:")
print("T=",T)
print("R=",R)
print("拟合结果: R= %10.5f T = %10.5f , r=%10.5f" % (a,b,r) )

曲线拟合

(以前的数据)

1).可以转化为线性回归的曲线拟合方法
二十世纪六十年代,世界人口情况如下:
年份: 1960,1961,1962,1963,1964,1965,1966,1967,1968
人口(亿): 29.72,30.61,31.51,32.13,32.34,32.85,33.56,34.20,34.83
马尔萨斯人口模型:

(上式中,S代表人口, t代表年份。)
试根据上面的数据,求出 α、β的值,并推测2020年的世界人口的数量。
两边同时取自然对数,变换为线性模型:

令 a=β , b=lnα , y=lnS , 则转化为 y= a * t + b的线性形式。

#二十世纪六十年代,世界人口情况如下:
#年份:    1960,1961,1962,1963,1964,1965,1966,1967,1968
#人口(亿):   29.72,30.61,31.51,32.13,32.34,32.85,33.56,34.20,34.83
#马尔萨斯人口模型: S = αexp(βt)import math
#线性拟合
#入口:
#    x = 实验数据的x向量
#    y = 实验数据的y向量
#返回:
#   a,b,r
#   a=斜率 b=截距 r=相关系数
#模型 y=ax + b
def linefit( x,y):N = len(x)sx,sy,sxx,syy,sxy=0,0,0,0,0for i in range(0,N):sx  += x[i]sy  += y[i]sxx += x[i]*x[i]syy += y[i]*y[i]sxy += x[i]*y[i]a = (sy*sx/N -sxy)/( sx*sx/N -sxx)b = (sy - a*sx)/Nr = abs(sy*sx/N-sxy)/math.sqrt( (sxx-sx*sx/N)*(syy-sy*sy/N))return a,b,r
T = [1960,1961,1962,1963,1964,1965,1966,1967,1968]
S = [29.72,30.61,31.51,32.13,32.34,32.85,33.56,34.20,34.83]
Y = [ math.log(S[i]) for i in range(0,len(S))]
a,b,r=linefit(T,Y)    #注:此处的 a 是模型中的β, b是 模型中的lnα
print("实验数据:")
print("T=",T)
print("S=",S)
print("Y=",Y)
print("拟合结果: lnS= %10.5f T + %10.5f , r=%10.5f" % (a,b,r) )
y2020 = a*2020+b
s2020 = math.exp(y2020)
print("推测2020年世界人口= %10.2f 亿" % s2020 )


本题 n=9 , n-2=7, 查相关系数检验表,rr=0.66 , r = 0.9912>0.660,即

显著相关,说明马氏模型

显著成立。
说明:马氏公式仅适用于较短的时间段(如1 00年内),如用此式计算3000年的人口,将是7509206502.52亿,显然这是不可能的。如果使用2961~2968的世界人口,得出的公式,推测3000年的人口,应该比较准确。

【Python】一元线性回归的分析相关推荐

  1. python一元线性回归的优点_Python数据分析之一元线性回归

    问题 制作一元材积表,不懂林学的可能不知道,如图,也就是构造材积和胸径间的关系,这里采用了python的一元线性回归方法(本人用spss做了幂函数非线性回归,效果最好). Python方差分析导入库和 ...

  2. python一元线性回归_Python实现——一元线性回归(梯度下降法)

    2019/3/25 一元线性回归--梯度下降/最小二乘法又名:一两位小数点的悲剧 感觉这个才是真正的重头戏,毕竟前两者都是更倾向于直接使用公式,而不是让计算机一步步去接近真相,而这个梯度下降就不一样了 ...

  3. python一元线性回归绘制_简单一元线性回归实现python

    简单一元线性回归实现python 简单一元线性回归实现python 简单一元线性回归实现python #线性回归梯度下降 import numpy as np import pandas as pd ...

  4. python 进行一元线性回归并输出相关结果,Python 一元线性回归 - 树懒学堂

    一.一元线性回归 一元线性回归是回归分析中最简单的一种形式,主要考察单独1个自变量对因变量的影响.其模型形如: y=a+ βx+ε 一元线性回归分析的基本步骤如下: 依据变量之间的关系,判断其是否是线 ...

  5. python一元线性回归算法_6一元线性回归_清华编程高手尹成带你基于算法实践python量化交易_其他视频-51CTO学院...

    清华编程高手尹成带你基于算法实践python量化交易 量化交易是指以先进的数学模型替代人为的主观判断,利用计算机技术从庞大的历史数据中海选能带来超额收益的多种"大概率"事件以制定策 ...

  6. python一元线性回归

    import statsmodels.api as smx1 = sm.add_constant(tmp_data['smooth_h2']) # 线性回归增加常数项 y=kx+by1 = tmp_d ...

  7. python一元线性回归的优点_Python实现机器学习一(实现一元线性回归)

    回归是统计学中最有力的工具之一.机器学习监督学习算法分为分类算法和回归算法两种,其实就是根据类别标签分布类型为离散型.连续性而定义的.顾名思义,分类算法用于离散型分布预测,如前面讲过的KNN.决策树. ...

  8. 机器学习(一):Python一元线性回归模型

    模型原理: 使用单一特征来预测响应值 这是一种基于自变量值(X)来预测因变量(Y)的方法. 假设这两个变量是线性相关的,因此我们尝试寻找一种根据特征或自变量(x)的线性函数来准确预测响应值(y) 找到 ...

  9. 机器学习(3) 一元线性回归(最小二乘法实现)

    一元线性回归是分析只有一个自变量x 和 因变量y 线性相关关系的方法.一个经济指标的数值往往受许多因素影响,若其中只有一个因素是主要的,起决定性作用,则可用一元线性回归进行预测分析. 一元线性回归分析 ...

  10. CPDA案例:基于EXCEL的一元线性回归案例《广告与销量》

    基于EXCEL的一元线性回归案例:广告与销量 CPDA案例:基于EXCEL的一元线性回归案例<广告与销量> 业务分析 一元线性回归步骤 业务解读 CPDA案例:基于EXCEL的一元线性回归 ...

最新文章

  1. 如何提升网站的信任度,助力网站获取高排名?
  2. HandlerSocket client for java——hs4j正式发布0.1版本
  3. [C#][Newtonsoft.Json] Newtonsoft.Json 序列化时的一些其它用法
  4. mfc程序转化为qt_智慧虎超:小程序如何为珠宝行业助力?低频商品的高频转化你懂吗...
  5. 关于mysql中Join语句的几个问题
  6. 找不到java虚拟机_javabridge.jutil.JVMNotFoundError:找不到Java虚拟机
  7. Atitit java支持php运行环境 Quercus jar 1.1. Quercus 1 1.2. Web.xml 增加php servlet拦截 1 1.3. Phpinfo。php测试 1
  8. SPSS操作(五):主成分分析
  9. wps下一步快捷键_WPS快捷键大全(最常用138个办公快捷键)
  10. 思维导图一定要用计算机来完成吗,程序猿不仅可以用电脑敲代码,还可以用来制作思维导图...
  11. 如何在IDEA中创建Web项目
  12. Android SDK的下载安装
  13. 国内优秀的多用户商城系统盘点(2022年整理)
  14. TP-link WR841N无线路由器设置无线桥接(WDS功能)图文教程
  15. 初识V4l2(二)-------浅析video_register_device
  16. IP报文发送过程和原理
  17. GAN网络概述及LOSS函数详解
  18. elasticsearch + geo地理位置附近的站点查询
  19. MySQL到底大小写敏感还是不敏感?
  20. 怎么在电脑桌面上创建一个便签把东西记在上面

热门文章

  1. 无器械健身锻炼全身肌肉的方法
  2. 凸优化基础知识—对偶(Duality)
  3. 产品读书《失控:全人类的最终命运和结局》KK
  4. 网络爬虫中Json数据的解析[以时光网为例]
  5. PyTorch中的torch.max()和torch.maximum()的用法详解
  6. flyaway mysql_mysql 常用命令
  7. pcsx2解决竖线问题:
  8. 天梯赛java题解 L1-087 机工士姆斯塔迪奥分数 20
  9. 心有猛虎,细嗅蔷薇。—第二十六天
  10. WallPaperAbyss爬虫