Main Content

ベイズ最適化の目的関数

目的関数の構文

bayesopt は目的関数を最小化しようとします。代わりに関数を最大化するには、最大化する関数の負数を目的関数として設定します。関数を最大化を参照してください。目的関数に追加のパラメーターを含めるには、関数のパラメーター化を参照してください。

bayesopt は変数のテーブルを目的関数に渡します。変数は宣言された名前と型をもちます。ベイズ最適化用の変数を参照してください。

目的関数のシグネチャは次のとおりです。

[objective,coupledconstraints,userdata] = fun(x)
  1. objectivex における目的関数の値、数値スカラー。目的関数が数値以外の値または複数のエントリを含む行列を返した場合、bayesopt はエラーを返します。

  2. coupledconstraints — 存在する場合は連結制約の値 (オプションの出力)、実数値のベクトル。負の値は制約が満たされることを、正の値は満たされないことを示します。詳細は、連結制約を参照してください。

  3. userdata — プロットや対数化などでさらに使用するために関数で返すことができるオプション データ (オプションの出力)。たとえば、ベイズ最適化のプロット関数を参照してください。

目的関数の例

この目的関数は、box および sigma というパラメーターがある SVM モデルの交差検証近似における損失を返します。また、サポート ベクターの個数が 100 を超える場合に正 (実行不可能) になる連結制約関数も返します (100 は実行可能、101 は実行不可能)。

function [objective,constraint] = mysvmfun(x,cdata,grp)
SVMModel = fitcsvm(cdata,grp,'KernelFunction','rbf',...
    'BoxConstraint',x.box,...
    'KernelScale',x.sigma);
objective = kfoldLoss(crossval(SVMModel));
constraint = sum(SVMModel.SupportVectors) - 100.5;

目的関数を使用するには、ワークスペースに cdatagrp が存在すると仮定して、データを組み込む無名関数を作成します (関数のパラメーター化を参照)。

fun = @(x)mysvmfun(x,cdata,grp);
results = bayesopt(fun,vars) % Assumes vars exists

目的関数のエラー

目的関数が有限の実数スカラー以外を返した場合、bayesopt は目的関数がエラーを返したと見なします。たとえば、複素数値、NaN、または Inf を目的関数が返した場合、bayesopt は目的関数でエラーが発生したと見なします。エラーに遭遇した場合、bayesopt は最適化を続行し、エラー発生点のベイズ モデルを自動的に更新します。このベイズ モデルは "エラー モデル" です。bayesopt はエラー モデルを連結制約として組み込みます。連結制約を参照してください。

エラーが存在する場合、bayesopt の名前と値の引数 PlotFcn@plotConstraintModels に設定するとエラー モデルをプロットできます。または、ベイズ最適化の結果に対して遡及的に plot を呼び出して @plotConstraintModels を含めることができます。

関連するトピック