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.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