Menyetel jumlah boosting rounds
Mari mulai penyetelan parameter dengan melihat bagaimana jumlah boosting rounds (jumlah pohon yang Anda bangun) memengaruhi performa out-of-sample model XGBoost Anda. Anda akan menggunakan xgb.cv() di dalam sebuah for loop dan membangun satu model untuk setiap parameter num_boost_round.
Di sini, Anda akan tetap menggunakan himpunan data perumahan Ames. Fitur tersedia dalam array X, dan vektor target terdapat dalam y.
Latihan ini adalah bagian dari kursus
Extreme Gradient Boosting dengan XGBoost
Petunjuk latihan
- Buat
DMatrixbernamahousing_dmatrixdariXdany. - Buat kamus parameter bernama
params, dengan memasukkan"objective"yang sesuai ("reg:squarederror") dan"max_depth"(atur ke3). - Lakukan iterasi atas
num_roundsdi dalam sebuahforloop dan jalankan cross-validation 3-fold. Pada setiap iterasi loop, teruskan jumlah boosting rounds saat ini (curr_num_rounds) kexgb.cv()sebagai argumen untuknum_boost_round. - Tambahkan nilai RMSE pada boosting round terakhir untuk setiap model XGBoost yang divalidasi silang ke daftar
final_rmse_per_round. num_roundsdanfinal_rmse_per_roundtelah dipasangkan dengan zip dan dikonversi menjadi DataFrame sehingga Anda dapat dengan mudah melihat performa model pada setiap boosting round. Tekan 'Kirim Jawaban' untuk melihat hasilnya!
Latihan interaktif praktis
Cobalah latihan ini dengan menyelesaikan kode contoh berikut.
# Create the DMatrix: housing_dmatrix
housing_dmatrix = ____
# Create the parameter dictionary for each tree: params
params = {"____":"____", "____":____}
# Create list of number of boosting rounds
num_rounds = [5, 10, 15]
# Empty list to store final round rmse per XGBoost model
final_rmse_per_round = []
# Iterate over num_rounds and build one model per num_boost_round parameter
for curr_num_rounds in num_rounds:
# Perform cross-validation: cv_results
cv_results = ____(dtrain=____, params=____, nfold=3, num_boost_round=____, metrics="rmse", as_pandas=True, seed=123)
# Append final round RMSE
____.____(cv_results["test-rmse-mean"].tail().values[-1])
# Print the resultant DataFrame
num_rounds_rmses = list(zip(num_rounds, final_rmse_per_round))
print(pd.DataFrame(num_rounds_rmses,columns=["num_boosting_rounds","rmse"]))