我有一个数据集 (X,Y) -> Z。因此,我想在 Python 中学习 2D 输入和输出 Z 之间的映射。
我知道底层函数不是线性的,因此我不能应用线性回归。由于输入数据只有二维,我想使用二元样条。我实现了以下示例:
import numpy
from scipy import interpolate
X = [1,2,1,2]
Y = [1,2,2,1]
Z = [1,2,1,2]
Y = numpy.array(Y)
X = numpy.array(X)
Z = numpy.array(Z)
tck = interpolate.bisplrep(X,Y,Z)#,kx=5,ky=2)
print interpolate.bisplev(1.5,1.5,tck)
但是,上面的代码会引发以下错误:
File "/usr/lib/python2.7/dist-packages/scipy/interpolate/fitpack.py", line 850, in bisplrep
TypeError: m >= (kx+1)(ky+1) must hold
问题是二元样条的实现需要scipy
网格 数据作为输入,而不是输入序列的正常数组,例如 X = [x1, x2,...] 和 Y = [y1,y2,...]。由于我可用的数据类型,我无法构建网格,因为输入数据没有定期分发。
如何使用不是网格的输入数据进行二元样条曲线?
如果不可能,是否有另一种方法可以在 Python 中进行 2D 样条/多项式拟合/非线性回归?