我想找到a
系数的最小二乘解,
z = (a0 + a1*x + a2*y + a3*x**2 + a4*x**2*y + a5*x**2*y**2 + a6*y**2 +
a7*x*y**2 + a8*x*y)
给定长度为20的数组x
、y
和z
。基本上,我在寻找numpy.polyfit
的等价物,但它是一个2D多项式。
This question类似,但通过MATLAB提供解决方案。
我想找到a
系数的最小二乘解,
z = (a0 + a1*x + a2*y + a3*x**2 + a4*x**2*y + a5*x**2*y**2 + a6*y**2 +
a7*x*y**2 + a8*x*y)
给定长度为20的数组x
、y
和z
。基本上,我在寻找numpy.polyfit
的等价物,但它是一个2D多项式。
This question类似,但通过MATLAB提供解决方案。
5条答案
按热度按时间2w3rbyxf1#
下面是一个示例,展示了如何使用
numpy.linalg.lstsq
来完成此任务:调整系数
coeff
为:注意,
coeff[3]
和coeff[6]
分别对应于X**2
和Y**2
,并且它们接近于1.
,因为示例数据是用Z = X**2 + Y**2 + small_random_component
创建的。qqrboqgw2#
根据@Saullo和@弗朗西斯科的回答,我做了一个函数,我发现它很有用:
由此产生的拟合可以通过以下方式可视化:
yi0zb3m43#
Saullo Castro的精彩回答。只需添加代码,即可使用a系数的最小二乘解重构函数,
cbwuti444#
你也可以使用scikit-learn。
输出:
注意事项
在定义线性回归模型时,我使用了
fit_intercept=False
参数,因为默认情况下,多项式特征包含偏差项'1'
。或者,您可以使用然后使用具有截距系数的常规
LinearRegression
模型:42fyovps5#
请注意,如果
kx != ky
,代码将失败,因为j
和i
索引在循环中被反转。从
enumerate(np.ndindex(coeffs.shape))
得到(j,i)
,然后将coeffs
中的元素寻址为coeffs[i,j]
。由于系数矩阵的形状是由你要求使用的最大多项式阶数给出的,如果kx != ky
,矩阵将是矩形的,你将超过它的一个维度。