XGBoost 的正則化與基學習器

使用 XGBoost 的極端梯度提升

Sergey Fogelson

Head of Data Science, TelevisaUnivision

XGBoost 的正則化

  • 正則化用來控制模型複雜度
  • 目標是同時準確且盡量簡單的模型
  • XGBoost 的正則化參數:
    • gamma-分裂所需的最小損失下降
    • alpha-葉節點權重的 l1 正則化,值越大正則化越強
    • lambda-葉節點權重的 l2 正則化
使用 XGBoost 的極端梯度提升

XGBoost 中的 L1 正則化範例

import xgboost as xgb
import pandas as pd
boston_data = pd.read_csv("boston_data.csv")
X,y = boston_data.iloc[:,:-1],boston_data.iloc[:,-1]

boston_dmatrix = xgb.DMatrix(data=X,label=y) params={"objective":"reg:squarederror","max_depth":4}
l1_params = [1,10,100] rmses_l1=[]
for reg in l1_params: params["alpha"] = reg cv_results = xgb.cv(dtrain=boston_dmatrix, params=params,nfold=4, num_boost_round=10,metrics="rmse",as_pandas=True,seed=123) rmses_l1.append(cv_results["test-rmse-mean"].tail(1).values[0])
print("Best rmse as a function of l1:") print(pd.DataFrame(list(zip(l1_params,rmses_l1)), columns=["l1","rmse"]))
Best rmse as a function of l1:
        l1          rmse
    0    1  69572.517742
    1   10  73721.967141
    2  100  82312.312413
使用 XGBoost 的極端梯度提升

XGBoost 的基學習器

  • 線性基學習器:
    • 線性項總和
    • 提升後模型為多個線性模型的加權和(本質仍為線性)
    • 少見使用
  • 樹狀基學習器:
    • 決策樹
    • 提升後模型為多棵決策樹的加權和(非線性)
    • 在 XGBoost 幾乎只使用此類
使用 XGBoost 的極端梯度提升

由多個等長清單建立 DataFrame

  • pd.DataFrame(list(zip(list1,list2)),columns=["list1","list2"]))
  • zip 會建立平行值的 generator
    • zip([1,2,3],["a","b""c"]) = [1,"a"],[2,"b"],[3,"c"]
    • 在用於 DataFrame 前,必須先完整實體化 generators
  • list() 會實體化整個 generator,將其傳入 DataFrame 可完成整段轉換
使用 XGBoost 的極端梯度提升

一起來練習吧!

使用 XGBoost 的極端梯度提升

Preparing Video For Download...