I want to improve the parameters of this GridSearchCV for a Random Forest Regressor. def Grid_Search_CV_RFR(X_train, y_train): from sklearn.model_selection import GridSearchCV from sklearn.model_selection import ShuffleSplit from sklearn.ensemble import RandomForestRegressor estimator = RandomForestRegressor() param_grid = { "n_estimators" : [10,20,30], "max_features" : ["auto", "sqrt", "log2"], "min_samples_split" : [2,4,8], "bootstrap": [True, False], } grid = GridSearchCV(estimator, param_grid, n_jobs=-1, cv=5) grid.fit(X_train, y_train) return grid.best_score_ , grid.best_params_ def RFR(X_train, X_test, y_train, y_test, best_params): from sklearn.ensemble import RandomForestRegressor estimator = RandomForestRegressor(n_jobs=-1).set_params(**best_params) estimator.fit(X_train,y_train) y_predict = estimator.predict(X_test) print "R2 score:",r2(y_test,y_predict) return y_test,y_predict def splitter_v2(tab,y_indicator): from sklearn.model_selection import train_test_split # Asignamos X e y, eliminando la columna y en X X = correlacion(tab,y_indicator) y = tab[:,y_indicator] # Separamos Train y Test respectivamente para X e y X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2) return X_train, X_test, y_train, y_test I used this function 5 times with this code: for i in range(5): print "Loop: " , i print "--------------" X_train, X_test, y_train, y_test = splitter_v2(tabla,1) best_score, best_params = Grid_Search_CV_RFR(X_train, y_train) y_test , y_predict = RFR(X_train, X_test, y_train, y_test, best_params) print "Best Score:" ,best_score print "Best params:",best_params This are the results: Loop: 0 -------------- R2 score: 0.900071279487 Best Score: 0.61802821072 Best params: {'max_features': 'log2', 'min_samples_split': 2, 'bootstrap': False, 'n_estimators': 10} Loop: 1 -------------- R2 score: 0.993462885564 Best Score: 0.671309726329 Best params: {'max_features': 'log2', 'min_samples_split': 4, 'bootstrap': False, 'n_estimators': 10} Loop: 2 -------------- R2 score: -0.181378339338 Best Score: -30.9012120698 Best params: {'max_features': 'log2', 'min_samples_split': 4, 'bootstrap': True, 'n_estimators': 20} Loop: 3 -------------- R2 score: 0.750116663033 Best Score: 0.71472985391 Best params: {'max_features': 'log2', 'min_samples_split': 4, 'bootstrap': False, 'n_estimators': 30} Loop: 4 -------------- R2 score: 0.692075744759 Best Score: 0.715012972471 Best params: {'max_features': 'sqrt', 'min_samples_split': 2, 'bootstrap': True, 'n_estimators': 30} ¿Why I'm getting different results in R2 score?, ¿It's because i select CV=5?, ¿It's because i didn't determinate a random_state=0 on my RandomForestRegressor() ? Continue reading...