约束在贝叶斯优化
界限
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
是一个宽度记表任意高度。特遣部队
是一个逻辑列向量,在哪里特遣部队(i) = true
什么时候X(我,:)
是可行的。
通过确定性约束功能bayesopt
XConstraintFcn
名称-值参数。例如,
结果= 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
条件约束函数,执行以下两个条件之一:
当一些变量有一定的值,其他变量设置为给定值。
当一些变量有一定的值,其他变量
南
或者,对于分类变量,<定义>
值。
指定一个条件约束通过设置bayesopt
ConditionalVariableFcn
名称-值参数函数处理@condvariablefcn
。的@condvariablefcn
函数必须有签名
Xnew = condvariablefcn (X)
X
是一个宽度,D
表的任意高度。Xnew
表类型和尺寸一样吗X
。
condvariablefcn
集Xnew
等于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
详细的
名称-值参数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),“转换”,“日志”);
目标函数的支持向量机模型的交叉验证损失分区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
和拟合数据cdata
和grp
的目标函数有趣的
通过创建有趣的
一个匿名函数,包含这些数据。看到参数化功能。
有趣= @ (x) mysvmfun (x, cdata, grp, c);
设置NumCoupledConstraints
来1
因此,优化器知道耦合约束。情节设置选项约束模型。
结果= bayesopt(有趣,σ,盒子,“IsObjectiveDeterministic”,真的,…“NumCoupledConstraints”,1“PlotFcn”,…{@plotMinObjective, @plotConstraintModels},…“AcquisitionFunctionName”,“expected-improvement-plus”,“详细”,0);
大多数点导致支持向量的数目不可行。金宝app