主要内容

约束在贝叶斯优化

界限

bayesopt需要有限的边界上所有的变量。(分类天性,变量有界的可能值)。通过真实的上下边界和整数值变量optimizableVariable

bayesopt使用这些边界采样点,均匀或对数。设置比例的抽样optimizableVariable

例如,限制一个变量X1之间的值1 e-61 e3按比例缩小的对数,

xvar = optimizableVariable (X1的(1 e-6, 1 e3),“转换”,“日志”)

bayesopt包括端点在其范围内。因此,您不能使用0作为一个真正的对数转换变量的下限。

提示

用零下限在一个真正的对数转换变量,设置下限1,然后在目标函数使用x - 1

为一个整数值对数转换变量,您可以使用0作为下界。如果一个整数值变量的下限是0,那么软件创建了对数空间使用log1p函数而不是日志函数包含0在变量抽样范围。log1p是一个函数,它返回日志(1 + x)对于一个输入x

确定的约束,XConstraintFcn

有时候你的问题是有效的或明确的只是点在一定区域,称为可行域。一个确定性的函数,它返回一个确定性约束真正的当一个点是可行的当一个点是不可行的。所以确定性约束不是随机的,他们不是一群的功能点,但个人分。

提示

更有效的使用optimizableVariable边界,而不是确定性的限制,限制优化一个矩形区域。

编写一个确定性约束函数使用签名

tf = xconstraint (X)
  • X是一个宽度记表任意高度。

  • 特遣部队是一个逻辑列向量,在哪里特遣部队(i) = true什么时候X(我,:)是可行的。

通过确定性约束功能bayesoptXConstraintFcn名称-值参数。例如,

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

bayesopt评估确定的限制成千上万的点,所以跑得快,当你约束函数是矢量化。看到向量化

例如,假设的变量命名x1的“x2”当矢量的规范是可行的(x1, x2))小于6,当x1 < = x2。下面的约束函数评估这些约束。

函数tf = xconstraint tf1 =√X.x1 (X)。^ 2 + X.x2。^ 2) < 6;tf2 = X。x1<= X.x2; tf = tf1 & tf2;

有条件的约束,ConditionalVariableFcn

条件约束函数,执行以下两个条件之一:

  • 当一些变量有一定的值,其他变量设置为给定值。

  • 当一些变量有一定的值,其他变量或者,对于分类变量,<定义>值。

指定一个条件约束通过设置bayesoptConditionalVariableFcn名称-值参数函数处理@condvariablefcn。的@condvariablefcn函数必须有签名

Xnew = condvariablefcn (X)
  • X是一个宽度,D表的任意高度。

  • Xnew表类型和尺寸一样吗X

condvariablefcnXnew等于X,除了它还集每一行的相关变量Xnew正确的值的约束。

请注意

如果你有条件约束和确定性约束,bayesopt首先应用条件约束。因此,如果您的条件约束函数可以设置变量<定义>,确保你的确定性约束函数可以处理这些值正确。

有条件的约束确保变量值是明智的。因此,bayesopt适用条件约束首先通过这样的价值观是明智的。

有条件的约束,设置一个变量值

假设你是优化分类使用fitcdiscr,你的优化“DiscrimType”“伽马”名称-值参数。当“DiscrimType”是二次类型之一,“伽马”必须0或解决错误。在这种情况下,使用这个条件约束功能:

函数XTable = fitcdiscrCVF (XTable)%伽马必须0如果discrim类型是一个二次XTable.Gamma (ismember (XTable。DiscrimType, {“二次”,“diagQuadratic”,“pseudoQuadratic”}))= 0;结束

有条件的约束,设置一个变量

假设你是优化分类使用fitcsvm,你的优化“KernelFunction”“PolynomialOrder”名称-值参数。当“KernelFunction”不是多项式的,“PolynomialOrder”设置不适用。下面的函数执行这个条件约束。

