Giter VIP home page Giter VIP logo

optuna-fast-fanova's Introduction

Optuna: A hyperparameter optimization framework

Python pypi conda GitHub license Read the Docs Codecov

๐Ÿ”— Website | ๐Ÿ“ƒ Docs | โš™๏ธ Install Guide | ๐Ÿ“ Tutorial | ๐Ÿ’ก Examples

Optuna is an automatic hyperparameter optimization software framework, particularly designed for machine learning. It features an imperative, define-by-run style user API. Thanks to our define-by-run API, the code written with Optuna enjoys high modularity, and the user of Optuna can dynamically construct the search spaces for the hyperparameters.

๐Ÿ”ฅ Key Features

Optuna has modern functionalities as follows:

Basic Concepts

We use the terms study and trial as follows:

  • Study: optimization based on an objective function
  • Trial: a single execution of the objective function

Please refer to the sample code below. The goal of a study is to find out the optimal set of hyperparameter values (e.g., regressor and svr_c) through multiple trials (e.g., n_trials=100). Optuna is a framework designed for automation and acceleration of optimization studies.

Sample code with scikit-learn

Open in Colab

import ...

# Define an objective function to be minimized.
def objective(trial):

    # Invoke suggest methods of a Trial object to generate hyperparameters.
    regressor_name = trial.suggest_categorical('regressor', ['SVR', 'RandomForest'])
    if regressor_name == 'SVR':
        svr_c = trial.suggest_float('svr_c', 1e-10, 1e10, log=True)
        regressor_obj = sklearn.svm.SVR(C=svr_c)
    else:
        rf_max_depth = trial.suggest_int('rf_max_depth', 2, 32)
        regressor_obj = sklearn.ensemble.RandomForestRegressor(max_depth=rf_max_depth)

    X, y = sklearn.datasets.fetch_california_housing(return_X_y=True)
    X_train, X_val, y_train, y_val = sklearn.model_selection.train_test_split(X, y, random_state=0)

    regressor_obj.fit(X_train, y_train)
    y_pred = regressor_obj.predict(X_val)

    error = sklearn.metrics.mean_squared_error(y_val, y_pred)

    return error  # An objective value linked with the Trial object.

study = optuna.create_study()  # Create a new study.
study.optimize(objective, n_trials=100)  # Invoke optimization of the objective function.

Note

More examples can be found in optuna/optuna-examples.

The examples cover diverse problem setups such as multi-objective optimization, constrained optimization, pruning, and distributed optimization.

Installation

Optuna is available at the Python Package Index and on Anaconda Cloud.

# PyPI
$ pip install optuna
# Anaconda Cloud
$ conda install -c conda-forge optuna

Important

Optuna supports Python 3.7 or newer.

Also, we provide Optuna docker images on DockerHub.

Integrations

Optuna has integration features with various third-party libraries. Integrations can be found in optuna/optuna-integration and the document is available here.

Supported integration libraries

Web Dashboard

Optuna Dashboard is a real-time web dashboard for Optuna. You can check the optimization history, hyperparameter importance, etc. in graphs and tables. You don't need to create a Python script to call Optuna's visualization functions. Feature requests and bug reports are welcome!

optuna-dashboard

optuna-dashboard can be installed via pip:

$ pip install optuna-dashboard

Tip

Please check out the convenience of Optuna Dashboard using the sample code below.

Sample code to launch Optuna Dashboard

Save the following code as optimize_toy.py.

import optuna


def objective(trial):
    x1 = trial.suggest_float("x1", -100, 100)
    x2 = trial.suggest_float("x2", -100, 100)
    return x1 ** 2 + 0.01 * x2 ** 2


study = optuna.create_study(storage="sqlite:///db.sqlite3")  # Create a new study with database.
study.optimize(objective, n_trials=100)

Then try the commands below:

# Run the study specified above
$ python optimize_toy.py

# Launch the dashboard based on the storage `sqlite:///db.sqlite3`
$ optuna-dashboard sqlite:///db.sqlite3
...
Listening on http://localhost:8080/
Hit Ctrl-C to quit.

Communication

Contribution

Any contributions to Optuna are more than welcome!

If you are new to Optuna, please check the good first issues. They are relatively simple, well-defined, and often good starting points for you to get familiar with the contribution workflow and other developers.

If you already have contributed to Optuna, we recommend the other contribution-welcome issues.

For general guidelines on how to contribute to the project, take a look at CONTRIBUTING.md.

Reference

If you use Optuna in one of your research projects, please cite our KDD paper "Optuna: A Next-generation Hyperparameter Optimization Framework":

