投稿する前に私は多くの検索を行い、正確に私の問題かもしれないthis questionを見つけました。しかし、私は答えで提案されたものを試しましたが、残念ながらこれは修正されませんでした。私はここで新しいメンバーであるため、さらなる説明を求めるコメントを追加できませんでした。2D入力、1D出力の回帰に対してscikit-learnのGaussian Processを正しく使うにはどうすればいいですか?
とにかく、(scikit-learnのドキュメントで提供されている例を使用して)始めるにはシンプルで実際のケースで、Pythonのscikit-learnでGaussian Processesを使いたいと思います。私はXと呼ばれる2D入力セット(2つのパラメータの8つのカップル)を持っています。私は1Dアレイyに集められた8つの対応する出力を持っています。
# Inputs: 8 points
X = np.array([[p1, q1],[p1, q2],[p1, q3],[p1, q4],[p2, q1],[p2, q2],[p2, q3],[p2, q4]])
# Observations: 8 couples
y = np.array([r1,r2,r3,r4,r5,r6,r7,r8])
私は入力テストスペースにXを定義した:
# Input space
x1 = np.linspace(x1min, x1max)
x2 = np.linspace(x2min, x2max)
x = (np.array([x1, x2])).T
それから私は私のトレーニングデータ(X、Y)にそれをフィット、GPモデルのインスタンスを作成し、1次元の予測を行います
kernel = C(1.0, (1e-3, 1e3)) * RBF([5,5], (1e-2, 1e2))
gp = GaussianProcessRegressor(kernel=kernel, n_restarts_optimizer=15)
gp.fit(X, y)
y_pred, MSE = gp.predict(x, return_std=True)
:は私の入力空間Xにをy_pred fig = pl.figure()
ax = fig.add_subplot(111, projection='3d')
Xp, Yp = np.meshgrid(x1, x2)
Zp = np.reshape(y_pred,50)
surf = ax.plot_surface(Xp, Yp, Zp, rstride=1, cstride=1, cmap=cm.jet,
linewidth=0, antialiased=False)
pl.show()
これは私が得るものです::
そして私は、3Dプロットを作るRBF[5,5]
私は何ポスターIに似たこのような何かを、取得カーネルパラメータを変更
GOT上記:
これらのプロットでも一致していません。元の訓練ポイントからの観察(低い応答は[65.1,37]で得られ、最高は[92.3,54]で得られる)。
私は2DのGPでかなり新しくなっています(以前はPythonもやっていませんでした)ので、私はここで何か不足していると思います...どんな答えでも大変感謝しています!
私はGPyとpyGPを使っても同様に試みましたが、Sklearnよりも文書化されていないので、私は2次元でもそれほど遠くに行っていませんでした。しかし、あなたがこれらのうちの1つがまだ私の問題のためのより良い選択肢かもしれないと思うなら、scikit-learnの代わりに、私に知らせてください - そして、なぜ!ありがとう。 – Julie