具有固定斜率的linalg.lstsq?

gma*_*vel 4 python numpy least-squares

假设我们有两个数据数组:x = [1,2,3] y = [2,4,6]显然,线性拟合将返回2的斜率和0的截距,当然,这两个例程脾气暴躁linalg.lstsq()polyfit()并且成功。但是他们认为坡度和截距是要搜索的参数。

是否可以保持斜率固定并仅定义截距?

Jai*_*ime 5

如果拟合方程为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)


dei*_*aur 2

你可以使用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)

我们得到一个新的最优值