Do giao diện xgboost
trong caret
gần đây đã thay đổi, đây là tập lệnh cung cấp hướng dẫn được nhận xét đầy đủ về việc sử dụng caret
để điều chỉnh xgboost
siêu tham số.
Đối với điều này, tôi sẽ sử dụng dữ liệu đào tạo từ cuộc thi Kaggle "Cho tôi một số tín dụng" .
1. Lắp một xgboost
mô hình
Trong phần này, chúng tôi:
- phù hợp với một
xgboost
mô hình với siêu đường kính tùy ý
- đánh giá tổn thất (AUC-ROC) bằng cách sử dụng xác thực chéo (
xgb.cv
)
- vẽ sơ đồ so với kiểm tra đánh giá số liệu
Đây là một số mã để làm điều này.
library(caret)
library(xgboost)
library(readr)
library(dplyr)
library(tidyr)
# load in the training data
df_train = read_csv("04-GiveMeSomeCredit/Data/cs-training.csv") %>%
na.omit() %>% # listwise deletion
select(-`[EMPTY]`) %>%
mutate(SeriousDlqin2yrs = factor(SeriousDlqin2yrs, # factor variable for classification
labels = c("Failure", "Success")))
# xgboost fitting with arbitrary parameters
xgb_params_1 = list(
objective = "binary:logistic", # binary classification
eta = 0.01, # learning rate
max.depth = 3, # max tree depth
eval_metric = "auc" # evaluation/loss metric
)
# fit the model with the arbitrary parameters specified above
xgb_1 = xgboost(data = as.matrix(df_train %>%
select(-SeriousDlqin2yrs)),
label = df_train$SeriousDlqin2yrs,
params = xgb_params_1,
nrounds = 100, # max number of trees to build
verbose = TRUE,
print.every.n = 1,
early.stop.round = 10 # stop if no improvement within 10 trees
)
# cross-validate xgboost to get the accurate measure of error
xgb_cv_1 = xgb.cv(params = xgb_params_1,
data = as.matrix(df_train %>%
select(-SeriousDlqin2yrs)),
label = df_train$SeriousDlqin2yrs,
nrounds = 100,
nfold = 5, # number of folds in K-fold
prediction = TRUE, # return the prediction using the final model
showsd = TRUE, # standard deviation of loss across folds
stratified = TRUE, # sample is unbalanced; use stratified sampling
verbose = TRUE,
print.every.n = 1,
early.stop.round = 10
)
# plot the AUC for the training and testing samples
xgb_cv_1$dt %>%
select(-contains("std")) %>%
mutate(IterationNum = 1:n()) %>%
gather(TestOrTrain, AUC, -IterationNum) %>%
ggplot(aes(x = IterationNum, y = AUC, group = TestOrTrain, color = TestOrTrain)) +
geom_line() +
theme_bw()
Đây là những gì kiểm tra so với đào tạo AUC trông giống như:
2. Tìm kiếm siêu tham số bằng cách sử dụng train
Đối với tìm kiếm siêu tham số, chúng tôi thực hiện các bước sau:
- tạo ra một
data.frame
sự kết hợp độc đáo của các tham số mà chúng tôi muốn các mô hình được đào tạo.
- Chỉ định các tham số điều khiển áp dụng cho đào tạo của từng mô hình, bao gồm các tham số xác thực chéo và chỉ định rằng các xác suất được tính toán để AUC có thể được tính toán
- xác nhận chéo & huấn luyện các mô hình cho từng kết hợp tham số, lưu AUC cho từng mô hình.
Đây là một số mã cho thấy làm thế nào để làm điều này.
# set up the cross-validated hyper-parameter search
xgb_grid_1 = expand.grid(
nrounds = 1000,
eta = c(0.01, 0.001, 0.0001),
max_depth = c(2, 4, 6, 8, 10),
gamma = 1
)
# pack the training control parameters
xgb_trcontrol_1 = trainControl(
method = "cv",
number = 5,
verboseIter = TRUE,
returnData = FALSE,
returnResamp = "all", # save losses across all models
classProbs = TRUE, # set to TRUE for AUC to be computed
summaryFunction = twoClassSummary,
allowParallel = TRUE
)
# train the model for each parameter combination in the grid,
# using CV to evaluate
xgb_train_1 = train(
x = as.matrix(df_train %>%
select(-SeriousDlqin2yrs)),
y = as.factor(df_train$SeriousDlqin2yrs),
trControl = xgb_trcontrol_1,
tuneGrid = xgb_grid_1,
method = "xgbTree"
)
# scatter plot of the AUC against max_depth and eta
ggplot(xgb_train_1$results, aes(x = as.factor(eta), y = max_depth, size = ROC, color = ROC)) +
geom_point() +
theme_bw() +
scale_size_continuous(guide = "none")
Cuối cùng, bạn có thể tạo một bong bóng cho AUC qua các biến thể của eta
và max_depth
: