2017-04-08 5 views
3

Ich habe den folgenden Code, wo ich durch ein Raster von 2 Parametern durchlaufen, um zu sehen, welcher Satz von Parametern das beste Ergebnis liefern wird.Python Visualisierung Optimierungsparameter

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']) 

Als Ergebnis erhalten Arrays I 3, eine mit dem Ergebnis jeder Iteration und zwei Arrays (p1, p2) mit den entsprechenden Parametern. Ich möchte nun diese Daten mit Matplotlib darstellen, um zu visualisieren, wie das Ergebnis über die Parameterebene variiert.

habe ich versucht, die folgenden, aber ich habe ein leeres Grundstück:

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

Idealer unten etwas wie die Handlung zu erstellen Ich möchte in der Lage sein. Wie kann ich das mit Matplotlib erreichen?

enter image description here

+0

@ ImportanceOfBeingErnest Ich habe folgendes versucht, aber ich habe einen leeren Plot: fig = plt.figure()/ ax = fig.gca (projection = '3d')/ax.plot_surface (p1, p2, result) –

Antwort

1

I endete mit der folgenden Lösung gehen:

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

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

Die über die gewünschte Visualisierung ergab, wie unten zu sehen:

enter image description here

0

plot_surface erfordert die Eingabe-Arrays zweidimensionalen zu sein. Wie ich es interpretiere, sind Ihre Arrays 1D. Eine 2D-Umgestaltung könnte also eine Lösung sein.

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) 

Plotten Dann ist es über

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

funktionieren könnte. (Ich kann es nicht teste im Moment.)