Main Content

ベイズ最適化の出力関数

ベイズ最適化の出力関数とは

出力関数とは、bayesoptの各反復の最後に呼び出される関数です。出力関数は反復を停止させることができます。また、プロットの作成、ワークスペースまたはファイルへの情報の保存、その他の任意の計算が行えます。

反復の停止以外に,出力関数でベイズ最適化の進行を変更することはできません。最適化の進行状況を監視するだけです。

組み込み出力関数

これらの組み込み出力関数は、最適化の結果をファイルまたはワークスペースに保存します。

  • @assignInBase- - - - - -各反復後にワークスペース内の'BayesoptResults'という名前の変数に結果を保存します。別の名前を選択するには、名前と値の引数SaveVariableNameを渡します。

  • @saveToFile- - - - - -各反復後に現在のフォルダー内の'BayesoptResults.mat'という名前のファイルに結果を保存します。別の名前またはフォルダーを選択するには、名前と値の引数SaveFileNameを渡します。

たとえば、各反復後に結果を'BayesIterations'という名前のワークスペース変数に保存するには、次のようにします。

results = bayesopt(fun,vars,'OutputFcn',@assignInBase,...'SaveVariableName','BayesIterations')

カスタム出力関数

次のシグネチャを使用してカスタム出力関数を記述します。

年代top = outputfun(results,state)

bayesoptは変数resultsおよび年代tateをカスタム関数に渡します。カスタム関数では、反復を停止する場合はtrue、継続を許可する場合はfalseに設定した年代topを返します。

resultsBayesianOptimizationクラスのオブジェクトです。resultsには、それまでの計算に関して使用できる情報が含まれています。

年代tateは次の値が可能です。

  • 'initial'- - - - - -bayesoptは反復を開始しようとしています。

  • 'iteration'- - - - - -bayesoptは反復を 1 回完了したところです。

  • 'done'- - - - - -bayesoptで最後の反復が完了しました。

たとえば、ベイズ最適化の出力関数を参照してください。

ベイズ最適化の出力関数

この例では、ベイズ最適化でカスタム出力関数を使用する方法を示します。この出力関数は、交差検証誤差率である目的関数が 13% 未満になると最適化を停止させます。また、各反復の時間もプロットします。

function年代top = outputfun(results,state)persistenth stop = false;年代witch年代tatecase'initial'h = figure;case'iteration'ifresults.MinObjective < 0.13 stop = true;endfigure(h) tms = results.IterationTimeTrace; plot(1:numel(tms),tms') xlabel('Iteration Number') ylabel('Time for Iteration') title('Time for Each Iteration') drawnowendend

目的関数はionosphereデータの KNN 分類の交差検証損失です。データを読み込み、再現性を得るために既定の乱数ストリームを設定します。

loadionosphererngdefault

3 つの距離計量について 1 ~ 30 の近傍サイズで最適化します。

num = optimizableVariable('n',[1,30],'Type','integer'); dst = optimizableVariable('dst',{'chebychev','euclidean','minkowski'},'Type','categorical'); vars = [num,dst];

交差検証分割と目的関数を設定します。再現性を得るために、AcquisitionFunctionName'expected-improvement-plus'に設定します。最適化を実行します。

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,vars,'OutputFcn',@outputfun,...'AcquisitionFunctionName','expected-improvement-plus');
|=====================================================================================================| | Iter | Eval | Objective | Objective | BestSoFar | BestSoFar | n | dst | | | result | | runtime | (observed) | (estim.) | | | |=====================================================================================================| | 1 | Best | 0.19943 | 0.33223 | 0.19943 | 0.19943 | 24 | chebychev | | 2 | Best | 0.16809 | 0.18795 | 0.16809 | 0.1747 | 9 | euclidean | | 3 | Best | 0.12536 | 0.14037 | 0.12536 | 0.12861 | 3 | chebychev | __________________________________________________________ Optimization completed. Total function evaluations: 3 Total elapsed time: 6.5902 seconds Total objective function evaluation time: 0.66055 Best observed feasible point: n dst _ _________ 3 chebychev Observed objective function value = 0.12536 Estimated objective function value = 0.12861 Function evaluation time = 0.14037 Best estimated feasible point (according to models): n dst _ _________ 3 chebychev Estimated objective function value = 0.12861 Estimated function evaluation time = 0.20606

関連するトピック