ベイズ最適化用の変数
最適化変数を作成するための構文
目的関数の各変数について、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
の名前と値の引数、または次のようにドット表記により Optimize
を false
に設定します。
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