【问题标题】:Python visualizing optimization parametersPython可视化优化参数
【发布时间】:2017-09-04 04:48:02
【问题描述】:

我有以下代码,我在其中迭代 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,结果)

标签: python matplotlib graph scipy data-visualization


【解决方案1】:

我最终选择了以下解决方案:

fig = plt.figure()
ax = fig.gca(projection='3d')

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

以上产生了所需的可视化,如下所示:

【讨论】:

    【解决方案2】:

    plot_surface 要求输入数组是二维的。正如我解释的那样,您的数组是一维的。因此,将它们重塑为 2D 可能是一种解决方案。

    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)
    

    然后通过

    绘制它
    fig = plt.figure()
    ax = fig.gca(projection='3d')
    ax.plot_surface(p1, p2, result)
    

    可能会奏效。 (我目前无法测试。)

    【讨论】:

      猜你喜欢
      • 2016-02-03
      • 1970-01-01
      • 1970-01-01
      • 2023-01-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-11
      相关资源
      最近更新 更多