R로 하는 Supervised Learning: 회귀
Nina Zumel and John Mount
Win-Vector, LLC



정규화: 학습률 $\eta \in(0,1)$
$$ M_2 = M_1 + \eta \gamma T_2 $$

최종 모델:
$$ M = M_1 + \eta \sum \gamma_i T_i $$

훈련 오차는 계속 감소하지만 테스트 오차는 그렇지 않음
xgb.cv()를 실행합니다.xgb.cv()를 실행합니다.xgb.cv()$evaluation_log: 라운드별 추정 RMSE 기록xgb.cv()를 실행합니다.xgb.cv()$evaluation_log: 라운드별 추정 RMSE 기록xgboost() 실행 시 nrounds = $n_{best}$ 설정데이터 전처리
treatplan <- designTreatmentsZ(bikesJan, vars)
newvars <- treatplan$scoreFrame %>%
filter(code %in% c("clean", "lev")) %>%
use_series(varName)
bikesJan.treat <- prepare(treatplan, bikesJan, varRestriction = newvars)
xgboost() 입력:
as.matrix(bikesJan.treat)bikesJan$cntcv <- xgb.cv(data = as.matrix(bikesJan.treat), label = bikesJan$cnt,
objective = "reg:squarederror",
nrounds = 100, nfold = 5, eta = 0.3, max_depth = 6)
xgb.cv() 및 xgboost()의 주요 입력값
data: 행렬 형태의 입력 데이터 ; label: 결과 변수objective: 회귀 시 - "reg:squarederror"nrounds: 최대 트리 수eta: 학습률max_depth: 개별 트리의 최대 깊이nfold (xgb.cv() 전용): 교차 검증 폴드 수
elog <- as.data.frame(cv$evaluation_log)
(nrounds <- which.min(elog$test_rmse_mean))
78
nrounds <- 78
model <- xgboost(data = as.matrix(bikesJan.treat),
label = bikesJan$cnt,
nrounds = nrounds,
objective = "reg:squarederror",
eta = 0.3,
max_depth = 6)
2월 데이터 전처리 및 예측
bikesFeb.treat <- prepare(treatplan, bikesFeb, varRestriction = newvars)
bikesFeb$pred <- predict(model, as.matrix(bikesFeb.treat))
2월 데이터 모델 성능
| 모델 | RMSE |
|---|---|
| 준포아송 | 69.3 |
| 랜덤 포레스트 | 67.15 |
| 그래디언트 부스팅 | 54.0 |
예측값 vs. 실제 자전거 대여량, 2월

예측값 및 시간별 자전거 대여량, 2월

R로 하는 Supervised Learning: 회귀