如何应用最小二乘法拟合参数多项式三次曲线



给定参数平面曲线r(u)=(x(u), y(u)),其中x=f(u), y=g(u),进行曲线拟合,用参数多项式三次曲线求r(u)的近似值。将需要应用最小二乘估计来解决问题。

我想问的澄清:

  1. 我是否对x=f(u)和y=f(u)分别进行曲线拟合,然后将产生的多项式曲线的估计x和y值结合起来,以绘制r(u)的估计?

  2. 我是否对r(u)进行曲线拟合并找到相应的多项式参数三次曲线?

  3. 我应该采用线性最小二乘方法还是非线性最小二乘方法?我认为它是非线性的,因为目的是产生一个参数多项式三次曲线。

  4. 在scipy中应用最小二乘函数,特别是高斯-牛顿方法是否有可能解决这个问题?

希望我能得到一些帮助,用Python编写上面的代码。

非常感谢。

尝试在python中使用leastrongquarss,但是没有效果。

期待一个方法论的方法来解决这个问题

尝试多项式特征曲线拟合库

poly_features = PolynomialFeatures(degree=2, include_bias=False)
X_poly_2 = poly_features.fit_transform(X)

我刚刚遇到了一个类似的问题,希望这个答案仍然有用。

方法1 -单独回归x和y -似乎工作得很好。下面是使用scipy leastrongquares的Python实现。

from scipy.optimize import least_squares
def polynome(x, coefs):
x_powers = np.stack([x**i for i in range(coefs.shape[-1])], axis=1)
y = np.sum(coefs*x_powers, axis=1)
return y
def fit_parametric_poly(Y,u,degrees=[3,3], inputs_size=1000):
"""
Y array of shape [n_samples,n_dims]
u the parametric values in range [0,1]
degrees the degrees of each polynomial as a list
inputs_size the number of samples for interpolation
"""
coefs_list = []
for i in range(Y.shape[1]):
y = np.ravel(Y[:,i])
coefs = np.ones(degrees[i]+1)
#function to regress on parametric values u
def loss_func(coefs):
return y - polynome(u, coefs)
res = least_squares(loss_func,coefs)
coefs_list.append(res.x)
inputs = np.linspace(0, 1,inputs_size)
preds = np.stack([polynome(inputs,coefs) for coefs in coefs_list], axis=1)
return inputs, preds, coefs_list

如果您有异常值,您可以将损失更改为huber或soft_l1,以获得更健壮的曲线。

相关内容

  • 没有找到相关文章

最新更新