ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

ベイズ最適化のワークフロー

ベイズ最適化とは

最も一般的な形式の最適化とは、"目的関数" と呼ばれる実数値関数を最小化する点を見つけるプロセスです。ベイズ最適化は、このようなプロセスの 1 つの名前です。ベイズ最適化では、目的関数のガウス過程モデルを内部に保持し、目的関数の評価を使用してモデルに学習をさせます。ベイズ最適化の新機軸の 1 つは "獲得関数" の使用で、これによりアルゴリズムは次の評価点を決定します。獲得関数により、モデル化が十分ではない目的関数がある点における抽出と、まだ十分にはモデル化されていない領域の探索のバランスをとることができます。詳細は、ベイズ最適化のアルゴリズムを参照してください。

ベイズ最適化は、分類および回帰アルゴリズムの "ハイパーパラメーター" の最適化に非常に適していることから、Statistics and Machine Learning Toolbox™ の一部となっています。ハイパーパラメーターは、サポート ベクター マシンのボックス制約やロバスト アンサンブル分類の学習率などと同じく、分類器または回帰関数の内部パラメーターです。これらのパラメーターは分類器または回帰変数の性能に大きく影響を与えますが、概して最適化には困難または多大な時間が伴います。ベイズ最適化の特徴を参照してください。

通常、ハイパーパラメーターの最適化とは、分類器または回帰の交差検証損失を最小化しようとすることを意味します。

ベイズ最適化実行の 2 手法

ベイズ最適化は 2 つの異なる方法により実行可能です。

  • 近似関数 — 近似関数の多くは、名前と値のペア OptimizeHyperparameters を含めることによりベイズ最適化を自動的に適用させられます。最適化では交差検証損失は最小になります。この方法では、調整オプションは少なくなりますが、ベイズ最適化を最も簡単に実行できます。近似関数を使用したベイズ最適化を参照してください。

  • bayesoptbayesopt を直接呼び出すことにより最適化を最大限制御できます。この方法では、目的関数を記述する必要があります。目的関数は必ずしも交差検証損失を表す必要はありません。bayesopt を使用したベイズ最適化を参照してください。

近似関数を使用したベイズ最適化

以下の手順に従い、ベイズ最適化による交差検証応答の誤差を最小化します。

  1. 分類ソルバーまたは回帰ソルバーを fitcdiscrfitcecocfitcensemblefitckernelfitcknnfitclinearfitcnbfitcsvmfitctreefitrensemblefitrgpfitrkernelfitrlinearfitrsvm または fitrtree から選択します。

  2. 最適化するハイパーパラメーターを決定し、名前と値のペア OptimizeHyperparameters で渡します。各近似関数について、一連のハイパーパラメーターから選択できます。各種近似関数で適格とされるハイパーパラメーターを参照するか、関数 hyperparameters を使用するか、近似関数のリファレンス ページを参照してください。

    パラメーター名の cell 配列を渡すことができます。また、OptimizeHyperparameters の値として 'auto' を設定して一般的な最適化対象ハイパーパラメーターを一揃い選択することも、'all' を設定して使用可能なパラメーターをすべて最適化することもできます。

  3. アンサンブル近似関数 fitcecocfitcensemble および fitrensemble の場合は、弱学習器のパラメーターも cell 配列 OptimizeHyperparameters に含めます。

  4. オプションとして、名前と値のペア HyperparameterOptimizationOptions のオプション構造体を作成します。近似関数のハイパーパラメーター最適化オプションを参照してください。

  5. 適切な名前と値のペアを使用して近似関数を呼び出します。

例については、ベイズ最適化の使用による SVM 分類器のあてはめの最適化ブースティングされたアンサンブル回帰の最適化を参照してください。また、すべての近似関数のリファレンス ページにはベイズ最適化の例が含まれています。

bayesopt を使用したベイズ最適化

以下の手順に従い、bayesopt を用したベイズ最適化を実行します。

  1. 変数を準備します。ベイズ最適化用の変数を参照してください。

  2. 目的関数を作成します。ベイズ最適化の目的関数を参照してください。必要に応じて制約も作成します。ベイズ最適化の制約を参照してください。

  3. オプション、つまり bayseoptName,Value ペアを決定します。bayesopt にオプションを渡すことは必須ではありませんが、(解を改善しようとする場合は特に) 渡すことが一般的です。

  4. bayesopt を呼び出します。

  5. 解を調べます。resume を使用して最適化を再開するか、(通常はオプションを修正して) 最適化をやり直すことができます。

例については、bayesopt を使用した交差検証済み SVM 分類器の最適化を参照してください。

ベイズ最適化の特徴

ベイズ最適化アルゴリズムは、次のようなタイプの問題に最適です。

特徴詳細
低次元

ベイズ最適化は次元数が少ない場合 (通常は 10 以下) に最適に機能します。変数が数十個ある問題をベイズ最適化で解くことができる場合もありますが、約 50 以上の次元には推奨されません。

計算負荷が高い目的関数

ベイズ最適化は、評価に時間がかかる目的関数用に設計されています。相当な量のオーバーヘッド (通常は各反復について数秒) があります。

低精度

ベイズ最適化では、結果が必ずしも非常に正確であるとは限りません。目的関数が確定的である場合、標準的な最適化アルゴリズムを bayesopt ソリューションから開始することにより、精度が向上する可能性があります。

大域解

ベイズ最適化は大域的な手法です。他の多くのアルゴリズムとは異なり、さまざまな初期点からアルゴリズムを開始しなくても大域解を求めることができます。

ハイパーパラメーター

