2017-12-19 3 views
2

Ich derzeit ein zufälliges Gesamtstrukturmodell mit dem folgenden Code ausführen. Ich setze einen random_state gleich 100.Python-Dataframe: Unterschiedliche RMSE-Punktzahl jedes Mal, wenn ich Random Forest Regressor ausführen

from sklearn.cross_validation import train_test_split 

X_train_RIA_INST_PWM, X_test_RIA_INST_PWM, y_train_RIA_INST_PWM, y_test_RIA_INST_PWM = train_test_split(X_RIA_INST_PWM, Y_RIA_INST_PWM, test_size=0.3, random_state = 100) 



# Random Forest Regressor for RIA_INST_PWM accounts 

import numpy as np 
from sklearn.ensemble import RandomForestRegressor 

regressor_RIA_INST_PWM = RandomForestRegressor(n_estimators=100, min_samples_split = 10) 
regressor_RIA_INST_PWM.fit(X_RIA_INST_PWM, Y_RIA_INST_PWM) 

print ("R^2 for training set:"), 
print (regressor_RIA_INST_PWM.score(X_train_RIA_INST_PWM, y_train_RIA_INST_PWM)) 

print ('-'*50) 

print ("R^2 for test set:"), 
print (regressor_RIA_INST_PWM.score(X_test_RIA_INST_PWM, y_test_RIA_INST_PWM)) 

Und dann verwende ich den folgenden Code, um die Vorhersagewerte zu berechnen.

def predict_AUM(df, features, regressor): 

    # Reset index for later merge of predicted target values with Account IDs 
    df.reset_index(); 

    # Set predictor variables 
    X_Predict = df[features] 

    # Clean inputs 
    X_Predict = X_Predict.replace([np.inf, -np.inf], np.nan) 
    X_Predict = X_Predict.fillna(0) 

    # Predict Current_AUM 
    Y_AUM_Snapshot_1yr_Predict = regressor.predict(X_Predict) 
    df['PREDICTED_SPAN'] = Y_AUM_Snapshot_1yr_Predict 

    return df 

df_EVENT5_20 = predict_AUM(df_EVENT5_19, dfzip_features_AUM_RIA_INST_PWM, regressor_RIA_INST_PWM) 

Schließlich berechne ich die RMSE meiner Ergebnisse:

from sklearn.metrics import mean_squared_error 
from math import sqrt 

rmse = sqrt(mean_squared_error(df_EVENT5_20['SPAN_DAYS'], df_EVENT5_20['PREDICTED_SPAN'])) 
rmse 

Jedes Mal, wenn ich meinen Code ausführen ... meine RMSE Änderungen. Es hat sich zwischen 7,75 und 16,4 bewegt. Warum passiert das? Und wie kann ich bei jeder Ausführung des Codes denselben RMSE verwenden? Wie optimiere ich mein Modell für RMSE?

+0

Haben Sie wieder versucht, meinen Vorschlag zu versuchen? –

Antwort

0

Sie haben nur den train_test_split gesetzt, der sicherstellt, dass die zufällige Zuordnung der Daten zu Training und Testmenge reproduzierbar ist.

Wie der Name schon sagt Zufall ForestRegressor auch Teile im Algorithmus enthält, die auf Zufallszahl verlassen (zum Beispiel speziell verschiedene Teile von Daten oder verschiedener Funktionen für die einzelnen Entscheidungsbäume Ausbildung). Wenn Sie reproduzierbare Ergebnisse erzielen möchten, müssen Sie diese ebenfalls erstellen. Dazu müssen Sie es mit random_state wie folgt initialisieren:

regressor_RIA_INST_PWM = RandomForestRegressor(
          n_estimators=100, 
          min_samples_split = 10, 
          random_state=100 
         )