1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

[備忘録] Optunaの探索結果をUMAPで可視化する

1
Posted at

ハイパパラメータが3つ以上存在する場合,探索結果の可視化はなかなか難しいです.
今回はUMAPを利用して探索結果の可視化を行います.

import matplotlib.pyplot as plt

import numpy as np

import optuna

import umap


DIM = 6
SEED = 42
N_SAMPLES = 1000
N_GRID = 50
LB, UB = -5, 5


def func(X: np.ndarray) -> np.ndarray:
    return np.sum(X ** 2, axis=-1)


def objective(trial: optuna.Trial) -> float:
    X = np.asarray([trial.suggest_float(f"x{d}", LB, UB) for d in range(DIM)])
    return func(X)


def get_mapper():
    rng = np.random.RandomState(SEED)
    S = rng.random((N_SAMPLES, DIM)) * (UB - LB) + LB
    mapper = umap.UMAP(random_state=SEED).fit(S)

    S_trans = mapper.transform(S)
    x_bound = np.min(S_trans[:, 0]), np.max(S_trans[:, 0])
    y_bound = np.min(S_trans[:, 1]), np.max(S_trans[:, 1])
    return mapper, x_bound, y_bound


def plot_contour(fig, ax, mapper, x_bound, y_bound):
    X, Y = np.meshgrid(np.linspace(x_bound, N_GRID), np.linspace(y_bound, N_GRID))
    S_grid = np.stack([X.flatten(), Y.flatten()], axis=-1)
    F = func(mapper.inverse_transform(S_grid))

    level = np.linspace(0, 25 * DIM, N_GRID)
    cb = ax.contourf(X, Y, F.reshape(X.shape), level)
    fig.colorbar(cb)


study = optuna.create_study()
study.optimize(objective, n_trials=100)

mapper, x_bound, y_bound = get_mapper()
X = np.asarray([[t.params[f"x{d}"] for d in range(DIM)] for t in study.trials])
X_trans = mapper.transform(X)

fig, ax = plt.subplots()
plot_contour(fig, ax, mapper, x_bound, y_bound)
ax.scatter(X_trans[:, 0], X_trans[:, 1], color="red", s=1)
plt.show()

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?