ベイズ最適化用の変数
最適化変数を作成するための構文
目的関数の各変数について、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