Main Content

BayesianOptimization

ベイズ最適化の結果

説明

BayesianOptimization オブジェクトには、ベイズ最適化の結果が格納されます。これは、bayesopt、または fitcdiscr のような名前と値のペア OptimizeHyperparameters を受け入れる近似関数の出力です。さらに、プロット関数または出力関数でアクセスできる bayesopt の各反復のデータも BayesianOptimization オブジェクトに格納されます。

作成

BayesianOptimization オブジェクトを作成するには、関数 bayesopt を使用するか、名前と値の引数 OptimizeHyperparameters を指定して次のいずれかの近似関数を使用します。

プロパティ

すべて展開する

問題定義のプロパティ

この プロパティ は読み取り専用です。

bayesopt で使用した引数 ObjectiveFcn。関数ハンドルとして指定されます。

  • bayesopt を直接呼び出した場合、ObjectiveFcnbayesopt の目的関数引数です。

  • 名前と値のペアの引数 'OptimizeHyperparameters' が含まれる近似関数を呼び出す場合、ObjectiveFcn は、分類の場合は誤分類率を返す関数のハンドル、回帰の場合は 5 分割交差検証で測定した交差検証損失に 1 を加算した値の対数を返す関数のハンドルです。

データ型: function_handle

この プロパティ は読み取り専用です。

bayesopt で使用した引数 VariableDescriptionsoptimizableVariable オブジェクトのベクトルとして指定されます。

  • bayesopt を直接呼び出した場合、VariableDescriptionsbayesopt の変数説明引数になります。

  • 名前と値のペア OptimizeHyperparameters を使用して近似関数を呼び出した場合、VariableDescriptions はハイパーパラメーターのベクトルになります。

この プロパティ は読み取り専用です。

bayesopt で使用したオプション。構造体として指定されます。

  • bayesopt を直接呼び出した場合、Optionsbayesopt で使用したオプション (名前と値のペア) になります。bayesopt入力引数を参照してください。

  • 名前と値のペア OptimizeHyperparameters を使用して近似関数を呼び出した場合、Options は既定の bayesopt オプションを名前と値のペア HyperparameterOptimizationOptions で修正したものになります。

Options は、以下のフィールドが含まれている読み取り専用の構造体です。

オプション名意味
AcquisitionFunctionName獲得関数名。獲得関数のタイプを参照してください。
IsObjectiveDeterministic目的関数が確定的な場合は true、それ以外の場合は false
ExplorationRatioAcquisitionFunctionName'expected-improvement-plus' または 'expected-improvement-per-second-plus' の場合のみ使用。プラスを参照してください。
  
MaxObjectiveEvaluations目的関数の評価制限。
MaxTime制限時間。
  
XConstraintFcn変数の確定的制約。確定的制約 — XConstraintFcnを参照してください。
ConditionalVariableFcn変数の条件付き制約。条件付き制約 — ConditionalVariableFcnを参照してください。
NumCoupledConstraints連結制約の個数。連結制約を参照してください。
CoupledConstraintTolerances連結制約の許容誤差。連結制約を参照してください。
AreCoupledConstraintsDeterministic各連結制約が確定的であるかどうかを指定する logical ベクトル。
  
Verboseコマンド ラインの表示レベル。
OutputFcn各反復後に呼び出される関数。ベイズ最適化の出力関数を参照してください。
SaveVariableName出力関数 @assignInBase の変数名。
SaveFileName出力関数 @saveToFile のファイル名。
PlotFcn各反復後に呼び出されるプロット関数。ベイズ最適化のプロット関数を参照してください。
  
InitialXbayesopt で目的関数を評価した点。
InitialObjectiveInitialX における目的関数の値。
InitialConstraintViolationsInitialX における連結制約関数の値。
InitialErrorValuesInitialX における誤差値。
InitialObjectiveEvaluationTimesInitialX における目的関数の評価時間。
InitialIterationTimes目的関数の評価および他の計算を含む、各反復の時間。

データ型: struct

解のプロパティ

この プロパティ は読み取り専用です。

観測された目的関数の最小値。実数スカラーとして指定されます。連結制約または評価誤差がある場合、この値は、最終的な制約および誤差モデルに準じて実行可能であるすべての観測点における最小値になります。

