Tìm số lượng cây phù hợp cho gradient boosting machine
Trong bài tập này, bạn sẽ chuẩn bị xây dựng một mô hình gradient boosting để dự đoán số xe đạp được thuê trong một giờ dựa trên thời tiết, loại ngày và thời điểm trong ngày. Bạn sẽ huấn luyện mô hình trên dữ liệu của tháng Bảy.
Dữ liệu tháng Bảy đã được nạp sẵn. Hãy nhớ rằng bikesJuly.treat không còn cột biến mục tiêu, nên bạn phải lấy từ dữ liệu chưa xử lý: bikesJuly$cnt.
Bạn sẽ dùng gói xgboost để khớp mô hình random forest. Hàm xgb.cv() (docs) sử dụng cross-validation để ước lượng lỗi học ngoài mẫu khi mỗi cây mới được thêm vào mô hình. Số lượng cây phù hợp cho mô hình cuối cùng là số làm tối thiểu hóa holdout RMSE.
Trong bài này, các đối số chính cho lệnh gọi xgb.cv() gồm:
data: một ma trận số.label: vector kết quả (cũng là số).nrounds: số vòng tối đa (số cây cần xây dựng).nfold: số fold cho cross-validation. 5 là một con số hợp lý.objective:"reg:squarederror"cho biến mục tiêu liên tục.eta: tốc độ học (learning rate).max_depth: độ sâu tối đa của cây.early_stopping_rounds: dừng sau từng này vòng nếu không cải thiện.verbose:FALSEđể không in log.
Bài tập này là một phần của khóa học
Học có giám sát với R: Hồi quy
Hướng dẫn bài tập
- Điền vào chỗ trống để chạy
xgb.cv()trên dữ liệu huấn luyện đã xử lý; gán đầu ra cho biếncv.- Dùng
as.matrix()để chuyển data frame đã xử lý thành ma trận. - Dùng 50 vòng, và cross-validation 5-fold.
- Đặt
early_stopping_roundslà 5. - Đặt
etalà 0.75,max_depthlà 5.
- Dùng
- Lấy data frame
evaluation_logtừcvvà gán vào biếnelog. Mỗi hàng củaevaluation_logtương ứng với một cây bổ sung, vì vậy số thứ tự hàng cho bạn biết số cây trong mô hình. - Điền vào chỗ trống để lấy số cây có giá trị nhỏ nhất của các cột
train_rmse_meanvàtest_rmse_mean.which.min()(docs) trả về chỉ số của giá trị nhỏ nhất trong một vector.- Bạn cần bao nhiêu cây?
Bài tập tương tác thực hành trực tiếp
Hãy thử làm bài tập này bằng cách hoàn thành đoạn mã mẫu này.
# 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)