SciPy 教程

original icon
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.knowledgedict.com/tutorial/scipy-odr.html

Scipy ODR


ODR 代表正交距离回归,用于回归研究。基本线性回归通常用于通过在图上绘制最佳拟合线来估计两个变量yx之间的关系。

用于此的数学方法称为最小平方,旨在最小化每个点的平方误差总和。这里的关键问题是如何计算每个点的误差(也称为残差)?

在一个标准的线性回归中,目的是从X值预测Y值 - 因此明智的做法是计算Y值的误差(如下图所示的灰线所示)。但是,有时考虑XY的误差(如下图中的红色虚线所示)更为明智。

例如 - 当知道对X的测量是不确定的,或者当不想关注一个变量相对于另一个变量的错误时。

正交距离回归(ODR)是一种可以做到这一点的方法(正交在这里表示为垂直 - 所以它计算垂直于线的误差,而不仅仅是’垂直’)。

单变量回归的 scipy.odr 实现

以下示例演示单变量回归的scipy.odr实现。

import numpy as np
import matplotlib.pyplot as plt
from scipy.odr import *
import random

# Initiate some data, giving some randomness using random.random().
x = np.array([0, 1, 2, 3, 4, 5])
y = np.array([i**2 + random.random() for i in x])

# Define a function (quadratic in our case) to fit the data with.
def linear_func(p, x):
   m, c = p
   return m*x + c

# Create a model for fitting.
linear_model = Model(linear_func)

# Create a RealData object using our initiated data from above.
data = RealData(x, y)

# Set up ODR with the model and data.
odr = ODR(data, linear_model, beta0=[0., 1.])

# Run the regression.
out = odr.run()

# Use the in-built pprint method to give us results.
out.pprint()

上述程序将生成以下输出 -

Beta: [ 5.50355382 -3.88825011]
Beta Std Error: [ 0.77904626  2.33231797]
Beta Covariance: [[  1.92223609  -4.80559051]
 [ -4.80559051  17.22882877]]
Residual Variance: 0.31573284521355344
Inverse Condition #: 0.1465848083469268
Reason(s) for Halting:
  Sum of squares convergence

SciPy,发音为Sigh Pi,是一个科学的 python 开源代码,在 BSD 许可下分发的库,用于执行数学,科学和工程计算。 ...
SciPy 是一个开放源码的 BSD 许可的数学,科学和工程库。SciPy 库依赖于 NumPy,它提供了便捷且快速的N维数组操作。构建 S ...
scipy.spatial包可以通过利用 Qhull 库来计算一组点的三角剖分,Voronoi 图和凸壳。此外,它包含用于最近邻点查询的 K ...
SciPy 的ndimage子模块专用于图像处理。这里,ndimage表示一个n维图像。 ...
对时域信号计算傅里叶变换以检查其在频域中的行为。傅里叶变换可用于信号和噪声处理,图像处理,音频信号处理等领域。SciPy 提供fftpack ...