ベイズ最適化は、別の関数の "ハイパーパラメーター" の最適化に非常に適しています。ハイパーパラメーターは関数の動作を制御するパラメーターです。たとえば、関数 fitcsvm は SVM モデルをデータにあてはめます。これは、その 'rbf' KernelFunctionBoxConstraint および KernelScale というハイパーパラメーターをもちます。ハイパーパラメーターに適用されるベイズ最適化の例については、bayesopt を使用した交差検証済み SVM 分類器の最適化を参照してください。

近似関数で使用可能なパラメーター

各種近似関数で適格とされるハイパーパラメーター

関数名適格なハイパーパラメーター
fitcdiscrDelta
Gamma
DiscrimType
fitcecocCoding
'Learners','Discriminant'の場合に使用可能な fitcdiscr のパラメーター
'Learners','knn' に適格な fitcknn のパラメーター
'Learners','linear' に適格な fitclinear のパラメーター
'Learners','svm' に適格な fitcsvm のパラメーター
'Learners','tree' に適格な fitctree のパラメーター
fitcensembleMethod
NumLearningCycles
LearnRate
'Learners','Discriminant' に適格な fitcdiscr のパラメーター
'Learners','knn' に適格な fitcknn のパラメーター
'Learners','tree' に適格な fitctree のパラメーター
fitckernel'Learner'
'KernelScale'
'Lambda'
'NumExpansionDimensions'
fitcknnNumNeighbors
Distance
DistanceWeight
Exponent
Standardize
fitclinearLambda
Learner
Regularization
fitcnbDistributionNames
Width
Kernel
fitcsvmBoxConstraint
KernelScale
KernelFunction
PolynomialOrder
Standardize
fitctreeMinLeafSize
MaxNumSplits
SplitCriterion
NumVariablesToSample
fitrensembleMethod
NumLearningCycles
LearnRate
'Learners','tree' に適格な fitrtree のパラメーター
MinLeafSize
MaxNumSplits
NumVariablesToSample
fitrgpSigma
BasisFunction
KernelFunction
KernelScale
Standardize
fitrkernelLearner
KernelScale
Lambda
NumExpansionDimensions
Epsilon
fitrlinearLambda
Learner
Regularization
fitrsvmBoxConstraint
KernelScale
Epsilon
KernelFunction
PolynomialOrder
Standardize
fitrtreeMinLeafSize
MaxNumSplits
NumVariablesToSample

近似関数のハイパーパラメーター最適化オプション

近似関数を使用して最適化を行う場合、以下のオプションを名前と値のペア HyperparameterOptimizationOptions で使用できます。値は構造体として与えます。この構造体のフィールドは、すべてオプションです。

フィールド名既定の設定
Optimizer
  • 'bayesopt' — ベイズ最適化を使用。内部的には bayesopt が呼び出されます。

  • 'gridsearch' — 次元ごとに NumGridDivisions の値があるグリッド探索を使用。

  • 'randomsearch'MaxObjectiveEvaluations 個の点で無作為に探索。

'gridsearch' では、グリッドからの一様な非復元抽出により、無作為な順序で探索します。最適化後、sortrows(Mdl.HyperparameterOptimizationResults) コマンドを使用してグリッド順のテーブルを取得できます。

'bayesopt'
AcquisitionFunctionName

  • 'expected-improvement-per-second-plus'

  • 'expected-improvement'

  • 'expected-improvement-plus'

  • 'expected-improvement-per-second'

  • 'lower-confidence-bound'

  • 'probability-of-improvement'

詳細については、bayesopt の名前と値のペアの引数 AcquisitionFunctionName または獲得関数のタイプを参照してください。

'expected-improvement-per-second-plus'
MaxObjectiveEvaluations目的関数評価の最大数。'bayesopt' または 'randomsearch' の場合は 30'gridsearch' の場合はグリッド全体
MaxTime

制限時間。正の実数を指定します。制限時間の単位は、tictoc によって測定される秒です。MaxTime は関数評価を中断させないため、実行時間が MaxTime を超える可能性があります。

Inf
NumGridDivisions'gridsearch' における各次元の値の個数。値は、各次元の値の個数を表す正の整数のベクトル、またはすべての次元に適用されるスカラーが可能です。カテゴリカル変数の場合、このフィールドは無視されます。10
ShowPlotsプロットを表示するかどうかを示す論理値。true の場合、最良の目的関数の値が反復回数に対してプロットされます。1 つまたは 2 つの最適化パラメーターがあり、Optimizer'bayesopt' である場合、ShowPlots はパラメーターに対する目的関数のモデルのプロットも行います。true
SaveIntermediateResultsOptimizer'bayesopt' である場合に結果を保存するかどうかを示す論理値。true の場合、'BayesoptResults' という名前のワークスペース変数が反復ごとに上書きされます。この変数は BayesianOptimization オブジェクトです。false
Verbose

コマンド ラインへの表示。

  • 0 — 反復表示なし

  • 1 — 反復表示あり

  • 2 — 追加情報付きで反復表示あり

詳細については、bayesopt の名前と値のペアの引数 Verbose を参照してください。

1
UseParallelベイズ最適化を並列実行するかどうかを示す論理値。並列実行には Parallel Computing Toolbox™ が必要です。詳細については、並列ベイズ最適化を参照してください。false
Repartition

反復ごとに交差検証を再分割するかどうかを示す論理値。false の場合、オプティマイザーは単一の分割を最適化に使用します。

分割ノイズが考慮されるので、通常は true にすると最も確実な結果が得られます。ただし、true で良好な結果を得るには、2 倍以上の関数評価が必要になります。

false
以下の 3 つのフィールド名は 1 つだけ使用できます。
CVPartitioncvpartition によって作成される cvpartition オブジェクト。交差検証フィールドが指定されていない場合 'Kfold',5
Holdoutホールドアウトの比率を表す範囲 (0,1) のスカラー。
Kfold1 より大きい整数。