データ型: double

この プロパティ は読み取り専用です。

目的関数最小値の観測点。1D 列のテーブルとして指定されます。D は変数の個数です。

データ型: table

この プロパティ は読み取り専用です。

XAtMinEstimatedObjective における目的関数の推定値。実数スカラーとして指定されます。

MinEstimatedObjective は、最終的な目的モデルの事後分布の平均値です。MinEstimatedObjective の値は、XAtMinEstimatedObjective をオブジェクト関数 predictObjective に渡して推定されます。

データ型: double

この プロパティ は読み取り専用です。

探索点内において目的関数値の信頼限界の上限が最小になる点。1D 列のテーブルとして指定されます。D は変数の個数です。探索点の信頼限界の上限は、最終的な目的モデルを使用して求められます。

XAtMinEstimatedObjective は、関数 bestPoint によって既定の基準 ('min-visited-upper-confidence-interval') で返される最良の点と同じです。

データ型: table

この プロパティ は読み取り専用です。

目的関数の評価回数。正の整数として指定されます。これには、事後モデルを形成するための初期評価と最適化反復時の評価が含まれます。

データ型: double

この プロパティ は読み取り専用です。

秒単位の最適化の合計経過時間。正のスカラーとして指定されます。

データ型: double

この プロパティ は読み取り専用です。

最適化継続時の次の評価点。1D 列のテーブルとして指定されます。D は変数の個数です。

データ型: table

トレースのプロパティ

この プロパティ は読み取り専用です。

目的関数が評価された点。TD 列のテーブルとして指定されます。T は評価点の個数、D は変数の個数です。

データ型: table

この プロパティ は読み取り専用です。

目的関数の値。長さ T の列ベクトルとして指定されます。T は評価点の個数です。ObjectiveTrace には目的関数評価の履歴が格納されます。

データ型: double

この プロパティ は読み取り専用です。

目的関数の評価時間。長さ T の列ベクトルとして指定されます。T は評価点の個数です。目的関数は連結制約を計算するので、ObjectiveEvaluationTimeTrace には連結制約を評価する時間が含まれます。

データ型: double

この プロパティ は読み取り専用です。

反復時間。長さ T の列ベクトルとして指定されます。T は評価点の個数です。IterationTimeTrace には目的関数の評価時間とその他のオーバーヘッドの両方が含まれます。

データ型: double

この プロパティ は読み取り専用です。

連結制約の値。TK 列の配列として指定されます。T は評価点の個数、K は連結制約の個数です。

データ型: double

この プロパティ は読み取り専用です。

誤差指標。入力が -1 または 1 である長さ T の列ベクトルとして指定されます。T は評価点の個数です。1 の入力はそれぞれ、XTrace 内の対応する点で目的関数がエラーになったか NaN を返したことを示します。-1 の入力はそれぞれ、目的関数の値が計算されたことを示します。

データ型: double

この プロパティ は読み取り専用です。

実行可能性の指標。長さ T の論理列ベクトルとして指定されます。T は評価点の個数です。1 の入力はそれぞれ、XTrace 内の対応する点において最終的な制約モデルが実行可能性を予測することを示します。

データ型: logical

この プロパティ は読み取り専用です。

評価点が実行可能である確率。長さ T の列ベクトルとして指定されます。T は評価点の個数です。この確率は、XTrace 内の対応する点における、誤差制約モデルを含む最終的な制約モデルに由来します。

データ型: double

この プロパティ は読み取り専用です。

最小実行可能目的関数を与える評価。整数インデックスが格納されている長さ T の列ベクトルとして指定されます。T は評価点の個数です。実行可能性は、誤差制約モデルを含む、各反復で存在した制約モデルに関して決定されます。

データ型: double

この プロパティ は読み取り専用です。

観測された目的関数の最小値。長さ T の列ベクトルとして指定されます。T は評価点の個数です。

データ型: double

この プロパティ は読み取り専用です。

推定された目的関数の値。長さ T の列ベクトルとして指定されます。T は評価点の個数です。各反復で推定される目的関数の値は、その反復における目的モデルを基準に決定されます。各反復で、オブジェクト関数 predictObjective を使用して、探索点内において目的関数値の信頼限界の上限が最小になる点における目的関数の値が推定されます。