BibTeX
@inproceedings{akiba2019optuna,
  title={{O}ptuna: A Next-Generation Hyperparameter Optimization Framework},
  author={Akiba, Takuya and Sano, Shotaro and Yanase, Toshihiko and Ohta, Takeru and Koyama, Masanori},
  booktitle={The 25th ACM SIGKDD International Conference on Knowledge Discovery \& Data Mining},
  pages={2623--2631},
  year={2019}
}

optuna-fast-fanova's People

Contributors

c-bata avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

optuna-fast-fanova's Issues

Tests with Python 3.12

Motivation

Python 3.12 is available, but optuna-fast-fanova has not yet been tested with it in CI.

Description

We should add 3.12 to the python-version matrix in the CI configuration.

python-version: ['3.7', '3.8', '3.9', '3.10', '3.11']

Additionally, if the CI fails with Python 3.12, we may need to update the codebase to resolve compatibility issues.

`FanovaImportanceEvaluator` mutates `study.trials[-1].distributions` when a parameter has dynamic range

Hello,
Thank you for your great work!

I ran into an issue with using FanovaImportanceEvaluator. For some reason, it changes the last trial of a study when the search space of a parameter depends on another parameter. See the code snippet below:

import optuna
from optuna_fast_fanova import FanovaImportanceEvaluator
optuna.logging.set_verbosity(optuna.logging.WARNING)

def test_objective(trial):
    x = trial.suggest_float('x', 1, 4)
    y = trial.suggest_float('y', x, 5)
    return x**2 + y**2
    

test_study = optuna.create_study(study_name="Test", direction='minimize')
test_study.optimize(test_objective, n_trials=100, show_progress_bar=True)

importances = optuna.importance.get_param_importances(test_study, evaluator=FanovaImportanceEvaluator())
for trial in test_study.trials:
    if trial.distributions.keys() != trial.params.keys():
        print(trial)

The output:

FrozenTrial(number=99, state=TrialState.COMPLETE, values=[3.7186055946265806], 
datetime_start=datetime.datetime(2024, 2, 22, 18, 43, 50, 977310), 
datetime_complete=datetime.datetime(2024, 2, 22, 18, 43, 50, 981316), 
params={'x': 1.3032071826948155, 'y': 1.4213573208729824}, user_attrs={}, system_attrs={}, intermediate_values={}, 
distributions={'x': FloatDistribution(high=4.0, log=False, low=1.0, step=None)}, trial_id=99, value=None)

P.S. Usage of the default evaluator evaluator=None does not give this issue.

import optuna_fast_fanova error in googl colab

I am not sure if I install the package correctly.
I installed optuna-fast-fanova in google colab.
When I imported FanovaImportanceEvaluator,
there was an error message as below.


Environment: Google Colab (CPU).

Code:

!pip install optuna-fast-fanova


import optuna
from optuna_fast_fanova import FanovaImportanceEvaluator

def objective(trial):
x = trial.suggest_float("x", -10, 10)
y = trial.suggest_int("y", -10, 10)
return x ** 2 + y

if name == "main":
study = optuna.create_study()
study.optimize(objective, n_trials=1000)
importance = optuna.importance.get_param_importances(
study, evaluator=FanovaImportanceEvaluator()
)
print(importance)


Error message

/usr/lib/python3.7/importlib/_bootstrap.py:219: RuntimeWarning: sklearn.tree._criterion.Criterion size changed, may indicate binary incompatibility. Expected 328 from C header, got 352 from PyObject
return f(*args, **kwds)

ValueError Traceback (most recent call last)
in ()
1 import optuna
----> 2 from optuna_fast_fanova import FanovaImportanceEvaluator
3
4
5 def objective(trial):

2 frames
/usr/local/lib/python3.7/dist-packages/optuna_fast_fanova/init.py in ()
----> 1 from optuna_fast_fanova._evaluator import FanovaImportanceEvaluator # NOQA
2
3
4 version = "0.0.2"

/usr/local/lib/python3.7/dist-packages/optuna_fast_fanova/_evaluator.py in ()
18 from sklearn.ensemble import RandomForestRegressor
19
---> 20 from optuna_fast_fanova._fanova import FanovaTree
21
22

/usr/local/lib/python3.7/dist-packages/optuna_fast_fanova/_fanova.pyx in init optuna_fast_fanova._fanova()

ValueError: sklearn.tree._criterion.ClassificationCriterion size changed, may indicate binary incompatibility. Expected 1168 from C header, got 368 from PyObject

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.