具有固定斜率的linalg.lstsq?

时间:2014-06-26 12:06:06

标签: python numpy least-squares

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

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

2 个答案:

答案 0 :(得分:4)

如果拟合方程为y = a*x + b,则在给定固定斜率b的情况下,您可以找到最适合您数据的截距a = A,如下所示:

b = np.mean(y - A*x)

如果你有一个固定的截距b = B,并希望找到最适合你的数据的斜率,那么数学就可以得到:

a = np.dot(X, Y-B) / np.dot(X, X)

答案 1 :(得分: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()

它与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])

改变斜率:

In [39]: s = 4

In [40]: fsolve(f, x0=1)
Out[40]: array([-3.99075568])

我们获得了新的最佳