首页 > 其他分享 >【scipy 基础】--正交距离回归

【scipy 基础】--正交距离回归

时间:2023-11-16 09:58:07浏览次数:35  
标签:函数 -- ODR 正交 beta scipy 拟合 ax data

ScipyODR正交距离回归(ODR-Orthogonal Distance Regression)模块,适用于回归分析时,因变量和自变量之间存在非线性关系的情况。
它提高了回归分析的准确性和稳健性。对于需要解决非线性回归问题的科研人员和工程师来说,它具有非常重要的意义。

ODR正交距离回归模块的作用主要在于它将正交化方法和距离回归结合起来,解决了传统线性回归模型在处理非线性问题时的局限性。它通过将自变量进行正交化处理,使得因变量和自变量之间的非线性关系能够更好地被拟合出来。

1. 主要功能

scipy.odr模块针对的领域比较明确,所以不像之前介绍的模块有那么多函数。
此模块的主要函数包括:

函数名 说明
Data 要拟合的数据
RealData 数据的权重为实际标准差和/或协方差
Model Model 类存储有关您希望拟合的函数的信息
ODR ODR 类收集所有信息并协调主要拟合例程的运行
Output 输出类存储 ODR 运行的输出
其他函数 调整拟合和模型的一些函数

一般来说,使用前5个函数,就可以进行一些正交距离回归分析。

2. 使用示例

正交距离分析一般步骤如下:

2.1. 准备数据

数据采用以前收集的江苏省人口数据,获取地址:https://databook.top/jiangsustat/renkou

import pandas as pd

data = pd.read_csv("/path/to/人口-年末常住人口(万人).csv")
data.head(10)

image.png
一共31条数据,1990年~2020年江苏省的人口变化数据。

用散点图看看数据的变化趋势:

from matplotlib.ticker import MultipleLocator
import matplotlib.pyplot as plt

ax = plt.subplot()
ax.scatter(data["year"], data["value"], marker='*', color='r')
ax.xaxis.set_major_locator(MultipleLocator(5))
ax.set_title("江苏省人口变化")

plt.show()

image.png

2.2. 创建模型

使用scipy.odr模块中的Model函数创建一个拟合的模型。

import scipy.odr as sodr

# 模型函数
def model_func(p, x):
    k, b = p
    return k * x + b

model = sodr.Model(model_func)

2.3. 生成数据

将上面的人口数据data转换为可以用于ODR运算的数据。

# x是数据
x = range(len(data))

# 转换数据用RealData或者Data函数都可以
rdata = sodr.RealData(x, data["value"])
# rdata = sodr.Data(x, data["value"])

DataRealData函数都是用来构造数据的。
一般来说,Data函数用来构造理论数据;
RealData函数用来构造实际数据的,且RealData中还可以设置权重。

这里没有设置权重,用哪个函数都可以。

2.4. ODR运算

有了数据和模型之后,就可以进行ODR运算了。

odr = sodr.ODR(rdata, model, beta0=[0, 1])

result = odr.run()
result.pprint()
# 运行结果:
Beta: [  61.01340781 6724.77566283]
Beta Std Error: [ 1.11208495 19.3974215 ]
Beta Covariance: [[  1.51592414 -22.73886321]
 [-22.73886321 461.20026764]]
Residual Variance: 0.8158277156001223
Inverse Condition #: 0.2520617152422754
Reason(s) for Halting:
  Sum of squares convergence

其中 BetaBeta Std Error就拟合的参数值和参数的标准差。

2.5. 输出结果

根据计算结果,绘制出图形更容易理解。

# 拟合参数和参数的标准差
beta = result.beta
beta_std = result.sd_beta

# 拟合的曲线
y = beta[0] * x + beta[1]

# 拟合曲线的标准差上限
y_up = (beta[0] + beta_std[0]) * x + (beta[1]+ beta_std[1])

# 拟合曲线的标准差下限
y_down = (beta[0] - beta_std[0]) * x + (beta[1] - beta_std[1])

# 绘制拟合的曲线
ax = plt.subplot()
ax.scatter(data["year"], data["value"], marker='*', color='r')
ax.xaxis.set_major_locator(MultipleLocator(5))
ax.set_title("江苏省人口变化")

ax.plot(x, y, color="b", label="拟合曲线")
ax.plot(x, y_up, color="y", label="标准差上限")
ax.plot(x, y_down, color="g", label="标准差下限")

plt.legend()
plt.show()

image.png

这就是通过ODR模块拟合的人口变化情况。

3. 总结