データ型: double

この プロパティ は読み取り専用です。

目的関数の補助データ。長さ T の cell 配列として指定されます。T は評価点の個数です。cell 配列の各エントリは、目的関数の 3 番目の出力で返される UserData です。

データ型: cell

オブジェクト関数

bestPoint基準に従った、ベイズ最適化における最良の点
plotベイズ最適化の結果のプロット
predictConstraints一連の点における連結制約違反の予測
predictError一連の点における誤差値の予測
predictObjective一連の点における目的関数の予測
predictObjectiveEvaluationTime一連の点における目的関数の実行回数の予測
resumeベイズ最適化の再開

すべて折りたたむ

この例では、bayesopt を使用して交差検証損失を最小化することにより BayesianOptimization オブジェクトを作成する方法を示します。

ionosphere データに対し、KNN 分類器のハイパーパラメーターを最適化、つまり、交差検証損失が最小になる KNN のハイパーパラメーターを求めます。bayesopt で次のハイパーパラメーターに対する最小化を行います。

  • 1 ~ 30 の最近傍サイズ。

  • 距離関数 'chebychev''euclidean' および 'minkowski'

再現性を得るため、乱数シードと分割を設定し、AcquisitionFunctionName オプションを 'expected-improvement-plus' に設定します。反復表示を非表示にするには 'Verbose'0 に設定します。このデータを組み込む無名関数として fun を作成して、区分 c と近似データ X および Y を目的関数 fun に渡します。関数のパラメーター化 を参照してください。

load ionosphere
rng default
num = optimizableVariable('n',[1,30],'Type','integer');
dst = optimizableVariable('dst',{'chebychev','euclidean','minkowski'},'Type','categorical');
c = cvpartition(351,'Kfold',5);
fun = @(x)kfoldLoss(fitcknn(X,Y,'CVPartition',c,'NumNeighbors',x.n,...
    'Distance',char(x.dst),'NSMethod','exhaustive'));
results = bayesopt(fun,[num,dst],'Verbose',0,...
    'AcquisitionFunctionName','expected-improvement-plus')

Figure contains an axes object. The axes object with title Objective function model, xlabel n, ylabel dst contains 5 objects of type line, surface, contour. One or more of the lines displays its values using only markers These objects represent Observed points, Model mean, Next point, Model minimum feasible.

Figure contains an axes object. The axes object with title Min objective vs. Number of function evaluations, xlabel Function evaluations, ylabel Min objective contains 2 objects of type line. These objects represent Min observed objective, Estimated min objective.

results = 
  BayesianOptimization with properties:

                      ObjectiveFcn: @(x)kfoldLoss(fitcknn(X,Y,'CVPartition',c,'NumNeighbors',x.n,'Distance',char(x.dst),'NSMethod','exhaustive'))
              VariableDescriptions: [1x2 optimizableVariable]
                           Options: [1x1 struct]
                      MinObjective: 0.1197
                   XAtMinObjective: [1x2 table]
             MinEstimatedObjective: 0.1213
          XAtMinEstimatedObjective: [1x2 table]
           NumObjectiveEvaluations: 30
                  TotalElapsedTime: 42.8416
                         NextPoint: [1x2 table]
                            XTrace: [30x2 table]
                    ObjectiveTrace: [30x1 double]
                  ConstraintsTrace: []
                     UserDataTrace: {30x1 cell}
      ObjectiveEvaluationTimeTrace: [30x1 double]
                IterationTimeTrace: [30x1 double]
                        ErrorTrace: [30x1 double]
                  FeasibilityTrace: [30x1 logical]
       FeasibilityProbabilityTrace: [30x1 double]
               IndexOfMinimumTrace: [30x1 double]
             ObjectiveMinimumTrace: [30x1 double]
    EstimatedObjectiveMinimumTrace: [30x1 double]

この例では、SVM 分類器のベイズ最適化を使用して ionosphere データの交差検証損失を最小化する方法を示します。

データを読み込みます。

load ionosphere

'auto' パラメーターを使用して分類を最適化します。

