Gradient Boosting Machine에 적합한 트리 개수 찾기
이 연습에서는 날씨, 자전거 종류, 시간대 정보를 바탕으로 한 시간 동안 대여된 자전거 수를 예측하는 gradient boosting 모델을 만들 준비를 하겠습니다. 모델은 7월 데이터로 학습합니다.
7월 데이터는 이미 로드되어 있습니다. bikesJuly.treat에는 더 이상 결과 컬럼이 없으므로, 미처리 데이터에서 결과를 가져와야 합니다: bikesJuly$cnt.
xgboost 패키지를 사용해 랜덤 포레스트 모델을 적합하겠습니다. xgb.cv() 함수(docs)는 교차 검증을 통해 모델에 새 트리가 추가될 때마다 샘플 외 학습 오류를 추정합니다. 최종 모델에 사용할 적절한 트리 개수는 보류 집합 RMSE가 최소가 되는 시점입니다.
이번 연습에서 xgb.cv() 호출의 핵심 인자는 다음과 같습니다:
data: 숫자 행렬.label: 결과 벡터(역시 숫자).nrounds: 최대 라운드 수(구축할 트리 개수).nfold: 교차 검증 폴드 수. 5가 적절합니다.objective: 연속형 결과의 경우"reg:squarederror".eta: 학습률.max_depth: 트리의 최대 깊이.early_stopping_rounds: 이 횟수만큼 개선이 없으면 중지.verbose: 조용히 실행하려면FALSE.
이 연습은 강의의 일부입니다
R로 하는 Supervised Learning: 회귀
연습 안내
- 공란을 채워 처리된 학습 데이터로
xgb.cv()를 실행하고, 출력은 변수cv에 할당하세요.as.matrix()로 처리된 데이터 프레임을 행렬로 변환하세요.- 50 라운드와 5-폴드 교차 검증을 사용하세요.
early_stopping_rounds는 5로 설정하세요.eta는 0.75,max_depth는 5로 설정하세요.
cv에서 데이터 프레임evaluation_log를 가져와 변수elog에 할당하세요.evaluation_log의 각 행은 트리가 하나 더 추가된 상태를 나타내므로, 행 번호가 모델의 트리 개수를 의미합니다.- 공란을 채워
train_rmse_mean과test_rmse_mean열의 최소값을 갖는 트리 개수를 구하세요.which.min()(docs)은 벡터에서 최소값의 인덱스를 반환합니다.- 트리는 몇 개가 필요할까요?
실습형 인터랙티브 연습
이 예제를 이 샘플 코드를 완성하여 풀어보세요.
# Run xgb.cv
cv <- xgb.cv(data = ____,
label = ___,
nrounds = ___,
nfold = ___,
objective = "reg:squarederror",
eta = ___,
max_depth = ___,
early_stopping_rounds = ___,
verbose = FALSE # silent
)
# Get the evaluation log
elog <- ___
# Determine and print how many trees minimize training and test error
elog %>%
summarize(ntrees.train = ___, # find the index of min(train_rmse_mean)
ntrees.test = ___) # find the index of min(test_rmse_mean)