2017-06-30 7 views
2

Ich bin neu in neuronalen Netzen (nur ein Disclaimer).Skalierung der Ausgänge eines Keras-Modells auf den ursprünglichen Maßstab

Ich habe ein Regressionsproblem der Vorhersage der Stärke von Beton, basierend auf 8 Funktionen.

# Normalize data between 0 and 1 
from sklearn.preprocessing import MinMaxScaler 

min_max = MinMaxScaler() 
dataframe2 = pd.DataFrame(min_max.fit_transform(dataframe), columns = dataframe.columns) 

dann konvertiert die Datenrahmen in numpy Array und spaltete es in X_train, y_train, X_test, y_test: Was ich zuerst getan, werden die Daten unter Verwendung von Min-Max-Normalisierung neu skaliert. Jetzt ist hier der Keras Code für das Netzwerk selbst:

from keras.models import Sequential 
from keras.layers import Dense, Activation 

#Set the params of the Neural Network 
batch_size = 64 
num_of_epochs = 40 
hidden_layer_size = 256 

model = Sequential() 
model.add(Dense(hidden_layer_size, input_shape=(8,))) 
model.add(Activation('relu')) 
model.add(Dense(hidden_layer_size)) 
model.add(Activation('relu')) 
model.add(Dense(hidden_layer_size)) 
model.add(Activation('relu')) 
model.add(Dense(1)) 
model.add(Activation('linear')) 


model.compile(loss='mean_squared_error', # using the mean squared error function 
       optimizer='adam', # using the Adam optimiser 
       metrics=['mae', 'mse']) # reporting the accuracy with mean absolute error and mean squared error 

model.fit(X_train, y_train, # Train the model using the training set... 
      batch_size=batch_size, epochs=num_of_epochs, 
      verbose=0, validation_split=0.1) 

# All predictions in one array 
predictions = model.predict(X_test) 

Fragen:

  1. Prognosen Array werden die Werte alle im skalierten Format haben (zwischen 0 und 1), aber offensichtlich Ich würde die Vorhersagen brauchen, um in ihren wahren Werten zu sein. Wie kann ich diese Ausgaben auf die tatsächlichen Werte zurückskalieren?

  2. Ist die Min-Max- oder Z-Score-Standardisierung für Regressionsprobleme besser geeignet? Was ist mit dieser "Batch-Normalisierung"?

Danke,

+1

Sie Frage ist ein wenig zu weit gefasst: es 2 Fragen enthält, und die erste (Neuskalierung) hat nichts mit Keras zu tun. –

+1

Ihre erste Frage wurde beantwortet und 2. ist nicht mehr für den Stackoverflow verfügbar. Bitte überprüfen Sie auf https://stats.stackexchange.com –

Antwort

1

Gemäß der doc, die MinMaxScaler Klasse hat eine inverse_transform Methode, das tut, was Sie wollen:

inverse_transform (X): die Skalierung von X Rückgängig feature_range nach.

+0

Hallo Camilleri, nur eine Frage. In meinem Fall skaliere ich die Eingabedaten zwischen -1,1, aber am Ausgang von model.predict() liegt der Datenbereich nicht zwischen -1 und 1. Ich habe einige seltsame Werte wie -1.00688391 keine Ahnung warum? Ich denke, wenn ich mit inverse_transofrm() rescale, verursacht dies schlechte Ergebnisse – mik1904

+0

@ mik1904 was ist die Nichtlinearität in Ihrer letzten Schicht? Damit die Ausgabe in [0, 1] ist, sollte es ein Sigmoid sein. In Ihrem Fall kann die Formel also 2 * Sigmoid - 1 sein. Dies sollte zu Resultaten zwischen -1 und 1 –

+0

führen. Was ist Ihre Frage? Ich habe eine LSTM mit einer versteckten Schicht Aktivierungsfunktion linear – mik1904

Verwandte Themen