假设我们有两个数据数组:
x = [1,2,3]
y = [2,4,6]
显然,线性拟合将返回2的斜率和0的截距,当然,Numpy linalg.lstsq()
和polyfit()
中的两个例程都是成功的。但他们认为斜率和截距是搜索的参数。
是否可以保持斜率固定并仅定义截距?
答案 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])
我们获得了新的最佳