-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathlgb Mbo.R
66 lines (58 loc) · 1.99 KB
/
lgb Mbo.R
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
library(mlrMBO)
library(rBayesianOptimization)
int.seed = 1235
dtrain = lgb.Dataset(data.matrix(df_train), label = label, free_raw_data = F)
obj.fun = smoof::makeSingleObjectiveFunction(
name = "lgb_cv_log",
fn = function(x){
set.seed(int.seed)
cv = lgb.cv(
params = list(
objective = "regression",
boost = "gbdt",
metric = "rmse",
boost_from_average = "false",
num_leaves = x["num_leaves"],
max_depth = x["max_depth"],
# tree_learner = "serial",
feature_fraction = x["feature_fraction"],
bagging_freq = x["bagging_freq"],
bagging_fraction = x["bagging_fraction"],
#min_data_in_leaf = x["min_data_in_leaf"],
#numclass = 4,
#min_sum_hessian_in_leaf = x["min_sum_hessian_in_leaf"],
verbose = 1,
learning_rate = x["learning_rate"]
),
data = dtrain,
nrounds = 3000,
folds = folds,
#nfold = 5,
# prediction = F,
eval_freq = 1000,
showsd = T,
num_thread = 8,
early_stopping_rounds = 100)
cv$best_score
},
par.set = makeParamSet(
makeDiscreteParam("learning_rate", 0.01),
makeDiscreteParam("max_depth", -1),
makeIntegerParam("num_leaves", lower = 5, upper = 20L),
#makeIntegerParam("min_sum_hessian_in_leaf", lower = 5, upper = 10L),
#makeIntegerParam("min_data_in_leaf", lower = 50,upper = 100L),
makeIntegerParam("bagging_freq", lower = 1, upper = 5L),
makeNumericParam("bagging_fraction", lower = 0.7, upper = 0.9),
makeNumericParam("feature_fraction", lower = 0.4, upper = 0.9)
),
minimize = TRUE
)
des = generateDesign(n = 10, par.set = getParamSet(obj.fun),
fun = lhs::randomLHS)
ctrl = makeMBOControl()
ctrl = setMBOControlTermination(ctrl, iters = 10L)
print("Runing Bayesioan OPtimization on LightGBM")
run = mbo(fun = obj.fun,
design = des,
control = ctrl,
show.info = T)