gma*_*vel 4 python numpy least-squares
假设我们有两个数据数组:x = [1,2,3] y = [2,4,6]显然,线性拟合将返回2的斜率和0的截距,当然,这两个例程脾气暴躁linalg.lstsq(),polyfit()并且成功。但是他们认为坡度和截距是要搜索的参数。
是否可以保持斜率固定并仅定义截距?
如果拟合方程为y = a*x + b,则在b给定固定斜率的情况下,您可以找到最适合您的数据的截距a = A,如下所示:
b = np.mean(y - A*x)
Run Code Online (Sandbox Code Playgroud)
相反,如果您有一个固定的截距b = B并想找到最适合您数据的斜率,则数学计算出:
a = np.dot(X, Y-B) / np.dot(X, X)
Run Code Online (Sandbox Code Playgroud)
你可以使用scipy.optimize.fsolve:
X = np.array([1, 2, 3])
Y = np.array([2, 4, 6])
s = 2
def f(i):
"""Fixed slope 1-deg polynomial residuals"""
return ((Y - (s*X + i))**2).sum()
Run Code Online (Sandbox Code Playgroud)
它的性能与以下内容大致相同polyfit:
In [37]: np.polyfit(X, Y, 1)
Out[37]: array([ 2.00000000e+00, 2.30755522e-15])
In [38]: fsolve(f, x0=1)
Out[38]: array([ 1.63883763e-16])
Run Code Online (Sandbox Code Playgroud)
并改变坡度:
In [39]: s = 4
In [40]: fsolve(f, x0=1)
Out[40]: array([-3.99075568])
Run Code Online (Sandbox Code Playgroud)
我们得到一个新的最优值