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

関連するトピック