Introduction

Optuna is an open-source hyperparameter optimization framework that enables efficient and reliable hyperparameter tuning. It significantly improves the efficiency of machine learning models by optimizing hyperparameters, leading to better performance. This article will cover the key features of Optuna, including its installation process, core concepts, practical applications, and best practices.

Overview

Optuna supports a wide range of samplers, flexible trial callback APIs, and parallel execution capabilities. These features make it a versatile tool for tuning hyperparameters across various machine learning frameworks and models. As of the latest version, 3.2.0, Optuna has seen significant improvements in stability and performance. Readers will learn how to use Optuna effectively and understand its key features.

Getting Started

To get started with Optuna, you need to install it using pip or conda. Here’s how you can do it:

pip install optuna

or

conda install -c conda-forge optuna

Let’s go through a quick example to see how Optuna can be used to optimize the hyperparameters of a Random Forest Classifier.

import optuna
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier

def objective(trial):
    n_estimators = trial.suggest_int('n_estimators', 20, 200)
    max_depth = trial.suggest_int('max_depth', 2, 15)
    min_samples_split = trial.suggest_float('min_samples_split', 0.1, 1.0, log=True)
    min_samples_leaf = trial.suggest_float('min_samples_leaf', 0.1, 1.0, log=True)
    return RandomForestClassifier(n_estimators=n_estimators, max_depth=max_depth,
                                  min_samples_split=min_samples_split, min_samples_leaf=min_samples_leaf).fit(
        X_train, y_train).score(X_valid, y_valid)

X, y = load_breast_cancer(return_X_y=True)
X_train, X_valid, y_train, y_valid = train_test_split(X, y, test_size=0.25, random_state=42)
sampler = optuna.samplers.TPESampler(seed=42)
study = optuna.create_study(sampler=sampler)
study.optimize(objective, n_trials=100)

In this example, we define an objective function that suggests hyperparameters within specified ranges. We then create a study with a TPE sampler and optimize it over 100 trials.

Core Concepts

Optuna uses evolutionary algorithms to search for the best hyperparameters, making it highly effective for complex models. The main components of Optuna are objectives, samplers, and studies. Here’s how to define them:

from optuna import create_study
from optuna.samplers import TPESampler

sampler = TPESampler(seed=42)  # To make the results reproducible
study = create_study(sampler=sampler)

In this example, we create a study with a TPE sampler set to a specific seed for reproducibility.

Practical Examples

Example 1: Hyperparameter Tuning for a Random Forest Classifier

Let’s expand on the previous example to include a more detailed objective function and data handling.

import optuna
import numpy as np
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier

def objective(trial):
    n_estimators = trial.suggest_int('n_estimators', 20, 200)
    max_depth = trial.suggest_int('max_depth', 2, 15)
    min_samples_split = trial.suggest_float('min_samples_split', 0.1, 1.0, log=True)
    min_samples_leaf = trial.suggest_float('min_samples_leaf', 0.1, 1.0, log=True)
    return RandomForestClassifier(n_estimators=n_estimators, max_depth=max_depth,
                                  min_samples_split=min_samples_split, min_samples_leaf=min_samples_leaf).fit(
        X_train, y_train).score(X_valid, y_valid)

X, y = load_breast_cancer(return_X_y=True)
X_train, X_valid, y_train, y_valid = train_test_split(X, y, test_size=0.25, random_state=42)
sampler = optuna.samplers.TPESampler(seed=42)
study = optuna.create_study(sampler=sampler)
study.optimize(objective, n_trials=100)

Example 2: Hyperparameter Tuning for a Neural Network Model

Next, let’s look at how to use Optuna for hyperparameter tuning in a neural network model.

import optuna
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
from sklearn.neural_network import MLPClassifier

def objective(trial):
    hidden_layer_sizes = trial.suggest_int('hidden_layer_sizes', 1, 5) * 100
    alpha = trial.suggest_loguniform('alpha', 1e-5, 1e-1)
    return MLPClassifier(hidden_layer_sizes=hidden_layer_sizes, alpha=alpha).fit(
        X_train, y_train).score(X_valid, y_valid)

X, y = make_classification(n_samples=1000, n_features=20, random_state=42)
X_train, X_valid, y_train, y_valid = train_test_split(X, y, test_size=0.25, random_state=42)
sampler = optuna.samplers.TPESampler(seed=42)
study = optuna.create_study(sampler=sampler)
study.optimize(objective, n_trials=100)

Conclusion

Optuna is a powerful tool for hyperparameter tuning, and it is essential for improving model performance. By following the guidelines and best practices outlined in this article, you can effectively use Optuna in your machine learning projects. For more detailed information and advanced tutorials, explore the official documentation, GitHub repository, and example notebooks.

Resources


Powered by Jekyll & Minimal Mistakes.

About this article. This article was generated by the Best-of-the-Best autonomous AI digest and reviewed by Ruslan Magana Vsevolodovna. Package metadata was last checked on 24 August 2026. See the data leaderboard and the GitHub repository for sources.