[Python] GridSearchCV Random Forest Regressor Tuning Best Params

Discussão em 'Python' iniciado por Stack, Novembro 30, 2024.

  1. Stack

    Stack Membro Participativo

    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...

Compartilhe esta Página