主要内容

このページの翻訳は最新ではありません。ここをクリックして,英語の最新版を参照してください。

ベイズ最適化の制約

范囲

bayesoptでは,すべてのの数でが股本有分类変数は可能な値に限定されます)。実数値または整数値の変数の下限と上限はoptimizableVariableで渡します。

bayesoptは,これらの範囲を使用して均等または対数スケールで点を抽出します。抽出のスケールはoptimizableVariableで設定します。

たとえば,変数X1をを数スケールで1 e-61 e3の間の値に制約するには,次のようにします。

XVAR =优化不变(X1的(1 e-6, 1 e3),'转变'“日志”

bayesoptは端点を範囲に含めます。したがって,対数変換される変数の下限として0を使用することはできません。

ヒント

対数変换されるれるののとしゼロをを使にはゼロはは,下限1に设定し,目的关键词x - 1を使使し。

確定的制約-xconstraintfcn.

問題が有効,または明確に定義されている状態が“実行可领域”と呼ばれる特定の領域内の点についてのみの場合があります。確定的制約は,点が実行可能な場合は真的を,実行不可能な場合はを返す確定的関数です。したがって,確定的制約は確率的ではありません。また,点のグループではなく個々の点の関数です。

ヒント

最適化を矩形領域に制限するには,確定的制約ではなくoptimizableVariableの範囲を使用する方が効率的です。

確定的制約関数を記述するには,次のシグネチャを使用します。

tf = xconstraint (X)
  • Xは,幅がDで高さが任意のテーブルです。

  • 特遣部队X(我,:)が実行可能な場合にのみ特遣部队(i) = trueになる論理列ベクトルです。

確定的制約関数は,bayesoptの名前と値のペアxconstraintfcn.で渡します。たとえば,以下のようにします。

结果= bayesopt(乐趣、var XConstraintFcn, @xconstraint)

bayesopt[ベクトル化を参照してください。

たとえば,x1的および“x2”という名前の数は,ベクトル(x1, x2))のノルムが6未満でx1 < = x2の場合に実行可能であるとします。次の制約関数はこれらの制約を評価します。

功能tf = xconstraint(x)tf1 = sqrt(x.x1。^ 2 + x.x2。^ 2)<6;tf2 = x.x1 <= x.x2;tf = tf1&tf2;

条件付き制約-ConditionalVariableFcn

条件条件制约は,次の2つの条件のいずれか适适适适。

  • 一部の変数が特定の値の場合,他の変数が特定の値になる。

  • 一部の変数が特定の値の場合に,他の変数が(カテゴリカル変数の場合は<未定义>)値になる。

条件付き制約を指定するには,bayesoptの名前と値のペアConditionalVariableFcn@condvariablefcnなどの関数ハンドルに設定します。@condvariablefcnの関数のシグネチャは次のようになっていなければなりません。

Xnew = condvariablefcn (X)
  • Xは,幅がDで高さが任意のです。

  • XnewXと同じ型およびサイズのですです。

condvariablefcnでは,Xに等しくなるようにXnewをを设定します,さらにXnewの各行の該当する変数を制約にかなった値に設定します。

メモ

条件付き制约と确定的制约制约の方针ががある合书,bayesoptはは条件付き制约ををににに适ししたがっ,条件,条件付き制约关键で数をまたは<未定义>に设定する可能性がある场合,これらの値を确定的制约关数で正しく处理できるようにする必要があります。

条件付き制約は,変数値を確実に実体的にします。したがって,まずbayesoptは条件付き制约を适用し,渡されるすべての値を実体的なものとします。

変数値を设定する条件付き制约

fitcdiscr.をを用しててをを化して,名称と値のペアペア幂“DiscrimType”および'伽玛'の両方について最適化しているとします。“DiscrimType”が二次タイプののいずれであるである合,'伽玛'0でないとソルバーでエラーが発生します。このようなケースでは,次の条件付き制約関数を使用します。

功能xtable = fitcdiscrcvf(xtable)如果判别类型是二次型,% Gamma必须是0XTable.Gamma (ismember (XTable。DiscrimType, {'二次'...“diagQuadratic”'pseudoquadratic'})) = 0;结束

変数をにに设定する条件付き制约

fitcsvm.をを用しててをを化して,名称と値のペアペア幂'骨箱'および“PolynomialOrder”の両方について最適化しているとします。'骨箱''多项式'ではないではない合,“PolynomialOrder”の设定は适ません。次次关键。

功能Xnew = condvariablefcn(X);Xnew.PolynomialOrder (Xnew。KernelFunction ~ ='多项式')=楠;

次のようにすると,コードの行数を少なくすることができます。

功能X = condvariablefcn(X)KernelFunction ~ ='多项式')=楠;

さらに,“PolynomialOrder”の値がである場合は名前と値のペアの引数“PolynomialOrder”fitcsvm.に渡さない目的関数を定義します。

