データセット (X,Y) -> Z があります。したがって、Python で 2D 入力と出力 Z の間のマッピングを学習したいと思います。
基になる関数が線形でないことはわかっているため、線形回帰を適用できません。入力データが 2D しかないので、 2 変量スプラインを使用したいと思います。次の例を実装しました。
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 スプライン/多項式フィッティング/非線形回帰を行う別の方法はありますか?