Aan de slagGa gratis aan de slag

colsample_bytree tunen

Nu is het tijd om "colsample_bytree" te tunen. Dit heb je al eens gezien als je hebt gewerkt met scikit-learn's RandomForestClassifier of RandomForestRegressor, waar het max_features heet. In zowel xgboost als sklearn geeft deze parameter (al heet hij anders) simpelweg de fractie van features aan waaruit bij elke split in een boom wordt gekozen. In xgboost moet colsample_bytree worden opgegeven als een float tussen 0 en 1.

Deze oefening maakt deel uit van de cursus

Extreme Gradient Boosting met XGBoost

Cursus bekijken

Oefeninstructies

  • Maak een lijst colsample_bytree_vals om de waarden 0.1, 0.5, 0.8 en 1 op te slaan.
  • Varieer "colsample_bytree" systematisch en voer cross-validatie uit, precies zoals je eerder met max_depth en eta hebt gedaan.

Praktische interactieve oefening

Probeer deze oefening eens door deze voorbeeldcode in te vullen.

# Create your housing DMatrix
housing_dmatrix = xgb.DMatrix(data=X,label=y)

# Create the parameter dictionary
params={"objective":"reg:squarederror","max_depth":3}

# Create list of hyperparameter values: colsample_bytree_vals
____ = ____
best_rmse = []

# Systematically vary the hyperparameter value 
for curr_val in ____:

    ____ = ____
    
    # Perform cross-validation
    cv_results = xgb.cv(dtrain=housing_dmatrix, params=params, nfold=2,
                 num_boost_round=10, early_stopping_rounds=5,
                 metrics="rmse", as_pandas=True, seed=123)
    
    # Append the final round rmse to best_rmse
    best_rmse.append(cv_results["test-rmse-mean"].tail().values[-1])

# Print the resultant DataFrame
print(pd.DataFrame(list(zip(colsample_bytree_vals, best_rmse)), columns=["colsample_bytree","best_rmse"]))
Code bewerken en uitvoeren