rng default % For reproducibility
Mdl = fitcsvm(X,Y,'OptimizeHyperparameters','auto')
|====================================================================================================================|
| Iter | Eval   | Objective   | Objective   | BestSoFar   | BestSoFar   | BoxConstraint|  KernelScale |  Standardize |
|      | result |             | runtime     | (observed)  | (estim.)    |              |              |              |
|====================================================================================================================|
|    1 | Best   |     0.35897 |     0.53307 |     0.35897 |     0.35897 |       3.8653 |       961.53 |         true |
|    2 | Best   |     0.13105 |      13.681 |     0.13105 |     0.15896 |       429.99 |       0.2378 |        false |
|    3 | Accept |     0.35897 |     0.21195 |     0.13105 |     0.13431 |      0.11801 |       8.9479 |        false |
|    4 | Accept |      0.1339 |      5.9558 |     0.13105 |     0.13255 |    0.0010694 |    0.0032063 |         true |
|    5 | Accept |     0.19943 |      13.984 |     0.13105 |     0.13109 |       973.65 |      0.13813 |        false |
|    6 | Accept |     0.35897 |      0.1257 |     0.13105 |     0.13109 |    0.0053058 |       12.539 |        false |
|    7 | Accept |     0.35897 |     0.18948 |     0.13105 |     0.15077 |    0.0010882 |       141.83 |        false |
|    8 | Accept |     0.13675 |      12.038 |     0.13105 |      0.1311 |    0.0093853 |    0.0010394 |        false |
|    9 | Accept |     0.35897 |     0.14087 |     0.13105 |     0.14872 |    0.0013763 |      0.79332 |        false |
|   10 | Accept |     0.21937 |      14.046 |     0.13105 |     0.15035 |        132.3 |    0.0059903 |         true |
|   11 | Best   |     0.11681 |     0.17456 |     0.11681 |     0.13099 |    0.0010559 |      0.11695 |         true |
|   12 | Accept |      0.1339 |     0.11863 |     0.11681 |     0.12617 |    0.0010122 |       0.3047 |         true |
|   13 | Accept |     0.11681 |    0.089364 |     0.11681 |     0.11668 |    0.0010273 |      0.10959 |         true |
|   14 | Accept |     0.11681 |    0.077045 |     0.11681 |     0.11928 |    0.0045049 |      0.19097 |         true |
|   15 | Accept |     0.12251 |     0.13903 |     0.11681 |      0.1188 |     0.015504 |       0.1357 |         true |
|   16 | Accept |     0.12251 |     0.21558 |     0.11681 |      0.1166 |    0.0039725 |     0.074228 |         true |
|   17 | Accept |     0.13675 |    0.094696 |     0.11681 |     0.11661 |     0.021091 |       1.8456 |         true |
|   18 | Accept |     0.11681 |     0.17383 |     0.11681 |       0.119 |       0.1902 |      0.35105 |         true |
|   19 | Accept |     0.12251 |      0.2047 |     0.11681 |     0.11661 |     0.018251 |       0.2644 |         true |
|   20 | Accept |      0.1396 |     0.18775 |     0.11681 |     0.11662 |       66.759 |       36.214 |        false |
|====================================================================================================================|
| Iter | Eval   | Objective   | Objective   | BestSoFar   | BestSoFar   | BoxConstraint|  KernelScale |  Standardize |
|      | result |             | runtime     | (observed)  | (estim.)    |              |              |              |
|====================================================================================================================|
|   21 | Accept |     0.14245 |     0.25505 |     0.11681 |     0.11661 |       748.01 |       129.95 |        false |
|   22 | Accept |     0.12536 |     0.32296 |     0.11681 |     0.11662 |        197.8 |       6.4525 |        false |
|   23 | Accept |     0.12821 |      1.7575 |     0.11681 |      0.1166 |       0.9723 |      0.14362 |         true |
|   24 | Accept |     0.13105 |     0.13645 |     0.11681 |      0.1166 |        36.17 |       1.9502 |        false |
|   25 | Accept |     0.35897 |    0.092224 |     0.11681 |     0.11676 |       149.76 |       963.63 |        false |
|   26 | Accept |     0.12821 |     0.15056 |     0.11681 |     0.11678 |       998.31 |       30.745 |        false |
|   27 | Accept |     0.12251 |      0.2005 |     0.11681 |     0.11677 |       3.1488 |       2.8296 |         true |
|   28 | Accept |     0.12821 |      3.2812 |     0.11681 |     0.11684 |       920.14 |       1.7979 |        false |
|   29 | Accept |     0.24786 |      0.1423 |     0.11681 |     0.11681 |      0.15703 |       10.632 |         true |
|   30 | Accept |     0.12536 |     0.52853 |     0.11681 |      0.1168 |       5.4135 |      0.93812 |         true |

