I am trying to optimize my MSE_test to be min and R^2 to be highest but having trouble trying to figure out how to do both at the same time.
This code i have right now that only optimizes MSE_test
def main():
# Define the hyperparameter search space
config = {
"lr": tune.loguniform(0.0001, 0.1),
"epochs": tune.randint(70, 100)
}
analysis = tune.run(
tune.with_parameters(train_model, X_train=X_train_normalized, Y_train=Y_train, X_test=X_test_normalized, Y_test=Y_test),
config=config,
num_samples=15, # adjust this based on your resources
metric="mse_test", # Optimize for lower MSE on the test set
mode="min",
progress_reporter=CLIReporter(metric_columns=["mse_train", "r2_train", "mse_test", "r2_test"])
)
best_config = analysis.get_best_config(metric="mse_test", mode="min")
print("Best hyperparameters:", best_config)
if __name__ == "__main__":
main()
I did this, but it does the job seperetly and gives me two different values that i am trying to optimize.
# Optimize for mse_test
mse_analysis = tune.run(
tune.with_parameters(train_model, X_train=X_train_normalized, Y_train=Y_train, X_test=X_test_normalized, Y_test=Y_test),
config=config,
num_samples=10,
metric="mse_test",
mode="min",
progress_reporter=CLIReporter(metric_columns=["mse_train", "r2_train", "mse_test", "r2_test"])
)
# Optimize for r2_test
r2_analysis = tune.run(
tune.with_parameters(train_model, X_train=X_train_normalized, Y_train=Y_train, X_test=X_test_normalized, Y_test=Y_test),
config=config,
num_samples=10,
metric="r2_test",
mode="max",
progress_reporter=CLIReporter(metric_columns=["mse_train", "r2_train", "mse_test", "r2_test"])
)
# Retrieve best configurations
best_config_mse = mse_analysis.get_best_config(metric="mse_test", mode="min")
best_config_r2 = r2_analysis.get_best_config(metric="r2_test", mode="max")
print("Best hyperparameters for mse_test:", best_config_mse)
print("Best hyperparameters for r2_test:", best_config_r2)