<p>你用两个特征来预测第三个。比起像<code>plot_surface</code>这样的三维图,如果使用能够显示三维信息的二维图,比如<code>hist2d</code>或<code>pcolormesh</code>,通常会更清晰。下面是一个完整的示例,使用与问题类似的数据/代码:</p>
<pre><code>from itertools import product
import numpy as np
from matplotlib import pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
from sklearn.gaussian_process import GaussianProcessRegressor
from sklearn.gaussian_process.kernels import RBF, ConstantKernel as C
X = np.array([[0,0],[2,0],[4,0],[6,0],[8,0],[10,0],[12,0],[14,0],[16,0],[0,2],
[2,2],[4,2],[6,2],[8,2],[10,2],[12,2],[14,2],[16,2]])
y = np.array([-54,-60,-62,-64,-66,-68,-70,-72,-74,-60,-62,-64,-66,
-68,-70,-72,-74,-76])
# Input space
x1 = np.linspace(X[:,0].min(), X[:,0].max()) #p
x2 = np.linspace(X[:,1].min(), X[:,1].max()) #q
x = (np.array([x1, x2])).T
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)
x1x2 = np.array(list(product(x1, x2)))
y_pred, MSE = gp.predict(x1x2, return_std=True)
X0p, X1p = x1x2[:,0].reshape(50,50), x1x2[:,1].reshape(50,50)
Zp = np.reshape(y_pred,(50,50))
# alternative way to generate equivalent X0p, X1p, Zp
# X0p, X1p = np.meshgrid(x1, x2)
# Zp = [gp.predict([(X0p[i, j], X1p[i, j]) for i in range(X0p.shape[0])]) for j in range(X0p.shape[1])]
# Zp = np.array(Zp).T
fig = plt.figure(figsize=(10,8))
ax = fig.add_subplot(111)
ax.pcolormesh(X0p, X1p, Zp)
plt.show()
</code></pre>
<p>输出:</p>
<p><a href="https://i.stack.imgur.com/vhCAP.png" rel="noreferrer"><img src="https://i.stack.imgur.com/vhCAP.png" alt="enter image description here"/></a></p>
<p>看起来很简单,但我的示例数据也是。一般来说,您不应该期望通过这几个数据点得到特别有趣的结果。</p>
<p>此外,如果您确实需要曲面图,您只需将<code>pcolormesh</code>行替换为原来的行(或多或少):</p>
<pre><code>ax = fig.add_subplot(111, projection='3d')
surf = ax.plot_surface(X0p, X1p, Zp, rstride=1, cstride=1, cmap='jet', linewidth=0, antialiased=False)
</code></pre>
<p>输出:</p>
<p><a href="https://i.stack.imgur.com/xv0Gf.png" rel="noreferrer"><img src="https://i.stack.imgur.com/xv0Gf.png" alt="enter image description here"/></a></p>