ベイズ最適化の出力関数
ベイズ最適化の出力関数とは
出力関数とは、bayesopt
の各反復の最後に呼び出される関数です。出力関数は反復を停止させることができます。また、プロットの作成、ワークスペースまたはファイルへの情報の保存、その他の任意の計算が行えます。
反復の停止以外に、出力関数でベイズ最適化の進行を変更することはできません。最適化の進行状況を監視するだけです。
組み込み出力関数
これらの組み込み出力関数は、最適化の結果をファイルまたはワークスペースに保存します。
@assignInBase
— 各反復後にワークスペース内の'BayesoptResults'
という名前の変数に結果を保存します。別の名前を選択するには、名前と値の引数SaveVariableName
を渡します。@saveToFile
— 各反復後に現在のフォルダー内の'BayesoptResults.mat'
という名前のファイルに結果を保存します。別の名前またはフォルダーを選択するには、名前と値の引数SaveFileName
を渡します。
たとえば、各反復後に結果を 'BayesIterations'
という名前のワークスペース変数に保存するには、次のようにします。
results = bayesopt(fun,vars,'OutputFcn',@assignInBase, ... 'SaveVariableName','BayesIterations')
カスタム出力関数
次のシグネチャを使用してカスタム出力関数を記述します。
stop = outputfun(results,state)
bayesopt
は変数 results
および state
をカスタム関数に渡します。カスタム関数では、反復を停止する場合は true
、継続を許可する場合は false
に設定した stop
を返します。
results
は BayesianOptimization
クラスのオブジェクトです。results
には、それまでの計算に関して使用できる情報が含まれています。
state
は次の値が可能です。
'initial'
—bayesopt
は反復を開始しようとしています。'iteration'
—bayesopt
は反復を 1 回完了したところです。'done'
—bayesopt
で最後の反復が完了しました。
たとえば、ベイズ最適化の出力関数を参照してください。
ベイズ最適化の出力関数
この例では、ベイズ最適化でカスタム出力関数を使用する方法を示します。この出力関数は、交差検証誤差率である目的関数が 13% 未満になると最適化を停止させます。また、各反復の時間もプロットします。
function stop = outputfun(results,state) persistent h stop = false; switch state case 'initial' h = figure; case 'iteration' if results.MinObjective < 0.13 stop = true; end figure(h) tms = results.IterationTimeTrace; plot(1:numel(tms),tms') xlabel('Iteration Number') ylabel('Time for Iteration') title('Time for Each Iteration') drawnow end end
目的関数は ionosphere
データの KNN 分類の交差検証損失です。データを読み込み、再現性を得るために既定の乱数ストリームを設定します。
load ionosphere rng default
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.22317 | 0.19943 | 0.19943 | 24 | chebychev | | 2 | Best | 0.16809 | 0.13278 | 0.16809 | 0.1747 | 9 | euclidean | | 3 | Best | 0.12536 | 0.09489 | 0.12536 | 0.12861 | 3 | chebychev | __________________________________________________________ Optimization completed. Total function evaluations: 3 Total elapsed time: 3.8924 seconds Total objective function evaluation time: 0.45084 Best observed feasible point: n dst _ _________ 3 chebychev Observed objective function value = 0.12536 Estimated objective function value = 0.12861 Function evaluation time = 0.09489 Best estimated feasible point (according to models): n dst _ _________ 3 chebychev Estimated objective function value = 0.12861 Estimated function evaluation time = 0.14111