Gradient boosting machines

Học có giám sát với R: Hồi quy

Nina Zumel and John Mount

Win-Vector, LLC

Cách Gradient Boosting hoạt động

  1. Khớp một cây nông $T_1$ với dữ liệu: $M_1 = T_1$
Học có giám sát với R: Hồi quy

Cách Gradient Boosting hoạt động

  1. Khớp một cây nông $T_1$ với dữ liệu: $M_1 = T_1$
  2. Khớp một cây $T_2$ với phần dư. Tìm $\gamma$ sao cho $M_2 = M_1 + \gamma T_2$ là khớp tốt nhất với dữ liệu
Học có giám sát với R: Hồi quy

Cách Gradient Boosting hoạt động

Regularization: tốc độ học $\eta \in(0,1)$

$$ M_2 = M_1 + \eta \gamma T_2 $$

  • $\eta$ lớn: học nhanh hơn
  • $\eta$ nhỏ: giảm rủi ro overfit
Học có giám sát với R: Hồi quy

Cách Gradient Boosting hoạt động

  1. Khớp một cây nông $T_1$ với dữ liệu
    • $M_1 = T_1$
  2. Khớp một cây $T_2$ với phần dư.
    • $M_2 = M_1 + \eta \gamma_2 T_2$
  3. Lặp lại (2) đến khi thỏa điều kiện dừng

Mô hình cuối:

$$ M = M_1 + \eta \sum \gamma_i T_i $$

Học có giám sát với R: Hồi quy

Dùng cross-validation để tránh overfit

Lỗi huấn luyện giảm dần, nhưng lỗi kiểm thử thì không

Học có giám sát với R: Hồi quy

Thực hành tốt nhất (với xgboost())

  1. Chạy xgb.cv() với số vòng (cây) lớn.
Học có giám sát với R: Hồi quy

Thực hành tốt nhất (với xgboost())

  1. Chạy xgb.cv() với số vòng (cây) lớn.
  2. xgb.cv()$evaluation_log: ghi RMSE ước lượng cho mỗi vòng.
    • Tìm số cây làm nhỏ nhất RMSE ước lượng: $n_{best}$
Học có giám sát với R: Hồi quy

Thực hành tốt nhất (với xgboost())

  1. Chạy xgb.cv() với số vòng (cây) lớn.
  2. xgb.cv()$evaluation_log: ghi RMSE ước lượng cho mỗi vòng.
    • Tìm số cây làm nhỏ nhất RMSE ước lượng: $n_{best}$
  3. Chạy xgboost(), đặt nrounds = $n_{best}$
Học có giám sát với R: Hồi quy

Ví dụ: Mô hình thuê xe đạp

Đầu tiên, chuẩn bị dữ liệu

treatplan <- designTreatmentsZ(bikesJan, vars)
newvars <- treatplan$scoreFrame %>%
     filter(code %in% c("clean", "lev")) %>%
     use_series(varName)

bikesJan.treat <- prepare(treatplan, bikesJan, varRestriction = newvars)

Với xgboost():

  • Dữ liệu đầu vào: as.matrix(bikesJan.treat)
  • Biến mục tiêu: bikesJan$cnt
Học có giám sát với R: Hồi quy

Huấn luyện mô hình với xgboost() / xgb.cv()

cv <- xgb.cv(data = as.matrix(bikesJan.treat), label = bikesJan$cnt,
              objective = "reg:squarederror",
              nrounds = 100, nfold = 5, eta = 0.3, max_depth = 6)

Tham số chính của xgb.cv()xgboost()

  • data: dữ liệu đầu vào dạng ma trận ; label: biến mục tiêu
  • objective: cho hồi quy - "reg:squarederror"
  • nrounds: số cây tối đa cần khớp
  • eta: tốc độ học
  • max_depth: độ sâu tối đa của từng cây
  • nfold (chỉ xgb.cv()): số fold cho cross-validation
Học có giám sát với R: Hồi quy

Tìm số cây phù hợp

elog <- as.data.frame(cv$evaluation_log)
(nrounds <- which.min(elog$test_rmse_mean))
78
Học có giám sát với R: Hồi quy

Chạy xgboost() cho mô hình cuối

nrounds <- 78

model <- xgboost(data = as.matrix(bikesJan.treat), 
                 label = bikesJan$cnt,
                 nrounds = nrounds,
                 objective = "reg:squarederror",
                 eta = 0.3,
                 max_depth = 6)
Học có giám sát với R: Hồi quy

Dự đoán với mô hình xgboost()

Chuẩn bị dữ liệu tháng Hai và dự đoán

bikesFeb.treat <- prepare(treatplan, bikesFeb, varRestriction = newvars)

bikesFeb$pred <- predict(model, as.matrix(bikesFeb.treat))

Hiệu năng mô hình trên dữ liệu tháng Hai

Mô hình RMSE
Quasipoisson 69.3
Random forests 67.15
Gradient Boosting 54.0
Học có giám sát với R: Hồi quy

Trực quan hóa kết quả

Dự đoán so với số lượt thuê thực tế, Tháng Hai

Dự đoán và số lượt thuê theo giờ, Tháng Hai

Học có giám sát với R: Hồi quy

Cùng luyện tập nào!

Học có giám sát với R: Hồi quy

Preparing Video For Download...