質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
scikit-learn

scikit-learnは、Pythonで使用できるオープンソースプロジェクトの機械学習用ライブラリです。多くの機械学習アルゴリズムが実装されていますが、どのアルゴリズムも同じような書き方で利用できます。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

0回答

3410閲覧

OptunaでGPR(gaussian process regression)のkernelの組み合わせ探索とハイパーパラメータ調整方法

chercher

総合スコア7

scikit-learn

scikit-learnは、Pythonで使用できるオープンソースプロジェクトの機械学習用ライブラリです。多くの機械学習アルゴリズムが実装されていますが、どのアルゴリズムも同じような書き方で利用できます。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2020/05/20 05:42

編集2020/05/20 05:45

実現したいこと、質問内容

OptunaでGPR(gaussian process regression)のkernelの最適な組み合わせ、
ハイパーパラメータの最適化を実施しています。

・実現したいこと
以下①②をOptunaで探索したいと考えています。
①kernelは3種の組み合わせでどれがよいか。

ConstantKernel() * RBF() + WhiteKernel(), ConstantKernel() * Matern() + WhiteKernel(), ConstantKernel() * Matern() + WhiteKernel() + DotProduct()

②選択されたkernelの組み合わせのパラメータ調整
例えば、選択されたkernelの組み合わせが
ConstantKernel() * Matern() + WhiteKernel()
だった場合Matern()のパラメータであるnuを0.5~2.5の範囲で0.1刻みで探索

・質問内容
②については、nu = trial.suggest_discrete_uniform('nu', 0.5, 2.5, 0.1)
のように探索できるとは思うのですが、
trial.suggest_categorical('kernel', kernelのリスト)で探索しようとすると、
kernelが選択された段階でdefaultのパラメータが設定され、②が実行できません。

①および②の実装方法についてご教授ください。

発生している問題・エラーメッセージ

エラーではないですがwarning

UserWarning: Choices for a categorical distribution should be a tuple of None, bool, int, float and str for persistent storage but contains 1**2 * RBF(length_scale=1) + WhiteKernel(noise_level=1) which is of type Sum. warnings.warn(message) [W 2020-05-20 14:03:22,122] Choices for a categorical distribution should be a tuple of None, bool, int, float and str for persistent storage but contains 1**2 * RBF(length_scale=1) + WhiteKernel(noise_level=1) which is of type Sum.

該当のソースコード

from sklearn.datasets import load_boston from sklearn.preprocessing import StandardScaler from sklearn.model_selection import train_test_split from sklearn.gaussian_process import GaussianProcessRegressor from sklearn.gaussian_process.kernels import DotProduct, WhiteKernel, ConstantKernel, RBF, Matern, RationalQuadratic from sklearn.metrics import mean_absolute_error import optuna def objective(trial): boston = load_boston() X_array = boston.data y_array = boston.target X_train, X_test, y_train, y_test = train_test_split(X_array, y_array, test_size=0.2, random_state=0) scaler = StandardScaler() X_train_scaler = scaler.fit_transform(X_train) X_test_scaler = scaler.transform(X_test) kernels = [ConstantKernel() * RBF() + WhiteKernel(), ConstantKernel() * Matern() + WhiteKernel(), ConstantKernel() * Matern() + WhiteKernel() + DotProduct()] kernel = trial.suggest_categorical('kernel', kernels) gpr = GaussianProcessRegressor(kernel=kernel).fit(X_train_scaler, y_train) y_pred = gpr.predict(X_test_scaler) mae = mean_absolute_error(y_test, y_pred) return mae study = optuna.create_study(direction='minimize') study.optimize(objective, n_trials=10)

補足情報(FW/ツールのバージョンなど)

python3.7

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問