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
Oefeninstructies
- Maak een lijst
colsample_bytree_valsom de waarden0.1,0.5,0.8en1op te slaan. - Varieer
"colsample_bytree"systematisch en voer cross-validatie uit, precies zoals je eerder metmax_depthenetahebt 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"]))