- SciPy 教程
- SciPy - 主页
- SciPy - 简介
- SciPy - 环境设置
- SciPy - 基本功能
- SciPy - 集群
- SciPy - 常量
- SciPy - FFTpack
- SciPy - 集成
- SciPy - 插值
- SciPy - 输入和输出
- SciPy - 线性代数
- SciPy - Ndimage
- SciPy - 优化
- SciPy - 统计
- SciPy - CSGraph
- SciPy - 空间
- SciPy - ODR
- SciPy - 特殊包
- SciPy 有用资源
- SciPy - 参考
- SciPy - 快速指南
- SciPy - 有用资源
- SciPy - 讨论
SciPy - ODR
ODR 表示正交距离回归,应用于回归研究。基本线性回归通常用于估计变量y和x之间的关系,方法是在图表上绘制最佳拟合线。
为此使用的数学方法称为最小二乘法,目的是最小化每个点的平方误差之和。这里的主要问题是,你如何计算每个点的误差(也称为残差)?
在标准线性回归中,目的是根据 X 值预测 Y 值,因此明智的做法是计算 Y 值中的误差(如下图中以灰色线显示)。然而,有时更加明智的做法是考虑 X 和 Y 的误差(如下图标注的红点所示)。
例如,当你了解 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.51846098 -4.25744878] Beta Std Error: [ 0.7786442 2.33126407] Beta Covariance: [ [ 1.93150969 -4.82877433] [ -4.82877433 17.31417201 ]] Residual Variance: 0.313892697582 Inverse Condition #: 0.146618499389 Reason(s) for Halting: Sum of squares convergence
广告