主要内容

ベ@ @ズ最適化のプロット関数

組み込みプロット関数

2組の組み込みプロット関数があります。

モデルプロット- d≤2の場合に適用 説明
@plotAcquisitionFunction

獲得関数の表面をプロットします。

@plotConstraintModels

各制約モデルの表面をプロットします。負の値は実行可能点を示します。

P(実行可能)表面もプロットします。

存在する場合は1から1の範囲のエラ,モデルもプロットします。負の値はモデルでエラーが発生する可能性が低いことを,正の値はエラーが発生する可能性が高いことを意味します。モデルは以下のようになります。

绘制误差= 2*概率(误差)- 1。

@plotObjectiveEvaluationTimeModel

目的関数の評価時間モデルの表面をプロットします。

@plotObjectiveModel

有趣的モデルの表面,最小値の推定位置,および次に評価する予定になっている点の位置をプロットします。1次元問題の場合、平均関数から 1 信頼区間分上下と平均から 1 ノイズ標準偏差分上下に包絡線をプロットします。

トレ,スプロット-すべてのdに適用 説明
@plotObjective

観測された各関数値と関数評価の個数の関係をプロットします。

@plotObjectiveEvaluationTime

観測された各関数評価の実行時間と関数評価の個数の関係をプロットします。

@plotMinObjective

観測および推定された最小の関数値と関数評価の個数の関係をプロットします。

@plotElapsedTime

最適化の合計経過時間,関数評価の合計時間,モデリングおよび点選択の合計時間という3つの曲線を関数評価の個数に対する関係としてプロットします。

メモ

連結制約がある場合,反復表示とプロット関数は次のような直観的ではない結果を与える可能性があります。

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

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

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

カスタムプロット関数の構文

カスタムプロット関数の構文はカスタム出力関数(ベ@ @ズ最適化の出力関数を参照)と同じで,次のようになります:

Stop = plotfun(结果,状态)

bayesoptは変数结果および状态をカスタム関数に渡します。カスタム関数では,反復を停止する場合は真正的,継続する場合はに設定した停止を返します。

结果は,計算に関して使用できる情報が含まれているBayesianOptimizationクラスのオブジェクトです。

状态の取り得る値は次の3です:

  • “初始”- - - - - -bayesoptは反復を開始しようとしています。プロットの設定や他の初期化の実行にはこの状態を使用します。

  • “迭代”- - - - - -bayesoptは反復を1回完了したところです。一般に,ほとんどのプロットや他の計算はこの状態で実行します。

  • “完成”- - - - - -bayesoptで最後の反復が完了しました。プロットをクリ,ンアップするか,プロット関数を停止する準備をします。

カスタムプロット関数の作成

この例では,bayesoptのカスタムプロット関数を作成する方法を示します。さらに,BayesianOptimizationオブジェクトの用户数据プロパティに含まれている情報を使用する方法を示します。

問題の定義

問題は,交差検証損失を最小化するサポートベクターマシン(SVM)分類のパラメーターを求めることです。具体的なモデルはBayesoptを使用した交差検証分類器の最適化の場合と同じです。したがって,目的関数は基本的に同じですが,用户数据(このケースでは,現在のパラメーターに当てはめるSVMモデル内のサポートベクターの個数)も計算する点が異なります。

最適化の進行に応じてSVMモデル内のサポートベクターの個数をプロットするカスタムプロット関数を作成します。プロット関数でサポートベクターの個数にアクセスできるようにするため,サポートベクターの個数を返す3番目の出力用户数据を作成します。

目的関数

目的関数を作成します。この関数では,固定された交差検証分割に対する交差検証損失を計算し,生成されたモデル内のサポートベクターの個数を返します。

函数[f,viol,nsupp] = mysvmminfn(x,cdata,grp,c) SVMModel = fitcsvm(cdata,grp, c)“KernelFunction”“rbf”...“KernelScale”x.sigma,“BoxConstraint”, x.box);f = kfoldLoss(crossval(svm模型,“CVPartition”, c));Viol = [];nsupp = sum(svm . issup金宝appportvector);结束

カスタムプロット関数

用户数据で計算される情報を使用するカスタムプロット関数を作成します。現在の制約の個数と最良の目的関数が見つかった状態におけるモデルの制約の個数の両方を関数にプロットさせます。