有趣= @ (X) mysvmfun (X,预测反应,c)功能mysvmfun(X,predictors,response,c)的用法和样例:...'cvpartition',C,...'骨箱',x.kernelfunction};如果〜isnan(x.polynomialorder)args = [args,{“PolynomialOrder”,x.polynomialorder}];结束目标= kfoldloss(fitcsvm(args {:}));结束

連結制約

“连结连结”は,目的关键词ことのみ评価评価制约です。これら制约ははますことができますます。ベイズベイズ适化物相关的关联を参照してください。

目的関数は,各連結制約について1つずつエントリがある,連結制約の数値ベクトルを返します。各エントリで,負の値は制約が満たされること(実行可能とも呼びます)を示します。正の値は制約が満たされないこと(実行不可能)を示します。

bayesoptは,エラーエラー制约と呼ば呼ば连结制约をすべてのの実でで制约に作作作作者youls。bayesoptでモデル化できます。詳細については,目的関数のエラーpredictErrorを参照してください。

エラー制約に加えて連結制約がある場合,

  • bayesoptの呼び出しに,名前と値のペアNumCoupledConstraintsを含めます(必須)。この数にエラー制約は含めないでください。

  • いずれいずれかの连结连结制约が的であるである合,名称と値のペアAreCoupledConstraintsDeterministicを使用し,确率的制约についてを渡します。

各反復における連結制約の値を確認するには,bayesoptの名前と値のペアverb1または2に設定します。

メモ

连结制约がある场合,反复表示とプロット关数は次のような直観的ではない结果を与える可能性があります。

  • "最小目的"のプロットが増加する。

  • 最適化において,以前に実行可能点が示された場合でも,問題が実行不可能であると宣言される場合がある。

このようになるのは,点が実行可能かどうかの判断が最適化の進行に応じて変化する可能性があるためです。bayesoptは制約モデルに関して実行可能性を判断しますが,このモデルはbayesoptが点を評価すると変化します。したがって,最小の点が後から実行不可能と判断された場合は”最小目的“プロットが増加し,反復表示には,後から実行不可能と判断される実行可能点が表示される可能性があります。

たとえば,連結制約があるベイズ最適化を参照してください。

連結制約があるベイズ最適化

連結制約は,目的関数を評価することによってのみ評価できる制約です。このケースでは,目的関数はSVMモデルの交差検証損失です。連結制約は「サポート ベクターの個数が 100 を超えない」です。モデルの詳細については、bayesoptを使用した交差検証済みSVM分類器の最適化を参照してください。

分類用のデータを作成します。

rng.默认的grnpop = mvnrnd((1,0)、眼睛(2),10);redpop = mvnrnd([0, 1],眼(2),10);redpts = 0 (100 2);grnpts = redpts;i = 1:10 0 grnpts(我:)= mvnrnd (grnpop(兰迪(10):)、眼睛(2)* 0.02);redpts(我)= mvnrnd (redpop(兰迪(10):)、眼睛(2)* 0.02);结束cdata = [grnpts; redpts];grp = 1 (200 1);grp (101:200) = 1;c = cvpartition (200“KFold”10);σ= optimizableVariable (“σ”(1 e-5, 1 e5),'转变'“日志”);盒= optimizableVariable (“盒子”(1 e-5, 1 e5),'转变'“日志”);

目的関数は,分割cにおけるSVMモデルの交差検証損失です。連結制約はサポートベクターの個数から 100.5 を減算した値です。このようにすると、100 個のサポート ベクターでは負の制約値、101 個のサポート ベクターでは正の制約値になります。モデルには 200 個のデータ点があるので、連結制約の値の範囲は -99.5 (少なくとも 1 つのサポート ベクターが常にあります) から 99.5 になります。正の値は、制約が満たされないことを意味します。

功能[目的,约束] = MySvmfun(x,cdata,grp,c)svmmodel = fitcsvm(cdata,grp,'骨箱'“rbf”...“BoxConstraint”,x.box,...“KernelScale”,x.sigma);cvmodel = crossval(svmmodel,'cvpartition'c);目标= kfoldLoss (cvModel);约束=总和(SVMModel.IsSupportVect金宝appor) -100.5;

このデータを組み込む無名関数として乐趣を作物成し,区分cと近似データcdataおよびgrpを目的関数乐趣に渡します。関数のパラメーター化を参照してください。

fun = @(x)mysvmfun(x,cdata,grp,c);

連結制約があることをオプティマイザーが認識できるようにするため,NumCoupledConstraints1に設定します。制約モデルをプロットするようにオプションを設定します。

结果= bayesopt(有趣,σ,盒子,“IsObjectiveDeterministic”,真的,...“NumCoupledConstraints”,1,'plotfcn'...{@plotMinObjective, @plotConstraintModels},...“AcquisitionFunctionName”'预期改善 - 加'“详细”,0);

ほとんどの点でサポートベクターが実行不可能な数になります。

参考

|

关键词する