【Python】一元线性回归的分析
在科学实验中,人们研究各物理量之间的关系,通常是通过实验测得一批实验数据,然后求得自变量 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】一元线性回归的分析相关推荐
- python一元线性回归的优点_Python数据分析之一元线性回归
问题 制作一元材积表,不懂林学的可能不知道,如图,也就是构造材积和胸径间的关系,这里采用了python的一元线性回归方法(本人用spss做了幂函数非线性回归,效果最好). Python方差分析导入库和 ...
- python一元线性回归_Python实现——一元线性回归(梯度下降法)
2019/3/25 一元线性回归--梯度下降/最小二乘法又名:一两位小数点的悲剧 感觉这个才是真正的重头戏,毕竟前两者都是更倾向于直接使用公式,而不是让计算机一步步去接近真相,而这个梯度下降就不一样了 ...
- python一元线性回归绘制_简单一元线性回归实现python
简单一元线性回归实现python 简单一元线性回归实现python 简单一元线性回归实现python #线性回归梯度下降 import numpy as np import pandas as pd ...
- python 进行一元线性回归并输出相关结果,Python 一元线性回归 - 树懒学堂
一.一元线性回归 一元线性回归是回归分析中最简单的一种形式,主要考察单独1个自变量对因变量的影响.其模型形如: y=a+ βx+ε 一元线性回归分析的基本步骤如下: 依据变量之间的关系,判断其是否是线 ...
- python一元线性回归算法_6一元线性回归_清华编程高手尹成带你基于算法实践python量化交易_其他视频-51CTO学院...
清华编程高手尹成带你基于算法实践python量化交易 量化交易是指以先进的数学模型替代人为的主观判断,利用计算机技术从庞大的历史数据中海选能带来超额收益的多种"大概率"事件以制定策 ...
- python一元线性回归
import statsmodels.api as smx1 = sm.add_constant(tmp_data['smooth_h2']) # 线性回归增加常数项 y=kx+by1 = tmp_d ...
- python一元线性回归的优点_Python实现机器学习一(实现一元线性回归)
回归是统计学中最有力的工具之一.机器学习监督学习算法分为分类算法和回归算法两种,其实就是根据类别标签分布类型为离散型.连续性而定义的.顾名思义,分类算法用于离散型分布预测,如前面讲过的KNN.决策树. ...
- 机器学习(一):Python一元线性回归模型
模型原理: 使用单一特征来预测响应值 这是一种基于自变量值(X)来预测因变量(Y)的方法. 假设这两个变量是线性相关的,因此我们尝试寻找一种根据特征或自变量(x)的线性函数来准确预测响应值(y) 找到 ...
- 机器学习(3) 一元线性回归(最小二乘法实现)
一元线性回归是分析只有一个自变量x 和 因变量y 线性相关关系的方法.一个经济指标的数值往往受许多因素影响,若其中只有一个因素是主要的,起决定性作用,则可用一元线性回归进行预测分析. 一元线性回归分析 ...
- CPDA案例:基于EXCEL的一元线性回归案例《广告与销量》
基于EXCEL的一元线性回归案例:广告与销量 CPDA案例:基于EXCEL的一元线性回归案例<广告与销量> 业务分析 一元线性回归步骤 业务解读 CPDA案例:基于EXCEL的一元线性回归 ...
最新文章
- 如何提升网站的信任度,助力网站获取高排名?
- HandlerSocket client for java——hs4j正式发布0.1版本
- [C#][Newtonsoft.Json] Newtonsoft.Json 序列化时的一些其它用法
- mfc程序转化为qt_智慧虎超:小程序如何为珠宝行业助力?低频商品的高频转化你懂吗...
- 关于mysql中Join语句的几个问题
- 找不到java虚拟机_javabridge.jutil.JVMNotFoundError:找不到Java虚拟机
- Atitit java支持php运行环境 Quercus jar 1.1. Quercus	1 1.2. Web.xml 增加php servlet拦截	1 1.3. Phpinfo。php测试	1
- SPSS操作(五):主成分分析
- wps下一步快捷键_WPS快捷键大全(最常用138个办公快捷键)
- 思维导图一定要用计算机来完成吗,程序猿不仅可以用电脑敲代码,还可以用来制作思维导图...
- 如何在IDEA中创建Web项目
- Android SDK的下载安装
- 国内优秀的多用户商城系统盘点(2022年整理)
- TP-link WR841N无线路由器设置无线桥接(WDS功能)图文教程
- 初识V4l2(二)-------浅析video_register_device
- IP报文发送过程和原理
- GAN网络概述及LOSS函数详解
- elasticsearch + geo地理位置附近的站点查询
- MySQL到底大小写敏感还是不敏感?
- 怎么在电脑桌面上创建一个便签把东西记在上面