函数停止= svmsuppvec(结果,状态)持续的h nbest bestist nsupptrace stop = false;开关状态情况下“初始”Hs =数字;bestist = [];Nbest = 0;Nsupptrace = [];情况下“迭代”figure(hs) nsupp = results.UserDataTrace{end};从UserDataTrace属性获取nsupp。Nsupptrace (end+1) = nsupp;%在vector中累积nsupp值。如果(results.ObjectiveTrace(end) == min(results.ObjectiveTrace)) || (length(results.ObjectiveTrace) == 1)%电流为最佳Nbest = nsupp;结束best = [best,nbest];阴谋(1:长度(nsupptrace) nsupptrace,“b”1:长度(besthist)、besthist“r——”)包含的迭代次数ylabel支持向量的数量金宝app标题每次迭代的支持向量数金宝app传奇(当前迭代的“最好的目标”“位置”“最佳”) drawnow结束

モデルの設定

各クラスにいて10個ずの基底点を生成します。

rng默认的Grnpop = mvnrnd([1,0],eye(2),10);Redpop = mvnrnd([0,1],eye(2),10);

各クラスにいて100。

Redpts = 0 (100,2);i = 1:10 0 grnpts(我:)= mvnrnd (grnpop(兰迪(10):)、眼睛(2)* 0.02);redpts(我)= mvnrnd (redpop(兰迪(10):)、眼睛(2)* 0.02);结束

デタを1の行列に格納し,grpを作成します。

Cdata = [grnpts;redpts];GRP = ones(200,1);%绿色标签1,红色标签-1Grp (101:200) = -1;

既定のSVMパラメ,タ,を使用して,すべてのデ,タの基本分類をチェックします。

SVMModel = fitcsvm(cdata,grp,“KernelFunction”“rbf”“类名”[1]);

交差検証を固定する分割を設定します。この手順を行わないと,交差検証がランダムになるので,目的関数が確定的ではなくなります。

C = cvpartition(200,“KFold”10);

元の当てはめたモデルの交差検証の精度をチェックします。

损失= kfoldLoss(fitcsvm(cdata,grp,“CVPartition”c...“KernelFunction”“rbf”“BoxConstraint”SVMModel.BoxConstraints (1)...“KernelScale”, SVMModel.KernelParameters.Scale))
损失= 0.1350

最適化用の変数の準備

目的関数は,入力Z = [rbf_sigma,boxconstraint]を受け入れ,交差検証損失値zを返します。zの成分を1 e-51 e5の範囲で正の変数に対数変換します。どの値が適切であるかがわからないので,広い範囲を選択します。

sigma = optimizableVariable(“σ”(1 e-5, 1 e5),“转换”“日志”);box = optimizableVariable(“盒子”(1 e-5, 1 e5),“转换”“日志”);

プロット関数の設定とオプティマ▪▪ザ▪▪の呼び出し

bayesoptを使用して最良のパラメタ(σ,盒子)を求めます。再現性を得るために,“expected-improvement-plus”の獲得関数を選択します。既定の獲得関数は実行時に決定されるので,結果が異なる場合があります。

反復回数の関数としてサポートベクターの個数をプロットし,見つかった最良のパラメーターに対するサポートベクターの個数をプロットします。

Obj = @(x)mysvmminfn(x,cdata,grp,c);结果= bayesopt(obj,[sigma,box],...“IsObjectiveDeterministic”,真的,“详细”0,...“AcquisitionFunctionName”“expected-improvement-plus”...“PlotFcn”, {@svmsuppvec、@plotObjectiveModel @plotMinObjective})
results = BayesianOptimization with properties: ObjectiveFcn: @(x)mysvmminfn(x,cdata,grp,c) variabledescription: [1x2 optimizableVariable] Options: [1x1 struct] MinObjective: 0.0750 XAtMinObjective: [1x2 table] minestimatedobjobjective: 0.0750 xatminestimatedobjobjective: [1x2 table] numobjectiveevaluation: 30 TotalElapsedTime: 59.1520 NextPoint: [1x2 table] XTrace: [30x2 table] ObjectiveTrace: [30x1 double] ConstraintsTrace: [] UserDataTrace: {30x1 cell} ObjectiveEvaluationTimeTrace:[30x1 double] IterationTimeTrace: [30x1 double] ErrorTrace: [30x1 double]可行性trace: [30x1 logical]可行性probabilitytrace: [30x1 double] IndexOfMinimumTrace: [30x1 double] objectivminimumtrace: [30x1 double] estimatedobjectivminimumtrace: [30x1 double]

関連するトピック