Using info from @jani notebook on kaggle.
Using default settings.
Needs to be in the form of matrix, without the outcome.
<- expand.grid(
grid_default nrounds = 100,
max_depth = 6,
eta = 0.3,
gamma = 0,
colsample_bytree = 1,
min_child_weight = 1,
subsample = 1
)
<- caret::trainControl(
train_control method = "none",
verboseIter = FALSE, # no training log
allowParallel = TRUE
)
<- caret::train(
m_xgb x = training_x,
y = training_y,
trControl = train_control,
tuneGrid = grid_default,
method = "xgbTree",
verbose = TRUE,
verbosity = 0
)
Length Class Mode
handle 1 xgb.Booster.handle externalptr
raw 167853 -none- raw
niter 1 -none- numeric
call 7 -none- call
params 9 -none- list
callbacks 1 -none- list
feature_names 120 -none- character
nfeatures 1 -none- numeric
xNames 120 -none- character
problemType 1 -none- character
tuneValue 7 data.frame list
obsLevels 1 -none- logical
param 2 -none- list
Feature importance:
<- xgb.importance(model = m_xgb$finalModel) importance
xgb.plot.importance(importance, top_n = 15)
<- predict(m_xgb$finalModel, testing_x) p_xgb
Correlation:
cor(p_xgb, testing_y)
[1] 0.8855791
MAE:
::mae(testing_y, p_xgb) ModelMetrics
[1] 24.13134
RMSE:
::rmse(p_xgb, testing_y) ModelMetrics
[1] 31.45925
Distro of predicted (red) nd actual (green):
Possible parameters
modelLookup("xgbTree")
model parameter label forReg forClass
1 xgbTree nrounds # Boosting Iterations TRUE TRUE
2 xgbTree max_depth Max Tree Depth TRUE TRUE
3 xgbTree eta Shrinkage TRUE TRUE
4 xgbTree gamma Minimum Loss Reduction TRUE TRUE
5 xgbTree colsample_bytree Subsample Ratio of Columns TRUE TRUE
6 xgbTree min_child_weight Minimum Sum of Instance Weight TRUE TRUE
7 xgbTree subsample Subsample Percentage TRUE TRUE
probModel
1 TRUE
2 TRUE
3 TRUE
4 TRUE
5 TRUE
6 TRUE
7 TRUE
Using grid of parameters to explore:
<- 1000
nrounds
<- expand.grid(
tune_grid nrounds = seq(from = 200, to = nrounds, by = 50),
eta = c(0.025, 0.05, 0.1, 0.3),
max_depth = c(2, 3, 4, 5),
gamma = 0,
colsample_bytree = 1,
min_child_weight = 1,
subsample = 1
)
<- caret::trainControl(
tune_control method = "cv",
number = 3,
# index = createFolds(tr_treated$Id_clean), # fix the folds
verboseIter = FALSE, # no training log
allowParallel = TRUE
)
set.seed(12345)
<- caret::train(
xgb_tune x = training_x,
y = training_y,
trControl = tune_control,
tuneGrid = tune_grid,
method = "xgbTree",
verbose = FALSE,
verbosity = 0
)
$bestTune xgb_tune
nrounds max_depth eta gamma colsample_bytree min_child_weight subsample
17 1000 2 0.025 0 1 1 1
round(min(xgb_tune$results$RMSE), digits = 5)
[1] 34.82689
<- expand.grid(
tune_grid2 nrounds = seq(from = 50, to = nrounds, by = 50),
eta = xgb_tune$bestTune$eta,
max_depth = ifelse(xgb_tune$bestTune$max_depth == 2,
c(xgb_tune$bestTune$max_depth:4),
$bestTune$max_depth - 1:xgb_tune$bestTune$max_depth + 1),
xgb_tunegamma = 0,
colsample_bytree = 1,
min_child_weight = c(1, 2, 3, 4),
subsample = 1
)
set.seed(12345)
<- caret::train(
xgb_tune2 x = training_x,
y = training_y,
trControl = tune_control,
tuneGrid = tune_grid2,
method = "xgbTree",
verbose = FALSE,
verbosity = 0
)
$bestTune xgb_tune2
nrounds max_depth eta gamma colsample_bytree min_child_weight subsample
52 600 2 0.025 0 1 3 1
round(min(xgb_tune2$results$RMSE), digits = 5)
[1] 34.79478
<- expand.grid(
tune_grid3 nrounds = seq(from = 50, to = nrounds, by = 50),
eta = xgb_tune$bestTune$eta,
max_depth = xgb_tune2$bestTune$max_depth,
gamma = 0,
colsample_bytree = c(0.4, 0.6, 0.8, 1.0),
min_child_weight = xgb_tune2$bestTune$min_child_weight,
subsample = c(0.5, 0.75, 1.0)
)
<- caret::train(
xgb_tune3 x = training_x,
y = training_y,
trControl = tune_control,
tuneGrid = tune_grid3,
method = "xgbTree",
verbose = FALSE,
verbosity = 0
)
$bestTune xgb_tune3
nrounds max_depth eta gamma colsample_bytree min_child_weight subsample
72 600 2 0.025 0 0.6 3 0.5
round(min(xgb_tune3$results$RMSE), digits = 5)
[1] 34.52475
<- expand.grid(
tune_grid4 nrounds = seq(from = 50, to = nrounds, by = 50),
eta = xgb_tune$bestTune$eta,
max_depth = xgb_tune2$bestTune$max_depth,
gamma = c(0, 0.05, 0.1, 0.5, 0.7, 0.9, 1.0),
colsample_bytree = xgb_tune3$bestTune$colsample_bytree,
min_child_weight = xgb_tune2$bestTune$min_child_weight,
subsample = xgb_tune3$bestTune$subsample
)
<- caret::train(
xgb_tune4 x = training_x,
y = training_y,
trControl = tune_control,
tuneGrid = tune_grid4,
method = "xgbTree",
verbose = FALSE,
verbosity = 0
)
$bestTune xgb_tune4
nrounds max_depth eta gamma colsample_bytree min_child_weight subsample
92 600 2 0.025 0.7 0.6 3 0.5
round(min(xgb_tune4$results$RMSE), digits = 5)
[1] 34.28292
<- expand.grid(
tune_grid5 nrounds = seq(from = 100, to = 10000, by = 100),
eta = c(0.01, 0.015, 0.025, 0.05, 0.1),
max_depth = xgb_tune2$bestTune$max_depth,
gamma = xgb_tune4$bestTune$gamma,
colsample_bytree = xgb_tune3$bestTune$colsample_bytree,
min_child_weight = xgb_tune2$bestTune$min_child_weight,
subsample = xgb_tune3$bestTune$subsample
)
<- caret::train(
xgb_tune5 x = training_x,
y = training_y,
trControl = tune_control,
tuneGrid = tune_grid5,
method = "xgbTree",
verbose = FALSE,
verbosity = 0
)
$bestTune xgb_tune5
nrounds max_depth eta gamma colsample_bytree min_child_weight subsample
106 600 2 0.015 0.7 0.6 3 0.5
round(min(xgb_tune5$results$RMSE), digits = 5)
[1] 36.52597
<- caret::trainControl(
train_control method = "none",
verboseIter = FALSE, # no training log
allowParallel = TRUE
)
<- expand.grid(
(final_grid nrounds = xgb_tune5$bestTune$nrounds,
eta = xgb_tune5$bestTune$eta,
max_depth = xgb_tune5$bestTune$max_depth,
gamma = xgb_tune5$bestTune$gamma,
colsample_bytree = xgb_tune5$bestTune$colsample_bytree,
min_child_weight = xgb_tune5$bestTune$min_child_weight,
subsample = xgb_tune5$bestTune$subsample
))
nrounds eta max_depth gamma colsample_bytree min_child_weight subsample
1 600 0.015 2 0.7 0.6 3 0.5
<- caret::train(
m_xgb_tu x = training_x,
y = training_y,
trControl = train_control,
tuneGrid = final_grid,
method = "xgbTree",
verbose = FALSE,
verbosity = 0
)
$bestTune m_xgb_tu
nrounds eta max_depth gamma colsample_bytree min_child_weight subsample
1 600 0.015 2 0.7 0.6 3 0.5
Feature importance:
<- xgb.importance(model = m_xgb_tu$finalModel) importance
xgb.plot.importance(importance, top_n = 15)
<- predict(m_xgb_tu, testing_x) p_xgb_tu
Correlation:
cor(p_xgb_tu, testing_y)
[1] 0.9205904
MAE:
::mae(testing_y, p_xgb_tu) ModelMetrics
[1] 18.47843
RMSE:
::rmse(testing_y, p_xgb_tu) ModelMetrics
[1] 25.32764
Distro of predicted (red) nd actual (green):
<- bind_rows(read_rds("data/training.Rds"),
data read_rds("data/testing.Rds"))
<- as.matrix(select(data, -outcome))
data_x <- data$outcome data_y
<- caret::train(
m_xgb_tu x = data_x,
y = data_y,
trControl = train_control,
tuneGrid = grid_default,
method = "xgbTree",
verbose = FALSE)
$finalModel m_xgb_tu
##### xgb.Booster
raw: 181.3 Kb
call:
xgboost::xgb.train(params = list(eta = param$eta, max_depth = param$max_depth,
gamma = param$gamma, colsample_bytree = param$colsample_bytree,
min_child_weight = param$min_child_weight, subsample = param$subsample),
data = x, nrounds = param$nrounds, verbose = FALSE, objective = "reg:squarederror")
params (as set within xgb.train):
eta = "0.3", max_depth = "6", gamma = "0", colsample_bytree = "1", min_child_weight = "1", subsample = "1", objective = "reg:squarederror", validate_parameters = "TRUE"
xgb.attributes:
niter
# of features: 120
niter: 100
nfeatures : 120
xNames : akita alaskan_malamute american_staffordshire_terrier australian_cattle_dog australian_kelpie australian_koolie australian_shepherd australian_silky_terrier australian_terrier beagle belgian_shepherd bichon_frise border_collie boston_terrier boxer british_bulldog bull_arab bull_terrier bullmastiff cairn_terrier cavalier_king_charles_spaniel chihuahua cocker_spaniel curly_coated_retriever dachshund dalmatian dobermann dogue_de_bordeaux fox_terrier french_bulldog german_shepherd golden_retriever great_dane hungarian_vizsla irish_wolfhound jack_russell_terrier japanese_spitz keeshond king_charles_spaniel labrador_retriever lhasa_apso maltese maremma_sheepdog mastiff papillon pomeranian poodle poodle_toy pug rhodesian_ridgeback rottweiler samoyed schnauzer shar_pei shiba_inu shih_tzu siberian_husky staffordshire_bull_terrier tenterfield_terrier tibetan_spaniel tibetan_terrier welsh_corgi west_highland_white_terrier whippet yorkshire_terrier airedale_terrier bearded_collie english_springer_spaniel english_toy_terrier german_shorthaired_pointer greyhound irish_setter italian_greyhound old_english_sheepdog pekingese rough_collie shetland_sheepdog welsh_terrier basenji basset_hound bedlington_terrier bernese_mountain_dog border_terrier brittany chinese_crested_dog chow_chow finnish_lapphund german_spitz griffon_bruxellois havanese irish_terrier lowchen neapolitan_mastiff newfoundland poodle_miniature scottish_terrier soft_coated_wheaten_terrier weimaraner poodle_standard portuguese_water_dog chihuahua_smooth_coat fox_terrier_smooth pointer welsh_springer_spaniel lagotto_romagnolo smooth_collie st_bernard stag_hound flat_coated_retriever schipperke schnauzer_miniature english_setter manchester_terrier miniature_pinscher kerry_blue_terrier lakeland_terrier field_spaniel chihuahua_long_coat nova_scotia_duck_tolling_retriever anatolian_shepherd_dog
problemType : Regression
tuneValue :
nrounds max_depth eta gamma colsample_bytree min_child_weight subsample
1 100 6 0.3 0 1 1 1
obsLevels : NA
param :
$verbose
[1] FALSE
Feature importance:
<- xgb.importance(model = m_xgb_tu$finalModel) importance
xgb.plot.importance(importance, top_n = 15)
<- predict(m_xgb_tu, training_x) p_xgb_tu
Correlation:
cor(p_xgb_tu, training_y)
[1] 1
MAE:
::mae(training_y, p_xgb_tu) ModelMetrics
[1] 0.0002829812
RMSE:
::rmse(training_y, p_xgb_tu) ModelMetrics
[1] 0.0003897477
Distro of predicted (red) nd actual (green):
<- caret::train(
m_xgb_tu x = data_x,
y = data_y,
trControl = train_control,
tuneGrid = final_grid,
method = "xgbTree",
verbose = FALSE)
$finalModel m_xgb_tu
##### xgb.Booster
raw: 505.2 Kb
call:
xgboost::xgb.train(params = list(eta = param$eta, max_depth = param$max_depth,
gamma = param$gamma, colsample_bytree = param$colsample_bytree,
min_child_weight = param$min_child_weight, subsample = param$subsample),
data = x, nrounds = param$nrounds, verbose = FALSE, objective = "reg:squarederror")
params (as set within xgb.train):
eta = "0.015", max_depth = "2", gamma = "0.7", colsample_bytree = "0.6", min_child_weight = "3", subsample = "0.5", objective = "reg:squarederror", validate_parameters = "TRUE"
xgb.attributes:
niter
# of features: 120
niter: 600
nfeatures : 120
xNames : akita alaskan_malamute american_staffordshire_terrier australian_cattle_dog australian_kelpie australian_koolie australian_shepherd australian_silky_terrier australian_terrier beagle belgian_shepherd bichon_frise border_collie boston_terrier boxer british_bulldog bull_arab bull_terrier bullmastiff cairn_terrier cavalier_king_charles_spaniel chihuahua cocker_spaniel curly_coated_retriever dachshund dalmatian dobermann dogue_de_bordeaux fox_terrier french_bulldog german_shepherd golden_retriever great_dane hungarian_vizsla irish_wolfhound jack_russell_terrier japanese_spitz keeshond king_charles_spaniel labrador_retriever lhasa_apso maltese maremma_sheepdog mastiff papillon pomeranian poodle poodle_toy pug rhodesian_ridgeback rottweiler samoyed schnauzer shar_pei shiba_inu shih_tzu siberian_husky staffordshire_bull_terrier tenterfield_terrier tibetan_spaniel tibetan_terrier welsh_corgi west_highland_white_terrier whippet yorkshire_terrier airedale_terrier bearded_collie english_springer_spaniel english_toy_terrier german_shorthaired_pointer greyhound irish_setter italian_greyhound old_english_sheepdog pekingese rough_collie shetland_sheepdog welsh_terrier basenji basset_hound bedlington_terrier bernese_mountain_dog border_terrier brittany chinese_crested_dog chow_chow finnish_lapphund german_spitz griffon_bruxellois havanese irish_terrier lowchen neapolitan_mastiff newfoundland poodle_miniature scottish_terrier soft_coated_wheaten_terrier weimaraner poodle_standard portuguese_water_dog chihuahua_smooth_coat fox_terrier_smooth pointer welsh_springer_spaniel lagotto_romagnolo smooth_collie st_bernard stag_hound flat_coated_retriever schipperke schnauzer_miniature english_setter manchester_terrier miniature_pinscher kerry_blue_terrier lakeland_terrier field_spaniel chihuahua_long_coat nova_scotia_duck_tolling_retriever anatolian_shepherd_dog
problemType : Regression
tuneValue :
nrounds eta max_depth gamma colsample_bytree min_child_weight subsample
1 600 0.015 2 0.7 0.6 3 0.5
obsLevels : NA
param :
$verbose
[1] FALSE
Feature importance:
<- xgb.importance(model = m_xgb_tu$finalModel) importance
xgb.plot.importance(importance, top_n = 15)
<- predict(m_xgb_tu, training_x) p_xgb_tu
Correlation:
cor(p_xgb_tu, training_y)
[1] 0.983128
MAE:
::mae(training_y, p_xgb_tu) ModelMetrics
[1] 10.49284
RMSE:
::rmse(training_y, p_xgb_tu) ModelMetrics
[1] 13.42157
Distro of predicted (red) nd actual (green):