XGBoost에서 정규화 사용하기
영상에서 l1 정규화 예시를 살펴봤으니, 이제 l2 정규화 패널티(일명 "lambda") 값을 바꿔 보면서 Ames 주택 데이터셋에서 전체 모델 성능에 어떤 영향을 주는지 확인해 보세요.
이 연습은 강의의 일부입니다
XGBoost로 익히는 Extreme Gradient Boosting
연습 안내
- 이전과 같이
X와y에서DMatrix를 생성하세요. "objective"는"reg:squarederror","max_depth"는3으로 지정한 초기 하이퍼파라미터 딕셔너리를 만드세요.for루프 안에서xgb.cv()를 사용하고, 현재 l2 값(reg)을 전달하여"lambda"값을 체계적으로 변경하세요.- 각 교차 검증된
xgboost모델에 대해 마지막 부스팅 라운드의"test-rmse-mean"을 추가하세요. - 'Submit Answer'를 눌러 결과를 확인해 보세요. 무엇이 보이나요?
실습형 인터랙티브 연습
이 예제를 이 샘플 코드를 완성하여 풀어보세요.
# 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"]))