Dùng regularization trong XGBoost
Sau khi xem ví dụ về l1 regularization trong video, giờ bạn sẽ thay đổi mức phạt l2 regularization - còn gọi là "lambda" - và quan sát ảnh hưởng của nó đến hiệu năng tổng thể của mô hình trên tập dữ liệu giá nhà Ames.
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
DMatrixtừXvàynhư trước. - Tạo một từ điển tham số ban đầu với
"objective"là"reg:squarederror"và"max_depth"là3. - Dùng
xgb.cv()bên trong một vòng lặpforvà thay đổi có hệ thống giá trị"lambda"bằng cách truyền vào giá trị l2 hiện tại (reg). - Thêm giá trị
"test-rmse-mean"từ vòng boosting cuối cùng cho mỗi mô hìnhxgboostđược cross-validate. - Nhấn "Gửi câu trả lời" để xem kết quả. Bạn nhận thấy điều gì?
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 = xgb.DMatrix(data=X, label=y)
reg_params = [1, 10, 100]
# Create the initial parameter dictionary for varying l2 strength: params
params = {"____":"____","____":____}
# Create an empty list for storing rmses as a function of l2 complexity
rmses_l2 = []
# Iterate over reg_params
for reg in reg_params:
# Update l2 strength
params["lambda"] = ____
# Pass this updated param dictionary into cv
cv_results_rmse = ____.____(dtrain=____, params=____, nfold=2, num_boost_round=5, metrics="rmse", as_pandas=True, seed=123)
# Append best rmse (final round) to rmses_l2
____.____(____["____"].tail(1).values[0])
# Look at best rmse per l2 param
print("Best rmse as a function of l2:")
print(pd.DataFrame(list(zip(reg_params, rmses_l2)), columns=["l2", "rmse"]))