主要内容

贝叶斯优化中的约束

界限

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是任意高度的宽- d表。

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

中传递确定性约束函数bayesoptXConstraintFcn名称-值参数。例如,

结果= bayesopt(fun,vars,'XConstraintFcn',@xconstraint)

bayesopt在数千个点上评估确定性约束,因此当约束函数被矢量化时运行得更快。看到向量化

例如,假设变量命名为x1的“x2”当向量的范数是可行的(x1, x2))小于6,当X1 <= x2.下面的约束函数计算这些约束。

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

条件约束—ConditionalVariableFcn

条件约束是强制执行以下两个条件之一的函数:

  • 当某些变量具有特定值时,其他变量被设置为给定值。

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

属性来指定条件约束bayesoptConditionalVariableFcn函数句柄的名称-值参数,例如@condvariablefcn.的@condvariablefcn函数必须有签名

Xnew = condvariablecn (X)
  • X是宽度——D任意高度的表。

  • Xnew表的类型和大小是否相同X

condvariablefcnXnew等于X的每一行设置相关变量Xnew到约束的正确值。

请注意

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

条件约束确保变量值是合理的。因此,bayesopt首先应用条件约束,以便所有传递的值都是合理的。

设置变量值的条件约束

假设您正在使用fitcdiscr,然后对两者进行优化“DiscrimType”“伽马”名称-值参数。当“DiscrimType”是一个二次型,“伽马”必须0或者解算器错误。在这种情况下,使用这个条件约束函数:

函数XTable = fitcdiscrCVF(XTable)如果判别类型是二次型,则% Gamma必须为0XTable.Gamma (ismember (XTable。DiscrimType, {“二次”“diagQuadratic”“pseudoQuadratic”})) = 0;结束

将变量设置为的条件约束

假设您正在使用fitcsvm,然后对两者进行优化“KernelFunction”“PolynomialOrder”名称-值参数。当“KernelFunction”不是多项式的,“PolynomialOrder”设置不适用。下面的函数执行这个条件约束。

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

你可以这样保存一行代码:

函数X = condvariablecn (X) X.多项式序(Xnew;KernelFunction ~ =多项式的) = NaN;

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

@(X)mysvmfun(X,predictors, response,c)函数目标= mysvmfun(X,predictors,response,c)参数= {predictors,response,“CVPartition”c“KernelFunction”X.KernelFunction};如果~isnan(x .多项式阶)args = [args,{“PolynomialOrder”, X.PolynomialOrder}];结束目标= kfoldLoss(fitcsvm(args{:}));结束

耦合约束

耦合约束是只能通过调用目标函数来求值的约束。这些约束可以是随机的,也可以是确定的。在第二个参数中从目标函数返回这些约束值。看到贝叶斯优化目标函数

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

bayesopt自动为每次运行创建一个耦合约束,称为Error约束。此约束使bayesopt对目标函数评价中引起误差的点进行建模。有关详情,请参阅目标函数误差predictError

如果除了错误约束之外还有耦合约束:

  • 包括NumCoupledConstraints的名称-值参数bayesopt调用(必需)。不要在这个数字中包含错误约束。

  • 如果您的任何耦合约束是随机的,则包括AreCoupledConstraintsDeterministic名称-值参数和传递对于任意随机约束。

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

请注意

当存在耦合约束时,迭代显示和绘图函数可能会给出违反直觉的结果,例如:

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

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

这种行为的原因是,关于一个点是否可行的决定可以随着优化的进展而改变。bayesopt确定其约束模型的可行性,该模型变为bayesopt评估点。因此,当最小点被认为不可行时,“最小目标”图会增加,迭代显示可以显示一个可行点,但后来被认为不可行。

使用示例请参见耦合约束下的贝叶斯优化

耦合约束下的贝叶斯优化

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

创建用于分类的数据。

rng默认的Grnpop = mvnrnd([1,0],eye(2),10);Redpop = mvnrnd([0,1],eye(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 = ones(200,1);Grp (101:200) = -1;C = cvpartition(200)“KFold”10);sigma = optimizableVariable()“σ”(1 e-5, 1 e5),“转换”“日志”);box = optimizableVariable(“盒子”(1 e-5, 1 e5),“转换”“日志”);

目标函数为支持向量机模型的分割交叉验证损失c.耦合约束是支持向量的个数减去100.5。金宝app这确保了100个支持向量给出一个负约束值,但金宝app101个支持向量给出一个正值。该模型有200个数据点,因此耦合约束值的范围从-99.5(总是至少有一个支持向量)到99.5。金宝app正值表示不满足约束。

函数[目标,约束]= mysvmfun(x,cdata,grp,c) SVMModel = fitcsvm(cdata,grp, c)“KernelFunction”“rbf”“BoxConstraint”x.box,“KernelScale”, x.sigma);cvModel = crossval(SVMModel,“CVPartition”c);objective = kfoldLoss(cvModel);约束= sum(SVMModel.IsSupportVe金宝appctor)-100.5;

传递分区c拟合数据cdatagrp到目标函数有趣的通过创建有趣的作为包含此数据的匿名函数。看到参数化功能

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

设置NumCoupledConstraints1所以优化器知道存在一个耦合约束。设置选项以绘制约束模型。

结果= bayesopt(fun,[sigma,box],“IsObjectiveDeterministic”,真的,“NumCoupledConstraints”, 1“PlotFcn”{@plotMinObjective, @plotConstraintModels},“AcquisitionFunctionName”“expected-improvement-plus”“详细”, 0);

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

另请参阅

|

相关的话题