函数Xnew = condvariablefcn Xnew = X (X);Xnew.PolynomialOrder (Xnew。KernelFunction ~ =多项式的)=南;

你可以节省一行代码如下:

函数X = condvariablefcn (X) X.PolynomialOrder (Xnew。KernelFunction ~ =多项式的)=南;

此外,定义一个目标函数,不通过“PolynomialOrder”名称-值参数fitcsvm时的值“PolynomialOrder”

有趣= @ (X) mysvmfun (X,预测反应,c)函数目标= mysvmfun (X,预测、响应c)参数={预测、响应“CVPartition”c“KernelFunction”X.KernelFunction};如果~ isnan (X.PolynomialOrder)参数= [arg游戏,{“PolynomialOrder”,X.PolynomialOrder}];结束目标= kfoldLoss (fitcsvm (args {:}));结束

耦合约束

耦合约束你只能计算约束通过调用目标函数。这些约束可以随机或确定的。返回这些约束值目标函数的第二个参数。看到贝叶斯优化目标函数

的目标函数返回一个数值向量耦合约束,每个耦合约束的一个条目。为每一个条目,负值表示约束满足(也称为可行)。正值表示约束条件是不满意(不可行)的。

bayesopt自动创建一个耦合约束,称为误差约束,每运行。这种约束使bayesopt模型分目标函数中导致错误的评估。有关详细信息,请参见目标函数的错误predictError

如果你有耦合约束除了错误约束:

  • 包括NumCoupledConstraints名称-值参数在你bayesopt调用(必需)。这个数字不包括错误的制约因素。

  • 如果你随机耦合约束,包括AreCoupledConstraintsDeterministic名称-值参数,通过对于任何随机约束。

观察耦合约束的值在每个迭代中通过设置bayesopt详细的名称-值参数12

请注意

当耦合约束时,迭代显示和情节功能可以给违反直觉的结果如:

  • 一个最低目标可以增加。

  • 优化可以声明一个问题不可行,即使它显示早期可行点。

这种行为的原因是,决定是否一个点是可行的可以改变的优化发展。bayesopt决定就其可行性约束模型,这个模型的变化bayesopt评估点。所以“最低目标”情节时可以增加最小点后认为不可行,并迭代显示可以显示一个可行点,后来被认为是不可行的。

例如,看到的贝叶斯与耦合约束优化

贝叶斯与耦合约束优化

耦合约束,只能通过评估来评估目标函数。在这种情况下,目标函数是旨在支持向量机模型的损失。耦合约束是支持向量的个数不超过100。金宝app模型的细节优化旨在使用bayesopt分类器

创建的数据分类。

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。耦合约束是支持向量的个数- 100.5。金宝app这将确保100支持向量给负约束值,但101年金宝app支持向量给出一个积极的价值。模型200数据点,所以耦合约束值的范围从-99.5(总有至少一个支持向量)至99.5。金宝app积极的价值观约束是不满足。

函数(目标、约束)= mysvmfun (x, cdata, grp, c) SVMModel = fitcsvm (grp cdata,“KernelFunction”,“rbf”,“BoxConstraint”x.box,“KernelScale”,x.sigma);cvModel = crossval (SVMModel,“CVPartition”c);目标= kfoldLoss (cvModel);约束=总和(SVMModel.IsSupportVect金宝appor) -100.5;

通过分区c和拟合数据cdatagrp的目标函数有趣的通过创建有趣的一个匿名函数,包含这些数据。看到参数化功能

有趣= @ (x) mysvmfun (x, cdata, grp, c);

设置NumCoupledConstraints1因此,优化器知道耦合约束。情节设置选项约束模型。

结果= bayesopt(有趣,σ,盒子,“IsObjectiveDeterministic”,真的,“NumCoupledConstraints”,1“PlotFcn”,{@plotMinObjective, @plotConstraintModels},“AcquisitionFunctionName”,“expected-improvement-plus”,“详细”,0);

大多数点导致支持向量的数目不可行。金宝app

另请参阅

|

相关的话题