回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>在发布之前,我做了很多搜索,发现了<a href="https://stackoverflow.com/questions/21320964/how-to-make-a-2d-gaussian-process-using-gpml-matlab-for-regression">this question</a>这可能正是我的问题。不过,我尝试了答案中的建议,但不幸的是,这并没有解决问题,我无法添加评论以要求进一步解释,因为我是这里的新成员。</p>
<p>无论如何,我想在Python中使用高斯进程和scikit learn来开始一个简单但真实的案例(使用scikit learn文档中提供的示例)。我有一个名为<strong>X</strong>的二维输入集(8对2参数)。我有8个相应的输出,收集在1D数组中。</p>
<pre><code># Inputs: 8 points
X = np.array([[p1, q1],[p2, q2],[p3, q3],[p4, q4],[p5, q5],[p6, q6],[p7, q7],[p8, q8]])
# Observations: 8 couples
y = np.array([r1,r2,r3,r4,r5,r6,r7,r8])
</code></pre>
<p>我定义了一个输入测试空间:</p>
<pre><code># Input space
x1 = np.linspace(x1min, x1max) #p
x2 = np.linspace(x2min, x2max) #q
x = (np.array([x1, x2])).T
</code></pre>
<p>然后我实例化GP模型,将其与我的训练数据进行拟合,并在我的输入空间进行1D预测</p>
<pre><code>from sklearn.gaussian_process import GaussianProcessRegressor
from sklearn.gaussian_process.kernels import RBF, ConstantKernel as C
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)
</code></pre>
<p>然后我画了一个3D图:</p>
<pre><code>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()
</code></pre>
<p>这就是我得到的:</p>
<p><a href="https://i.stack.imgur.com/0I6Eb.jpg" rel="noreferrer"><img src="https://i.stack.imgur.com/0I6Eb.jpg" alt="RBF[5,5]"/></a></p>
<p>当我修改内核参数时,我得到了类似的结果,就像我上面提到的海报一样:</p>
<p><a href="https://i.stack.imgur.com/3q7vn.jpg" rel="noreferrer"><img src="https://i.stack.imgur.com/3q7vn.jpg" alt="RBF[10,10]"/></a></p>
<p>这些曲线图甚至与原始训练点的观察结果不匹配(对于[65.1,37]得到的响应较低,对于[92.3,54]得到的响应最高)。</p>
<p>我对2D中的GPs还很陌生(不久前也开始使用Python),所以我想我在这里遗漏了一些东西。。。任何回答都会有帮助,非常感谢,谢谢!</p>