【发布时间】:2014-06-26 12:06:05
【问题描述】:
假设我们有两个数据数组:
x = [1,2,3]
y = [2,4,6]
显然,线性拟合将返回 2 的斜率和 0 的截距,当然,Numpy linalg.lstsq() 和 polyfit() 中的两个例程都是成功的。但他们认为斜率和截距是搜索的参数。
是否可以保持斜率固定并只定义截距?
【问题讨论】:
标签: python numpy least-squares
假设我们有两个数据数组:
x = [1,2,3]
y = [2,4,6]
显然,线性拟合将返回 2 的斜率和 0 的截距,当然,Numpy linalg.lstsq() 和 polyfit() 中的两个例程都是成功的。但他们认为斜率和截距是搜索的参数。
是否可以保持斜率固定并只定义截距?
【问题讨论】:
标签: python numpy least-squares
如果拟合方程为y = a*x + b,则在给定固定斜率a = A 的情况下,您可以找到最适合您数据的截距b,如下所示:
b = np.mean(y - A*x)
如果您有一个固定的截距 b = B 并希望找到最适合您的数据的斜率,则数学运算结果为:
a = np.dot(X, Y-B) / np.dot(X, X)
【讨论】:
你可以使用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])
我们得到一个新的最优值
【讨论】: