ドキュメンテーション

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

BayesianOptimization

ベイズ最適化の結果

説明

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

作成

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

プロパティ

すべて展開する

問題定義のプロパティ

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

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

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

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

データ型: 関数ハンドル

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

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目的関数の評価および他の計算を含む、各反復の時間。

データ型: 構造体

解のプロパティ

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

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

データ型: double

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

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

データ型: テーブル

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

推定された目的関数の最小値。実数スカラーとして返されます。MinEstimatedObjective は最終的な目的モデルを使用します。

MinEstimatedObjective は、既定の基準における bestPointCriterionValue の結果と同じです。

データ型: double

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

目的関数の推定値が最小になる点。1D 列のテーブルとして返されます。D は変数の個数です。XAtMinEstimatedObjective は最終的な目的モデルを使用します。

データ型: テーブル

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

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

データ型: double

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

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

データ型: double

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

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

データ型: テーブル

トレースのプロパティ

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

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

データ型: テーブル

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

目的関数の値。長さ 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 は評価点の個数です。各反復で推定される目的関数の値は、その反復で存在した目的モデルに関して決定されます。

データ型: 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' に設定します。反復表示を行わないようにオプションを設定します。

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')

results = 
  BayesianOptimization with properties:

                      ObjectiveFcn: [function_handle]
              VariableDescriptions: [1x2 optimizableVariable]
                           Options: [1x1 struct]
                      MinObjective: 0.1197
                   XAtMinObjective: [1x2 table]
             MinEstimatedObjective: 0.1213
          XAtMinEstimatedObjective: [1x2 table]
           NumObjectiveEvaluations: 30
                  TotalElapsedTime: 61.7076
                         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 |
|      | result |             | runtime     | (observed)  | (estim.)    |              |              |
|=====================================================================================================|
|    1 | Best   |     0.21937 |      56.177 |     0.21937 |     0.21937 |       64.836 |    0.0015729 |
|    2 | Accept |     0.35897 |      1.2543 |     0.21937 |     0.22807 |     0.036335 |       5.5755 |
|    3 | Best   |     0.13105 |      16.393 |     0.13105 |     0.14149 |    0.0022147 |    0.0023957 |
|    4 | Accept |     0.35897 |     0.28086 |     0.13105 |     0.13108 |       5.1259 |        98.62 |
|    5 | Best   |     0.12536 |     0.54788 |     0.12536 |     0.12538 |    0.0010127 |     0.015575 |
|    6 | Accept |     0.13675 |      5.1099 |     0.12536 |     0.12914 |    0.0010151 |    0.0059137 |
|    7 | Accept |     0.13105 |      2.4215 |     0.12536 |     0.12853 |     0.014767 |    0.0096217 |
|    8 | Best   |     0.12251 |     0.22413 |     0.12251 |     0.12253 |    0.0010036 |     0.041712 |
|    9 | Accept |     0.12821 |     0.32705 |     0.12251 |     0.12255 |    0.0082502 |     0.035908 |
|   10 | Accept |     0.12251 |     0.38873 |     0.12251 |      0.1221 |    0.0011855 |     0.029178 |
|   11 | Accept |     0.22792 |      45.983 |     0.12251 |     0.12215 |        909.3 |     0.099475 |
|   12 | Accept |     0.12821 |       1.261 |     0.12251 |     0.12404 |     0.001031 |      0.03003 |
|   13 | Accept |     0.12251 |     0.27708 |     0.12251 |     0.12314 |    0.0010544 |     0.057552 |
|   14 | Accept |     0.12251 |     0.90473 |     0.12251 |     0.12292 |    0.0010188 |     0.054959 |
|   15 | Accept |     0.12251 |     0.46279 |     0.12251 |     0.12282 |    0.0010336 |     0.053712 |
|   16 | Accept |      0.1339 |     0.82524 |     0.12251 |     0.12294 |    0.0010118 |     0.071732 |
|   17 | Accept |      0.1339 |     0.61222 |     0.12251 |     0.12475 |    0.0010223 |     0.032979 |
|   18 | Accept |     0.12251 |     0.51923 |     0.12251 |     0.12454 |    0.0026782 |     0.037915 |
|   19 | Accept |     0.12536 |     0.46683 |     0.12251 |     0.12455 |    0.0031425 |     0.038491 |
|   20 | Accept |     0.35897 |     0.39767 |     0.12251 |     0.12457 |      0.13155 |       487.94 |
|=====================================================================================================|
| Iter | Eval   | Objective   | Objective   | BestSoFar   | BestSoFar   | BoxConstraint|  KernelScale |
|      | result |             | runtime     | (observed)  | (estim.)    |              |              |
|=====================================================================================================|
|   21 | Accept |     0.35897 |     0.38133 |     0.12251 |     0.12451 |       313.57 |       685.39 |
|   22 | Accept |     0.35897 |     0.31988 |     0.12251 |     0.12448 |    0.0010005 |       82.864 |
|   23 | Accept |     0.12251 |     0.44341 |     0.12251 |     0.12476 |       994.15 |       41.407 |
|   24 | Accept |     0.12821 |     0.44109 |     0.12251 |     0.12473 |       998.66 |       14.421 |
|   25 | Best   |     0.11681 |     0.35751 |     0.11681 |     0.11763 |       987.41 |       25.189 |
|   26 | Accept |     0.12536 |     0.21579 |     0.11681 |     0.12039 |        993.4 |       28.179 |
|   27 | Accept |     0.11681 |     0.22229 |     0.11681 |     0.11928 |       998.76 |       26.162 |
|   28 | Accept |     0.11681 |     0.41518 |     0.11681 |     0.11867 |       984.22 |       25.965 |
|   29 | Accept |     0.35897 |      1.2149 |     0.11681 |     0.11871 |     0.001013 |       773.11 |
|   30 | Accept |     0.35897 |     0.69988 |     0.11681 |     0.11875 |     0.083636 |       64.996 |

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

Best observed feasible point:
    BoxConstraint    KernelScale
    _____________    ___________

       987.41          25.189   

Observed objective function value = 0.11681
Estimated objective function value = 0.11875
Function evaluation time = 0.35751

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

       998.76          26.162   

Estimated objective function value = 0.11875
Estimated function evaluation time = 0.33141
Mdl = 
  ClassificationSVM
                         ResponseName: 'Y'
                CategoricalPredictors: []
                           ClassNames: {'b'  'g'}
                       ScoreTransform: 'none'
                      NumObservations: 351
    HyperparameterOptimizationResults: [1x1 BayesianOptimization]
                                Alpha: [100x1 double]
                                 Bias: -4.5428
                     KernelParameters: [1x1 struct]
                       BoxConstraints: [351x1 double]
                      ConvergenceInfo: [1x1 struct]
                      IsSupportVector: [351x1 logical]
                               Solver: 'SMO'


  Properties, Methods

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

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

disp(Mdl.HyperparameterOptimizationResults)
  BayesianOptimization with properties:

                      ObjectiveFcn: @createObjFcn/inMemoryObjFcn
              VariableDescriptions: [5x1 optimizableVariable]
                           Options: [1x1 struct]
                      MinObjective: 0.1168
                   XAtMinObjective: [1x2 table]
             MinEstimatedObjective: 0.1187
          XAtMinEstimatedObjective: [1x2 table]
           NumObjectiveEvaluations: 30
                  TotalElapsedTime: 243.9618
                         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]

R2016b で導入