このページの翻訳は最新ではありません。ここをクリックして,英語の最新版を参照してください。
bayesopt
では,すべてのの数でが股本有分类
変数は可能な値に限定されます)。実数値または整数値の変数の下限と上限はoptimizableVariable
で渡します。
bayesopt
は,これらの範囲を使用して均等または対数スケールで点を抽出します。抽出のスケールはoptimizableVariable
で設定します。
たとえば,変数X1
をを数スケールで1 e-6
と1 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)
たとえば,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
で高さが任意のです。
Xnew
はX
と同じ型およびサイズのですです。
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
の名前と値のペアverb
を1
または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);
連結制約があることをオプティマイザーが認識できるようにするため,NumCoupledConstraints
を1
に設定します。制約モデルをプロットするようにオプションを設定します。
结果= bayesopt(有趣,σ,盒子,“IsObjectiveDeterministic”,真的,...“NumCoupledConstraints”,1,'plotfcn',...{@plotMinObjective, @plotConstraintModels},...“AcquisitionFunctionName”,'预期改善 - 加',“详细”,0);
ほとんどの点でサポートベクターが実行不可能な数になります。