三维数据点的Python多项式回归

三维数据点的Python多项式回归,python,pandas,scikit-learn,regression,polynomials,Python,Pandas,Scikit Learn,Regression,Polynomials,我的问题是,我有大约50000个非线性数据点(x,y,z),z取决于自变量x和y。从一个侧面来看,从二维的角度来看,数据点看起来像一个7次多项式。不幸的是,我无法显示这些数据 我的目标是在不事先知道多项式的阶数的情况下,在3D中找到一个可以拟合这些数据的多项式。所以我想要一个函数,比如f(x,y)=ax^3+bx^2+cx^2y+dy^3+ 不幸的是,在python中,我只找到了类似于曲面拟合的东西,在这里您需要预先获得度。或者类似于用scikit learn将多项式问题转化为可变线性问题。后者

我的问题是,我有大约50000个非线性数据点(x,y,z),z取决于自变量x和y。从一个侧面来看,从二维的角度来看,数据点看起来像一个7次多项式。不幸的是,我无法显示这些数据

我的目标是在不事先知道多项式的阶数的情况下,在3D中找到一个可以拟合这些数据的多项式。所以我想要一个函数,比如f(x,y)=ax^3+bx^2+cx^2y+dy^3+

不幸的是,在python中,我只找到了类似于曲面拟合的东西,在这里您需要预先获得度。或者类似于用scikit learn将多项式问题转化为可变线性问题。后者对我的数据集的结果很差


有人知道解决这个问题的更好方法吗?非常感谢。

至于将多项式拟合到曲面,我认为您最好尝试不同的多项式集,并根据拟合程度对它们进行排序,如前所述

如果您愿意尝试不同的曲面拟合方法,我建议您研究<例如,code>scipy.interpolate.griddata,使用三次样条曲线在数据点之间进行插值。有关演示,请参见下面的代码: 将numpy作为np导入 从scipy.interpolate导入网格数据

# X and Y features are a 2D numpy array
xy = np.random.randn(20,2) 
# z is nonlinear function of x and y
z = xy[:,0] + xy[:,1]**2 
# make grid of x and y points to interpolate
xsurf = np.arange(-3,3,0.1) 
ysurf = xsurf
xsurf, ysurf = np.meshgrid(xsurf,ysurf)
surfPts = griddata(xy,z, np.vstack((xsurf.flatten(),ysurf.flatten())).T) 
该代码将产生以下表面配合:

非常感谢大家的这些想法,我会尝试一下,然后回来:)在尝试了其他几种方法之后,我想我找到了最适合我的数据集的方法。通过事先手动指定多项式的阶数,可以组合用于线性回归的statsmodels函数(特别是statsmodels.api.OLS()),并在将X和Y数据转换为具有sklearn多项式特征的线性问题后使用它。至于寻找最佳多项式次数,我正在使用建议的均方根误差,尽管这还不是最佳的。。。