MulaiMulai sekarang secara gratis

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

Lihat Kursus

Petunjuk latihan

  • Buat DMatrix bernama housing_dmatrix dari X dan y.
  • Buat kamus parameter bernama params, dengan memasukkan "objective" yang sesuai ("reg:squarederror") dan "max_depth" (atur ke 3).
  • Lakukan iterasi atas num_rounds di dalam sebuah for loop dan jalankan cross-validation 3-fold. Pada setiap iterasi loop, teruskan jumlah boosting rounds saat ini (curr_num_rounds) ke xgb.cv() sebagai argumen untuk num_boost_round.
  • Tambahkan nilai RMSE pada boosting round terakhir untuk setiap model XGBoost yang divalidasi silang ke daftar final_rmse_per_round.
  • num_rounds dan final_rmse_per_round telah 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"]))
Edit dan Jalankan Kode