How do i optimize multiple objectives (minimizing MSE and maximizing R^2) simultaneously using raytune?

31 views Asked by At

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)

0

There are 0 answers