Tinh chỉnh số vòng boosting
Bắt đầu tinh chỉnh tham số bằng cách xem số vòng boosting (số cây được xây dựng) ảnh hưởng thế nào đến hiệu năng ngoài mẫu của mô hình XGBoost. Bạn sẽ dùng xgb.cv() trong một vòng lặp for và xây một mô hình cho mỗi giá trị của tham số num_boost_round.
Ở đây, bạn sẽ tiếp tục làm việc với bộ dữ liệu nhà ở Ames. Các đặc trưng có trong mảng X, và vector mục tiêu nằm trong y.
Bài tập này là một phần của khóa học
Gradient Boosting Cực Mạnh với XGBoost
Hướng dẫn bài tập
- Tạo một
DMatrixtên làhousing_dmatrixtừXvày. - Tạo một từ điển tham số tên là
params, truyền vào"objective"phù hợp ("reg:squarederror") và"max_depth"(đặt là3). - Lặp qua
num_roundstrong một vòng lặpforvà thực hiện cross-validation 3-fold. Ở mỗi vòng lặp, truyền số vòng boosting hiện tại (curr_num_rounds) vàoxgb.cv()dưới dạng đối số chonum_boost_round. - Thêm (append) giá trị RMSE ở vòng boosting cuối cùng cho mỗi mô hình XGBoost đã cross-validate vào danh sách
final_rmse_per_round. num_roundsvàfinal_rmse_per_roundđã được zip và chuyển thành một DataFrame để bạn dễ dàng xem mô hình hoạt động thế nào ở mỗi vòng boosting. Nhấn "Gửi câu trả lời" để xem kết quả!
Bài tập tương tác thực hành trực tiếp
Hãy thử làm bài tập này bằng cách hoàn thành đoạn mã mẫu này.
# 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"]))