Train the GBT#
For the gradient boosted trees model (GBT), the formatting of the training and evaluating dataset change a little, instead of provide numpy arrays, you should pass dictionnaries:
def run_gbt():
(train_inputs, train_targets, train_timestamps), (test_inputs, test_targets, test_timestamps) = split_data()
# creating datasets for training and testing
train_dataset = tf.data.Dataset.from_tensor_slices(
(
{name: train_inputs[:, i] for i, name in enumerate(INPUTS_VAR)},
train_targets[:, 0],
),
).batch(250)
test_dataset = tf.data.Dataset.from_tensor_slices(
(
{name: test_inputs[:, i] for i, name in enumerate(INPUTS_VAR)},
test_targets[:, 0],
),
).batch(250)
Moreover, you can automatically adjust the hyperparameters by passing a tuner to the model generator:
# creating a gradient boosted model
tuner = tfdf.tuner.RandomSearch(num_trials=250, use_predefined_hps=True)
model_set = nn.ModelSet(
nb_models=1,
model_generator=nn.gbt_model,
tuner=tuner,
)
The following steps are identical to these with an ANN:
model_set.fit(train_dataset)
model_set.evaluate(test_dataset)
prediction = np.median(model_set(test_dataset)[:, 0], axis=0)
utils.write_output(prediction, column=TARGETS_VAR)