Python可视化优化参数

4
我有以下代码,其中我遍历了一个包含2个参数的网格以查看哪组参数将产生最佳结果。
from sklearn.grid_search import ParameterGrid

ar1= np.arange(1,10,0.1)
ar2= np.arange(0.1,3,0.01)
param_grid = {'p1': ar1, 'p2' : ar2}
grid = ParameterGrid(param_grid)
result=[]
p1=[]
p2=[]

for params in grid:
     r = getresult(params['p1'], params['p2'])
     result.append(r)
     p1.append(params['p1'])
     p2.append(params['p2'])

作为结果,我得到了3个数组,其中一个包含每次迭代的结果,另外两个数组(p1、p2)包含相应的参数。现在我想使用matplotlib绘制这些数据,以可视化结果如何随着参数平面的变化而变化。
我尝试了以下代码,但是得到了一个空白图:
fig = plt.figure()
ax = fig.gca(projection='3d')
ax.plot_surface(p1, p2, result)

理想情况下,我希望能够创建像下面这样的图表。如何使用matplotlib实现呢?

@ImportanceOfBeingErnest 我尝试了以下代码,但是我得到了一个空白的图:fig = plt.figure() / ax = fig.gca(projection='3d') / ax.plot_surface(p1, p2, result) - Mustard Tiger
2个回答

2
我最终选择了以下解决方案:
fig = plt.figure()
ax = fig.gca(projection='3d')

ax.plot_trisurf(X, Y, Z, cmap=cm.jet, linewidth=0)
fig.tight_layout()
plt.show()

上述操作生成了所需的可视化效果,如下图所示: enter image description here

1

plot_surface需要输入数组是二维的。根据我的理解,您的数组是一维的。因此,将它们重塑为二维可能是一个解决方案。

import numpy as np
shape = (len(ar2), len(ar1))
p1 = np.array(p1).reshape(shape)
p2 = np.array(p2).reshape(shape)
result = result.reshape(shape)

然后通过绘图进行绘制,使用HTML格式保留。
fig = plt.figure()
ax = fig.gca(projection='3d')
ax.plot_surface(p1, p2, result)

可能会起作用。(我现在无法测试它。)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接