ODR正交距离回归之所以作为Scipy的单独模块,是因为它是一种特殊的曲线拟合方法,
它使用正交化和距离加权的最小二乘法来处理具有非线性关系的输入变量,并旨在找到最优的模型以最小化预测误差。
这与一般的曲线拟合在方法和目标上有很大的不同。

后续介绍Scipy库中的其他模块时,还会介绍其他的曲线拟合函数,到时候可以和这里的ODR方法对照比较一下。

标签:函数,--,ODR,正交,beta,scipy,拟合,ax,data
From: https://www.cnblogs.com/wang_yb/p/17835498.html

相关文章

  • 如何撰写数据分析报告?
    前言数据分析报告是将数据收集、清洗、分析和结论得出的过程整理成书面形式的文档。一个好的数据分析报告能够使人们更好地理解数据所带来的信息和见解,为决策提供依据。在下面的部分,我将详细介绍如何撰写数据分析报告的步骤和要点。1.确定报告目的在撰写数据分析报告之前,首先......
  • 敏捷认证psm和csm的认证区别?
    ​PSM认证在国内的名气相对于CSM来说没有那么高,成员数量也没那么多,但是这个证书的含金量及认可度与CSM无异,而且考试费用低,一劳永逸,无需额外的续证费用。另外,任何人都可以在http://scrum.org官网查到证书持有者名单来验证证书有效性。目前的授权教育机构只有Scrum中文网吧。Leang......
  • 数据量很大,字段频繁变化,数据频繁刷新,架构如何设计?
    对于大数据量、字段频繁变化、数据频繁刷新的情况,需要设计一个灵活而稳定的架构来有效地管理和处理数据。以下是关于这种情况下架构设计的详细描述:大数据量、字段频繁变化、数据频繁刷新的架构设计1.数据存储层面对于大数据量的情况,传统的关系型数据库可能无法很好地应对,因此......
  • A Day with Pandas
    IwenttotheChengduPandaBaseanditwasawesome!Thisplaceiswheretheytakecareofmanypandas.Isawbigpandasandbabypandas.Theyaresocuteandfunny.Pandaseatlotsofbambooandplayalot.Watchingthemeatandplaymademesmile.Theb......
  • mysql8 更改加密方式
    先通过命令行进入mysql的root账户:更改加密方式ALTERUSER'root'@'localhost'IDENTIFIEDBY'password'PASSWORDEXPIRENEVER;更改密码ALTERUSER'root'@'localhost'IDENTIFIEDWITHmysql_native_passwordBY'password';......
  • 袋外错误率
    袋外错误率(Out-of-BagError)是在使用自助采样(BootstrapSampling)构建集成模型时的一个重要评估指标,尤其是在随机森林中常被使用。在自助采样中,由于每个模型的训练集都是通过有放回地从原始数据集中采样得到的,一部分样本可能没有被采样到,这部分未被采样到的样本称为袋外样本(Out-of-......
  • “人脸识别技术的挑战与机遇:隐私保护与性能提升“
    "人脸识别技术的挑战与机遇:隐私保护与性能提升"是一个备受关注的话题,涉及到人脸识别技术在社会、商业和政府领域的广泛应用。以下是该主题可能涉及的一些关键点:1.**性能提升与准确性:**探讨当前人脸识别技术的性能水平,以及如何通过深度学习、神经网络优化等技术提升其准确性和鲁......
  • 安装warp-transducer时cmake.. 出现 Building shared library with no GPU
    warp-transducerAfastparallelimplementationofRNNTransducer(Graves2013jointnetwork),onbothCPUandGPU.GPUimplementationisnowavailableforGraves2012addnetwork.GPUPerformanceBenchmarkedonaGeForceGTX1080TiGPU.T=150,L=40,A=2......
  • 数据分析结果如何展示?如何实现利用可视化助力业务发展?
    数据分析结果的展示和利用可视化是数据驱动业务发展的重要环节。通过合理的可视化手段,可以使数据更易于理解和传达,为业务决策提供有力支持。以下是关于数据分析结果展示和利用可视化助力业务发展的详细描述:1.数据分析结果展示1.1图表和统计指标在数据分析结果的展示中,图表是......
  • 卸载奇安信天擎,删掉密码保护
    修改EntBase.dat文件1右键软件打开文件位置或者自己去盘里手动查找 360Safe\EntClient\conf\EntBase.dat。例如:ProgramFiles(x86)\QAX\360safe\EntClient\conf2使用编辑器或者直接txt打开 [base]persistent_connetion=closeshow_tip=1net_env=4communication_int......