ベイズ最適化の出力関数
ベイズ最適化の出力関数とは
出力関数とは、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.25274 | 0.19943 | 0.19943 | 24 | chebychev |
| 2 | Best | 0.16809 | 0.13035 | 0.16809 | 0.1747 | 9 | euclidean |
| 3 | Best | 0.12536 | 0.094146 | 0.12536 | 0.12861 | 3 | chebychev |
__________________________________________________________
Optimization completed.
Total function evaluations: 3
Total elapsed time: 8.2321 seconds
Total objective function evaluation time: 0.47724
Best observed feasible point:
n dst
_ _________
3 chebychev
Observed objective function value = 0.12536
Estimated objective function value = 0.12861
Function evaluation time = 0.094146
Best estimated feasible point (according to models):
n dst
_ _________
3 chebychev
Estimated objective function value = 0.12861
Estimated function evaluation time = 0.14579


