Main Content

ベイズ最適化用の変数

最適化変数を作成するための構文

目的関数の各変数について、optimizableVariableを使用して変数記述オブジェクトを作成します。各変数には一意な名前と値の範囲があります。変数を作成するための最小限の構文は次のようになります。

variable = optimizableVariable(Name,Range)

この関数は、下限Range(1)から上限Range(2)までの範囲にある実数変数を作成します。

名前と値の引数Typeで 3 種類の変数の型を指定できます。

  • 'real'- - - - - -有限範囲内の連続実数値。下限と上限を表す 2 要素ベクトル[lower upper]Rangeで指定します。

  • 'integer'- - - - - -'real'と同様の、有限範囲内の整数値。

  • 'categorical'- - - - - -{'red','green','blue'}など、引数Rangeで指定する可能な値の名前の cell 配列。

'real'または'integer'の変数では、名前と値の引数Transform'log'に設定すると、bayesoptが対数スケール間隔で探索するように指定できます。この変換を行う場合、Rangeの下限が'real'の場合は厳密に正であり、'integer'の場合は非負であることを確認してください。

bayesopt用の変数は2番目の引数にベクトルとして含めます。

results = bayesopt(fun,[xvar,ivar,rvar])

最適化から変数を除外するには、optimizableVariableの名前と値の引数、または次のようにドット表記によりOptimizefalseに設定します。

xvar.Optimize = false;

ヒント

  • optimizableVariableには 2 つの名前が関連付けられます。

    • MATLAB®のワークスペース変数名

    • 最適化における変数の名前

    たとえば、以下のようにします。

    xvar = optimizableVariable('spacevar',[1,100]);

    xvarは MATLAB のワークスペース変数、'spacevar'は最適化における変数です。

    これらの名前は次のように使用します。

    • xvarは、bayesoptに渡す変数のベクトルの要素として使用します。たとえば、以下のようにします。

      results = bayesopt(fun,[xvar,tvar])
    • 'spacevar'は、最適化における変数の名前として使用します。たとえば、目的関数で次のようにします。

      function objective = mysvmfun(x,cdata,grp) SVMModel = fitcsvm(cdata,grp,'KernelFunction','rbf',... 'BoxConstraint',x.spacevar,... 'KernelScale',x.tvar); objective = kfoldLoss(crossval(SVMModel));

最適化用の変数の例

0 から 1 までの実数変数:

var1 = optimizableVariable('xvar',[0 1])
var1 = optimizableVariable with properties: Name: 'xvar' Range: [0 1] Type: 'real' Transform: 'none' Optimize: 1

0 から 1000 までの対数スケールの整数変数:

var2 = optimizableVariable('ivar',[0 1000],'Type','integer','Transform','log')
var2 = optimizableVariable with properties: Name: 'ivar' Range: [0 1000] Type: 'integer' Transform: 'log' Optimize: 1

虹の色のカテゴリカル変数:

var3 = optimizableVariable('rvar',{'r''o''y''g''b''i''v'},'Type','categorical')
var3 = optimizableVariable with properties: Name: 'rvar' Range: {'r' 'o' 'y' 'g' 'b' 'i' 'v'} Type: 'categorical' Transform: 'none' Optimize: 1

関連するトピック