主要内容

贝叶斯优化的约束

界限

bayesopt要求所有变量都有有限的界限。(分类自然界是在可能的值中界定的变量。)通过真实和整数变量的下限和上限optimizableVariable

bayesopt使用这些边界到样本点,无论是一致的还是对数比例的。你设置采样的比例optimizableVariable

例如,约束一个变量X1到价值观1 e-61 e3按比例缩小的对数,

XVAR =优化不变(X1的(1 e-6, 1 e3),“转换”“日志”

bayesopt在其范围内包含端点。因此,不能使用0作为对数转换变量的下界。

提示

若要在经过对数变换的变量中使用零下界,请将下界设为1,然后在目标函数内使用x - 1

确定性约束 -XConstraintFcn

有时你的问题是有效的或定义良好的,只对特定区域的点,称为可行域.确定性约束是返回的确定性函数真的当一个点是可行的,而且当一个点是不可行的。所以确定性约束不是随机的,它们不是一组点的函数,而是单个点的函数。

提示

它的使用效率更高optimizableVariable边界,而不是确定性约束,将优化限制在一个矩形区域。

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

tf = xconstraint (X)
  • X是任意高度的宽度- d表。

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

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

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

bayesopt计算数千个点上的确定性约束,因此当约束函数向量化时运行得更快。看到向量化

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

函数tf1 =√(X.x1. X)^2 + X.x2.^2) < 6;tf2 = x <= x;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)如果discrim类型是二次型,%必须为0XTable.Gamma (ismember (XTable。DiscrimType, {'二次'...“diagQuadratic”“pseudoQuadratic”})) = 0;结束

设置变量的条件约束

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

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

您可以保存一行代码如下:

函数X = condvariablefcn(X)KernelFunction ~ =多项式的) =南;

此外,定义一个目标函数,不传递“PolynomialOrder”的名称-值对参数fitcsvm.当价值“PolynomialOrder”

有趣= @ (X) mysvmfun (X,预测反应,c)函数mysvmfun(X,predictors,response,c) = {predictors,response,...“CVPartition”c...“KernelFunction”X.KernelFunction};如果~isnan(x .多项式顺序)args = [args,{“PolynomialOrder”,x.polynomialorder};结束目标= kfoldLoss (fitcsvm (args {:}));结束

耦合约束

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

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

bayesopt每次运行都会自动创建称为错误约束的耦合约束。这个约束使能实现bayesopt对目标函数评价中引起误差的点进行建模。有关详细信息,请参见目标函数的错误predictError

如果你在Error约束之外还有耦合约束:

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

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

通过设置。来观察每次迭代中的耦合约束值bayesopt详细的名称 - 值对1或者2

请注意

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

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

  • 即使它显示出早期的可行点,优化也可以宣布不可行的问题。

产生这种行为的原因是,随着优化的进行,关于某个点是否可行的决策可能会改变。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),“转换”“日志”);

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

函数[目的,约束] = mysvmfun(x,cdata,grp,c)svmmodel = fitcsvm(cdata,grp,“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”'预期改善加'“详细”, 0);

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

另请参阅

|

相关话题