贝叶斯优化情节功能
内置的绘图功能
有两套内置情节功能。
模型图,适用于D≤2时 | 描述 |
---|---|
@plotAcquisitionFunction |
情节收购功能表面。 |
@plotConstraintModels |
绘制每个约束模型表面。负值表示可行点。 也画一个P(可行的)表面。 还绘制误差模型,如果它存在,范围从 绘制错误概率= 2 *(错误)- 1。 |
@plotObjectiveEvaluationTimeModel |
画出目标函数评价模型表面。 |
@plotObjectiveModel |
画出 |
跟踪情节——适用于所有D | 描述 |
---|---|
@plotObjective |
阴谋每个观测函数值的数量和功能评估。 |
@plotObjectiveEvaluationTime |
阴谋每个观测函数评估运行时的数量和功能评估。 |
@plotMinObjective |
图的最小观察和估计函数值的数量和功能评估。 |
@plotElapsedTime |
情节三个曲线的总运行时间优化,总时间评估函数,和总建模和时间点的选择,所有的数量和功能评价。 |
请注意
当耦合约束时,迭代显示和情节功能可以给违反直觉的结果如:
一个最低目标可以增加。
优化可以声明一个问题不可行,即使它显示早期可行点。
这种行为的原因是,决定是否一个点是可行的可以改变的优化发展。bayesopt
决定就其可行性约束模型,这个模型的变化bayesopt
评估点。所以“最低目标”情节时可以增加最小点后认为不可行,并迭代显示可以显示一个可行点,后来被认为是不可行的。
自定义绘制函数语法
自定义绘制函数具有相同的语法作为一个自定义输出函数(见贝叶斯优化输出功能):
停止= plotfun(结果,状态)
bayesopt
通过了结果
和状态
变量的函数。你的函数返回停止
,你设置真正的
停止迭代,或假
继续迭代。
结果
是一个对象的类BayesianOptimization
包含信息的计算。
状态
这些可能的值:
“初始”
- - - - - -bayesopt
即将开始迭代。使用这个国家建立一个情节或执行其他初始化。“迭代”
- - - - - -bayesopt
刚刚完成一次迭代。一般来说,您执行大部分的策划或其他计算在这个状态。“完成”
- - - - - -bayesopt
刚刚完成最后的迭代。清理情节或者准备情节功能关闭。
创建一个自定义的函数
这个例子展示了如何创建一个自定义函数bayesopt
。它进一步展示了如何使用信息用户数据
财产的BayesianOptimization
对象。
问题陈述
问题是要找到参数的支持向量机(SVM)分类旨在损失降到最低。金宝app具体的模型是一样的优化旨在使用bayesopt分类器。因此,目标函数本质上是一样的,除了它还计算用户数据
在这种情况下,支持向量的个数在一个SVM模型拟合当前参数。金宝app
创建一个定制的情节功能块支持向量的个数在SVM模型的优化发展。金宝app给情节函数访问支持向量的个数,创建一个第三输出,金宝app用户数据
,回归支持向量的个数。金宝app
目标函数
创建一个目标函数计算交叉验证损失一个固定的交叉验证分区,并返回结果模型中支持向量的个数。金宝app
函数[f,弦乐器,nsupp] = mysvmminfn (x, cdata, grp, c) SVMModel = fitcsvm (grp cdata,“KernelFunction”,“rbf”,…“KernelScale”x.sigma,“BoxConstraint”,x.box);f = kfoldLoss (crossval (SVMModel,“CVPartition”,c));开口= [];nsupp =总和(SVMModel.IsSu金宝apppportVector);结束
自定义绘制函数
创建一个自定义图函数,使用计算的信息用户数据
。有函数同时绘制当前数量的限制和约束的数量最好的模型目标函数。
函数停止= svmsuppvec(结果,状态)持续的hs nb besthist nsupptrace停止= false;开关状态情况下“初始”hs =图;besthist = [];nb = 0;nsupptrace = [];情况下“迭代”图(hs) nsupp = results.UserDataTrace{结束};%得到nsupp UserDataTrace财产。nsupptrace结束(+ 1)= nsupp;%积累nsupp值在一个向量。如果(results.ObjectiveTrace(结束)= = min (results.ObjectiveTrace)) | |(长度(results.ObjectiveTrace) = = 1)%目前是最好的nb = nsupp;结束besthist = (besthist, nb);阴谋(1:长度(nsupptrace) nsupptrace,“b”1:长度(besthist)、besthist“r——”)包含的迭代次数ylabel支持向量的数量金宝app标题支持向量的数量在每一次金宝app迭代的传奇(当前迭代的,“最好的目标”,“位置”,“最佳”)drawnow结束
建立了模型
为每个类生成10个基础点。
rng默认的grnpop = mvnrnd((1,0)、眼睛(2),10);redpop = mvnrnd([0, 1],眼(2),10);
生成100数据点的每个类。
redpts = 0 (100 2); grnpts = redpts;为i = 1:10 0 grnpts(我:)= mvnrnd (grnpop(兰迪(10):)、眼睛(2)* 0.02);redpts(我)= mvnrnd (redpop(兰迪(10):)、眼睛(2)* 0.02);结束
把数据转换成一个矩阵,向量grp
标签类的每一个点。
cdata = [grnpts; redpts];grp = 1 (200 1);%绿色标签1,红色标签1grp (101:200) = 1;
检查所有的数据使用默认的基本分类支持向量机参数。
SVMModel = fitcsvm (grp cdata,“KernelFunction”,“rbf”,“类名”[1]);
建立一个分区修复交叉验证。没有这一步,交叉验证是随机的,所以目标函数不是确定的。
c = cvpartition (200“KFold”10);
检查原拟合模型的交叉验证的准确性。
损失= kfoldLoss (fitcsvm (grp cdata,“CVPartition”c…“KernelFunction”,“rbf”,“BoxConstraint”SVMModel.BoxConstraints (1)…“KernelScale”,SVMModel.KernelParameters.Scale))
损失= 0.1350
准备为优化变量
目标函数需要一个输入z = [rbf_sigma boxconstraint]
并返回交叉验证的价值损失z
。的组件z
积极的,对数转换变量之间1 e-5
和1 e5
。选择广泛,因为你不知道哪值可能会好。
σ= optimizableVariable (“σ”(1 e-5, 1 e5),“转换”,“日志”);盒= optimizableVariable (“盒子”(1 e-5, 1 e5),“转换”,“日志”);
设置情节函数和调用优化器
寻找最佳参数(σ,盒子)
使用bayesopt
。再现性,选择“expected-improvement-plus”
采集功能。默认采集函数依赖于运行时,它可以给不同的结果。
图支持向量的个数的函数迭代数,和情节的金宝app最佳参数的支持向量的个数。
obj = @ (x) mysvmminfn (x, cdata, grp, c);结果= bayesopt (obj,σ,盒子,…“IsObjectiveDeterministic”,真的,“详细”0,…“AcquisitionFunctionName”,“expected-improvement-plus”,…“PlotFcn”,{@svmsuppvec、@plotObjectiveModel @plotMinObjective})
结果= BayesianOptimization属性:ObjectiveFcn: @ (x) mysvmminfn (x, cdata, grp, c) VariableDescriptions: [1 x2 optimizableVariable]选项:[1 x1 struct] MinObjective: 0.0750 XAtMinObjective: [1 x2表]MinEstimatedObjective: 0.0750 XAtMinEstimatedObjective: [1 x2表]NumObjectiveEvaluations: 30 TotalElapsedTime: 36.3900 NextPoint: [1 x2表]XTrace: [30 x2表]ObjectiveTrace: [30 x1双]ConstraintsTrace: [] UserDataTrace: {30 x1细胞}ObjectiveEvaluationTimeTrace: [30 x1双]IterationTimeTrace: [30 x1双]ErrorTrace: [30 x1双]FeasibilityTrace: [30 x1逻辑]FeasibilityProbabilityTrace: [30 x1双]IndexOfMinimumTrace: [30 x1双]ObjectiveMinimumTrace: [30 x1双]EstimatedObjectiveMinimumTrace: [30 x1双]