【问题标题】:Python Polynomial Regression on 3D Data points3D 数据点上的 Python 多项式回归
【发布时间】:2021-04-06 02:55:24
【问题描述】:

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

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

不幸的是,在 python 中,我只找到了类似表面拟合的东西,你需要事先获得学位。或者类似于使用 scikit-learn 将多项式问题转换为多变量线性问题。后者对我的数据集的结果很差。

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

【问题讨论】:

  • 在尝试了更多方法后,我想我找到了最适合我的数据集的方法。通过预先手动指定多项式的次数,可以将 statsmodels-functions 用于线性回归(特别是 statsmodels.api.OLS() )并在将 X 和 Y 数据转换为线性后使用它sklearn PolynomialFeatures 的问题。至于找到最佳多项式次数,我正在按照建议使用均方根误差,尽管这还不是最佳...

标签: python pandas scikit-learn regression polynomials


【解决方案1】:

就将多项式拟合到曲面而言,我认为最好的办法是尝试不同的多项式集并根据拟合对它们进行排名,如 here 所述。

如果您愿意尝试不同的曲面拟合方法,我建议您查看what scipy has to offer, particularly in the Multivariate, unstructured data section。例如,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) 

该代码将产生以下曲面拟合:

【讨论】:

  • 非常感谢这些想法,我会试试这个并回来:)
猜你喜欢
  • 2011-04-23
  • 2018-12-19
  • 2020-01-31
  • 2022-01-03
  • 2020-01-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-07
相关资源
最近更新 更多