bayesopt
要求所有变量都有有限的边界。(分类
从本质上讲,变量的可能值是有限的。)中实值和整数值变量的下界和上界optimizableVariable
.
bayesopt
使用这些边界来采样点,可以是一致的,也可以是对数缩放的。你设置了采样的比例optimizableVariable
.
例如,约束一个变量X1
之间的值1 e-6
和1 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(我,:)
是可行的。
中传递确定性约束函数bayesopt
XConstraintFcn
名称-值参数。例如,
结果= 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
条件约束是强制执行以下两个条件之一的函数:
当某些变量具有特定值时,其他变量被设置为给定值。
当一些变量有一定的值时,其他变量也有南
或者,对于分类变量,<定义>
值。
属性来指定条件约束bayesopt
ConditionalVariableFcn
函数句柄的名称-值参数,例如@condvariablefcn
.的@condvariablefcn
函数必须有签名
Xnew = condvariablecn (X)
X
是宽度——D
任意高度的表。
Xnew
表的类型和大小是否相同X
.
condvariablefcn
集Xnew
等于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
详细的
名称-值参数1
或2
.
请注意
当存在耦合约束时,迭代显示和绘图函数可能会给出违反直觉的结果,例如:
一个最低目标情节可以增加。
优化可以声明一个问题不可行,即使它显示了一个较早的可行点。
这种行为的原因是,关于一个点是否可行的决定可以随着优化的进展而改变。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
拟合数据cdata
和grp
到目标函数有趣的
通过创建有趣的
作为包含此数据的匿名函数。看到参数化功能.
@(x)mysvmfun(x,cdata,grp,c);
设置NumCoupledConstraints
来1
所以优化器知道存在一个耦合约束。设置选项以绘制约束模型。
结果= bayesopt(fun,[sigma,box],“IsObjectiveDeterministic”,真的,…“NumCoupledConstraints”, 1“PlotFcn”,…{@plotMinObjective, @plotConstraintModels},…“AcquisitionFunctionName”,“expected-improvement-plus”,“详细”, 0);
大多数点导致不可行的支持向量数量。金宝app