SciPy ODR
ODR是 Orthogonal Distance Regression 的缩写,它用于回归研究。基本的线性回归经常被用来估计两个变量 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