【发布时间】:2020-10-03 16:21:45
【问题描述】:
我正在尝试进行加权最小二乘拟合,并遇到了numpy.linalg.lstsq。我需要拟合加权最小二乘。因此,以下工作:
# Generate some synthetic data from the model.
N = 50
x = np.sort(10 * np.random.rand(N))
yerr = 0.1 + 0.5 * np.random.rand(N)
y = 10.0 * x + 15
y += yerr * np.random.randn(N)
#do the fitting
err = 1/yerr**2
W = np.sqrt(np.diag(err))
x = x.flatten()
y = y.flatten()
A = np.vstack([x, np.ones(len(x))]).T
xw = np.dot(W,A)
yw = np.dot(W,y)
m, b = np.linalg.lstsq(xw, yw)[0]
这给了我最合适的斜率和截距。现在,假设我有两个具有相同斜率但截距不同的数据集?我将如何进行联合拟合以获得最佳拟合斜率加上两个截距。我仍然需要加权最小二乘版本。对于未加权的情况,我发现以下工作:
(m,b1,b2),_,_,_ = np.linalg.lstsq(np.stack([np.concatenate((x1,x2)),
np.concatenate([np.ones(len(x1)),np.zeros(len(x2))]),
np.concatenate([np.zeros(len(x1)),np.ones(len(x2))])]).T,
np.concatenate((y1,y2)))
【问题讨论】:
标签: python numpy curve-fitting least-squares data-fitting