__________________________________________________________
Optimization completed.
MaxObjectiveEvaluations of 30 reached.
Total function evaluations: 30
Total elapsed time: 86.9704 seconds
Total objective function evaluation time: 69.2476

Best observed feasible point:
    BoxConstraint    KernelScale    Standardize
    _____________    ___________    ___________

      0.0010559        0.11695         true    

Observed objective function value = 0.11681
Estimated objective function value = 0.1168
Function evaluation time = 0.17456

Best estimated feasible point (according to models):
    BoxConstraint    KernelScale    Standardize
    _____________    ___________    ___________

      0.0010559        0.11695         true    

Estimated objective function value = 0.1168
Estimated function evaluation time = 0.13572

Figure contains an axes object. The axes object with title Min objective vs. Number of function evaluations, xlabel Function evaluations, ylabel Min objective contains 2 objects of type line. These objects represent Min observed objective, Estimated min objective.

Mdl = 
  ClassificationSVM
                         ResponseName: 'Y'
                CategoricalPredictors: []
                           ClassNames: {'b'  'g'}
                       ScoreTransform: 'none'
                      NumObservations: 351
    HyperparameterOptimizationResults: [1x1 BayesianOptimization]
                                Alpha: [114x1 double]
                                 Bias: 0.2520
                     KernelParameters: [1x1 struct]
                                   Mu: [0.8917 0 0.6413 0.0444 0.6011 0.1159 0.5501 0.1194 0.5118 0.1813 0.4762 0.1550 0.4008 0.0934 0.3442 0.0711 0.3819 -0.0036 0.3594 -0.0240 0.3367 0.0083 0.3625 -0.0574 0.3961 -0.0712 0.5416 -0.0695 ... ] (1x34 double)
                                Sigma: [0.3112 0 0.4977 0.4414 0.5199 0.4608 0.4927 0.5207 0.5071 0.4839 0.5635 0.4948 0.6222 0.4949 0.6528 0.4584 0.6180 0.4968 0.6263 0.5191 0.6098 0.5182 0.6038 0.5275 0.5785 0.5085 0.5162 0.5500 ... ] (1x34 double)
                       BoxConstraints: [351x1 double]
                      ConvergenceInfo: [1x1 struct]
                      IsSupportVector: [351x1 logical]
                               Solver: 'SMO'


この当てはめでは、既定の 5 分割交差検証について損失が約 12% になりました。

返されたモデルの HyperparameterOptimizationResults プロパティで返された BayesianOptimization オブジェクトを確認します。

disp(Mdl.HyperparameterOptimizationResults)
  BayesianOptimization with properties:

                      ObjectiveFcn: @createObjFcn/inMemoryObjFcn
              VariableDescriptions: [5x1 optimizableVariable]
                           Options: [1x1 struct]
                      MinObjective: 0.1168
                   XAtMinObjective: [1x3 table]
             MinEstimatedObjective: 0.1168
          XAtMinEstimatedObjective: [1x3 table]
           NumObjectiveEvaluations: 30
                  TotalElapsedTime: 86.9704
                         NextPoint: [1x3 table]
                            XTrace: [30x3 table]
                    ObjectiveTrace: [30x1 double]
                  ConstraintsTrace: []
                     UserDataTrace: {30x1 cell}
      ObjectiveEvaluationTimeTrace: [30x1 double]
                IterationTimeTrace: [30x1 double]
                        ErrorTrace: [30x1 double]
                  FeasibilityTrace: [30x1 logical]
       FeasibilityProbabilityTrace: [30x1 double]
               IndexOfMinimumTrace: [30x1 double]
             ObjectiveMinimumTrace: [30x1 double]
    EstimatedObjectiveMinimumTrace: [30x1 double]

バージョン履歴

R2016b で導入