主要内容

bayesopt

使用贝叶斯优化选择最优的机器学习超参数

描述

例子

结果= bayesopt (有趣的var试图找到的值var最小化乐趣(var)

请注意

要在目标函数中包含额外的参数,请参见参数化功能

例子

结果= bayesopt (有趣的var名称,值根据客户要求修改优化流程名称,值参数。

例子

全部折叠

这个例子展示了如何创建一个BayesianOptimization通过使用bayesopt尽量减少交叉验证的损失。

优化了KNN分类器的超参数电离层,即寻找最小化交叉验证损失的KNN超参数。有bayesopt最小化以下超参数:

  • 最近的邻居大小从1到30

  • 距离函数“chebychev”“欧几里得”,闵可夫斯基的

为了重现性,设置随机种子,设置分区,并设置AcquisitionFunctionName选择“预期改善加成”.若要抑制迭代显示,请设置“详细”0.通过分区c和拟合数据XY到目标函数有趣的通过创建有趣的作为包含该数据的匿名函数。看到参数化功能

负载电离层rng默认的num = optimizableVariable (“不”(1、30),“类型”“整数”);dst = optimizableVariable (dst的, {“chebychev”“欧几里得”闵可夫斯基的},“类型”“分类”);c = cvpartition (351“Kfold”5);有趣= @ (x) kfoldLoss (fitcknn (x, Y,“CVPartition”c“NumNeighbors”x.n,...“距离”char (x.dst),“NSMethod”“详尽”));结果= bayesopt(有趣,(num, dst),“详细”0,...“AcquisitionFunctionName”“预期改善加成”

图中包含一个坐标轴。以目标函数模型为标题的轴包含线、面、轮廓等5个对象。这些对象表示观测点,模型均值,下一个点,模型最小可行值。

图中包含一个坐标轴。标题为“最小目标vs.函数计算数”的轴包含2个类型为line的对象。这些对象代表最小观测目标、最小估计目标。

results = BayesianOptimization with properties: ObjectiveFcn: [function_handle] VariableDescriptions: [1x2 optimizableVariable] Options: [1x1 struct] MinObjective: 0.1197 XAtMinObjective: [1x2 table] minestimatedobjobjective: 0.1213 xatminestimatedobjobjective: [1x2 table] numobjectiveevalues:30 TotalElapsedTime: 91.4349 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:[30x1 double] EstimatedObjectiveMinimumTrace: [30x1 double]

耦合约束是只能通过对目标函数求值来求值的约束。在这种情况下,目标函数是支持向量机模型的交叉验证损失。耦合约束是支持向量的个数不超过100。金宝app模型细节已经在里面了使用贝叶斯算法优化交叉验证的SVM分类器

创建用于分类的数据。

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.这个coupled constraint is the number of support vectors minus 100.5. This ensures that 100 support vectors give a negative constraint value, but 101 support vectors give a positive value. The model has 200 data points, so the coupled constraint values range from -99.5 (there is always at least one support vector) to 99.5. Positive values mean the constraint is not satisfied.

函数[目标,约束]=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

利用并行目标函数评价提高贝叶斯优化的速度。

为贝叶斯优化准备变量和目标函数。

目标函数是电离层数据的交叉验证错误率,这是一个二元分类问题。使用fitcsvm作为分类器,用BoxConstraint核尺度作为优化的参数。

负载电离层盒= optimizableVariable (“盒子”(1的军医,1 e3),“转换”“日志”);kern = optimizableVariable (“仁”(1的军医,1 e3),“转换”“日志”);var =(盒子,kern);有趣= @ (var) kfoldLoss (fitcsvm (X, Y,“BoxConstraint”vars.box,“KernelScale”vars.kern,...“Kfold”5));

使用并行贝叶斯优化来搜索给出最低交叉验证误差的参数。

结果= bayesopt (var,有趣“UseParallel”,真正的);
复制目标函数给工人…完成向工人复制目标函数。
|===============================================================================================================| | Iter | |活跃Eval客观客观| | | BestSoFar | BestSoFar盒| | kern | | |工人结果| | |运行时|(观察)| (estim) | | ||===============================================================================================================| | 1 | 2 |接受| 0.2735 | 0.56171 | 0.13105 | 0.13108 | 0.0002608 | 0.2227 | | 2 | 2 |接受| 0.35897 | 0.4062 | 0.13105 | 0.13108 | 3.6999 | 344.01 | | 3 | 2 |接受| 0.13675 | 0.42727 | 0.13105 | 0.13108 | 0.33594 | 0.39276 | |4 | 2 |接受| 0.35897 | 0.4453 | 0.13105 | 0.13108 | 0.014127 | 449.58 | | 5 | 2 |最佳| 0.13105 | 0.45503 | 0.13105 | 0.13108 | 0.29713 | 1.0859 |
| 6 | 6 |接受| 0.35897 | 0.16605 | 0.13105 | 0.13108 | 8.1878 | 256.9 |
| 7 | 5 |最佳| 0.11396 | 0.51146 | 0.11396 | 0.11395 | 8.7331 | 0.7521 | | 8 | 5 b|接受| 0.14245 | 0.24943 | 0.11396 | 0.11395 | 0.0020774 | 0.022712 |
| 9 | 6 |最佳| 0.10826 | 4.0711 | 0.10826 | 0.10827 | 0.0015925 | 0.0050225 |
| 10 | 6 |接受| 0.25641 | 16.265 | 0.10826 | 0.10829 | 0.00057357 | 0.00025895 |
|11 | 6 |接受| 0.1339 | 15.581 | 0.10826 | 0.10829 | 1.4553 | 0.011186|
| 12 | 6 |接受| 0.16809 | 19.585 | 0.10826 | 0.10828 | 0.26919 | 0.00037649 |
| 13 | 6 |接受| 0.20513 | 18.637 | 0.10826 | 0.10828 | 369.59 | 0.099122 |
| 14 | 6 |接受| 0.12536 | 0.11382 | 0.10826 | 0.10829 | 5.7059 | 2.5642 |
| 15 | 6 |接受| 0.13675 | 2.63 | 0.10826 | 0.10828 | 984.19 | 2.2214 |
|16 | 6 |接受| 0.12821 | 2.0743 | 0.10826 | 0.11144 | 0.0063411 | 0.0090242|
| 17 | 6 |接受| 0.1339 | 0.1939 | 0.10826 | 0.11302 | 0.00010225 | 0.0076795 |
|18 | 6 |接受| 0.12821 | 0.20933 | 0.10826 | 0.11376 | 7.7447 | 1.2868|
| | 4 | 19日接受| 0.55556 | 17.564 | 0.10826 | 0.10828 | 0.0087593 | 0.00014486 | | 20 | 4 |接受| 0.1396 | 16.473 | 0.10826 | 0.10828 | 0.054844 | 0.004479  | |===============================================================================================================| | Iter | |活跃Eval客观客观| | | BestSoFar | BestSoFar |box | kern | | | workers | result | | runtime | (observed) | (estim.) | | | |===============================================================================================================| | 21 | 4 | Accept | 0.1339 | 0.17127 | 0.10826 | 0.10828 | 9.2668 | 1.2171 |
| 22 | 4 |接受| 0.12821 | 0.089065 | 0.10826 | 0.10828 | 12.265 | 8.5455 |
| 23 | 4 |接受| 0.12536 | 0.073586 | 0.10826 | 0.10828 | 1.3355 | 2.8392 |
| 24 | 4 |接受| 0.12821 | 0.08038 | 0.10826 | 0.10828 | 131.51 | 16.878 |
| 25 | 3 |接受| 0.11111 | 10.687 | 0.10826 | 0.10867 | 1.4795 | 0.041452 | | 26 | 3 |接受| 0.13675 | 0.18626 | 0.10826 | 0.10867 | 2.0513 | 0.70421 |
| 27 | 6 |接受| 0.12821 | 0.078559 | 0.10826 | 0.10868 | 980.04 | 44.19 |
| 28 | 5 |接受| 0.33048 | 0.089844 | 0.10826 | 0.10843 | 0.41821 | 10.208 | | 29 | 5 |接受| 0.16239 | 0.12688 | 0.10826 | 0.10843 | 172.39 | 141.43 |
| 30 | 5 |接受| 0.11966 | 0.14597 | 0.10826 | 0.10846 | 639.15 | 14.75 |

__________________________________________________________优化完成。MaxObjectiveEvaluations达到30。总功能评估:30总运行时间:48.2085秒。总目标功能评估时间:128.3472最佳观察可行点:box kern____________;0.0015925 0.0050225观察到的目标功能v值=0.10826估计目标函数值=0.10846函数评估时间=4.0711最佳估计可行点(根据模型):box-kernuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu

返回贝叶斯模型中的最佳可行点结果通过使用bestPoint函数。使用默认条件min-visited-upper-confidence-interval,确定最佳可行点为使目标函数值上置信区间最小的访问点。

zb = bestPoint(结果)
zb =1×2表框kern _________ _________ 0.0015925 0.0050225

兹贝斯特的最佳估计值“BoxConstraint”“KernelScale”名称-值对参数。使用这些值来训练一个新的优化分类器。

Mdl = fitcsvm (X, Y,“BoxConstraint”zbest.box,“KernelScale”, zbest.kern);

观察最优参数在Mdl

Mdl.BoxConstraints (1)
ans = 0.0016
Mdl.KernelParameters.Scale
ans = 0.0050

输入参数

全部折叠

目标函数,指定为函数句柄或UseParallel名称-值对是真正的,一个并行池常数(并行计算工具箱)谁的价值是函数句柄。通常情况下,有趣的为具有可调超参数来控制其训练的机器学习模型返回损失(如误分类错误)的度量。有趣的这些签名:

目标=乐趣(x)%或(目标、约束)(x) =乐趣%或[目标、约束、用户数据]=fun(x)

有趣的接受x, 1 -D变量值表,并返回客观的,表示目标函数值的实标量有趣的(x)

可选地,有趣的返回:

  • 约束,耦合约束违背的真实向量。关于定义,请参见耦合约束约束(j) > 0意味着约束j是违反了。约束(j) < 0意味着约束j是满意的。

  • 用户数据,任何类型的实体(如标量、矩阵、结构或对象)。下面是自定义绘图函数的示例用户数据,请参阅创建自定义绘图函数

有关使用的细节并行池常数bayesopt,请参阅把目标函数放在工人身上

例子:@objfun

数据类型:function_handle

变量描述,指定为的向量optimizableVariable对象定义要调优的超参数。

例子:(X1, X2),在那里X1X2optimizableVariable对象

名称-值对的观点

指定可选的逗号分隔的对名称,值参数。的名字参数名和价值为对应值。的名字必须出现在引号内。可以以任意顺序指定多个名称和值对参数名称1,值1,…,名称,值

例子:结果= bayesopt(乐趣、var AcquisitionFunctionName, expected-improvement-plus)
算法控制

全部折叠

函数选择下一个计算点,指定为列出的选项之一。

获取函数的名称包括每秒不会产生可重复的结果,因为优化依赖于目标函数的运行时间。获取函数的名称包括+当他们过度开发一个区域时,调整他们的行为。有关详细信息,请参见获取函数类型

例子:“AcquisitionFunctionName”、“expected-improvement-per-second”

指定确定性目标函数,指定为真正的.如果有趣的是随机的(也就是说,有趣的(x)可以返回相同的不同值吗x),然后设置IsObjectiveDeterministic.在这种情况下,bayesopt估计优化期间的噪音水平。

例子:“IsObjectiveDeterministic”,真的

数据类型:逻辑

探索倾向,指定为积极真实。适用于“预期改善加成”“每秒的预期改进数加上”采集功能。看到+

例子:“ExplorationRatio”,0.2

数据类型:

拟合高斯过程模型GPActiveSetSize或更少的点,指定为正整数。当bayesopt参观过的GPActiveSetSize点,使用适合模型的GP模型的后续迭代GPActiveSetSize要点。bayesopt均匀随机选取点,访问点之间不进行替换。使用更少的点会导致更快的GP模型拟合,但可能会牺牲更不精确的拟合。

例子:“GPActiveSetSize”,80年

数据类型:

并行计算,指定为(不并行计算)或真正的(并行计算)。并行计算需要并行计算工具箱™。

bayesopt对并行工作进程同时执行并行目标函数计算。有关算法详细信息,请参阅平行的贝叶斯优化

例子:“UseParallel”,真的

数据类型:逻辑

并行工作者目标函数值的归算方法,具体为“clipped-model-prediction”模型预测的“max-observed”,或“min-observed”.为了生成一个新的点来评估,bayesopt适用于所有点的高斯过程,包括对工人进行评估的点。为了适应这个过程,bayesopt为当前在工人身上的点输入目标函数值。ParallelMethod指定用于插补的方法。

  • “clipped-model-prediction”-计算这些数量的最大值:

    • 点处的平均高斯过程预测x

    • 访问的可行点中观测到的最小目标函数

    • 所有可行点中的最小模型预测

  • 模型预测的-输入点的平均高斯过程预测x

  • “max-observed”-在可行点之间输入观测到的目标函数的最大值。

  • “min-observed”-在可行点之间输入观测目标函数的最小值。

例子:“ParallelMethod”、“max-observed”

活动并行工作器数量的公差,指定为正整数。后bayesopt指定要计算的点,并且在计算要分配的新点之前,检查是否小于MinWorkerUtilization工人是活跃的。如果是这样,bayesopt在限定范围内给所有可用的工作人员分配随机点。否则,bayesopt计算一个工人的最佳点。bayesopt创建随机点的速度比拟合点快得多,因此这种行为导致更高的工人利用率,以可能较差的点为代价。有关详细信息,请参见平行的贝叶斯优化

例子:“MinWorkerUtilization”,3

数据类型:

启动和停止

全部折叠

目标函数的评价极限,指定为正整数。

例子:“MaxObjectiveEvaluations”,60

数据类型:

时限,指定为正实。时间限制以秒为单位,用抽搐toc

运行时间可以超过MaxTime因为bayesopt不中断函数计算。

例子:“MaxTime”,3600年

数据类型:

初始评估点的数量,指定为正整数。bayesopt在变量边界内随机选择这些点,根据变换设置每个变量(统一为“没有”的对数间隔“日志”).

例子:“NumSeedPoints”,10

数据类型:

约束

全部折叠

变量的确定性约束,指定为函数句柄。

有关详细信息,请参见确定性约束- XConstraintFcn

例子:XConstraintFcn, @xconstraint

数据类型:function_handle

条件变量约束,指定为函数句柄。

有关详细信息,请参见条件约束- ConditionalVariableFcn

例子:“条件变量FCN”,@condfun

数据类型:function_handle

耦合约束的数量,指定为正整数。有关详细信息,请参见耦合约束

请注意

NumCoupledConstraints当具有耦合约束时,需要。

例子:“NumCoupledConstraints”,3

数据类型:

指示耦合约束是否确定,指定为长度逻辑向量NumCoupledConstraints.有关详细信息,请参见耦合约束

例子:“AreCoupledConstraintsDeterministic”(真的,假,真的)

数据类型:逻辑

报告、阴谋和暂停

全部折叠

命令行显示级别,指定为01,或2

  • 0—没有命令行显示。

  • 1-在每次迭代时,显示迭代次数、结果报告(见下一段)、目标函数模型、目标函数评估时间、最佳(最低)观测目标函数值、最佳(最低)估计目标函数值、观测约束值(如果有)。当并行优化时,显示还包括一个列,显示活动工作者的数量,在将一个作业分配给下一个工作者后计算。

    每个迭代的结果报告如下:

    • 接受-目标函数返回一个有限值,且满足所有约束条件。

    • 最好的-满足约束条件,目标函数返回可行点中最小值。

    • 错误-目标函数返回一个非有限实标量的值。

    • Infeas—至少违反了一个约束。

  • 2-同1,添加诊断信息,如选择下一个点的时间、模型拟合时间、“加”获取函数声明过度利用的指示,以及由于并行利用率低而将并行工作者分配到随机点。

例子:“详细”,2

数据类型:

每次迭代后调用的函数,指定为函数句柄或函数句柄的单元数组。输出函数可以停止求解器,并可以执行任意计算,包括创建变量或绘图。使用函数句柄的单元格数组指定几个输出函数。

有两个内置的输出函数:

您可以编写自己的输出函数。有关详细信息,请参见贝叶斯优化输出函数

例子:OutputFcn, {@saveToFile @myOutputFunction}

数据类型:细胞|function_handle

的文件名@saveToFile输出函数,指定为字符向量或字符串标量。文件名可以包含路径,例如“. . /优化/ September2.mat”

例子:“SaveFileName”、“September2.mat”

数据类型:字符|字符串

的变量名@assignInBase输出函数,指定为字符向量或字符串标量。

例子:“SaveVariableName”、“September2Results”

数据类型:字符|字符串

每次迭代后调用的绘图函数,指定为“所有”、函数句柄或函数句柄的单元格数组。plot函数可以停止求解器,并可以执行任意计算,包括创建变量和绘图。

指定没有绘图功能为[]

“所有”调用所有内置的绘图函数。使用函数句柄的单元格数组指定几个绘图函数。

内置的plot函数如下表所示。

模型图-当D≤2时应用 描述
@plotAcquisitionFunction

绘制采集函数曲面。

@plotConstraintModels

绘制每个约束模型曲面。负值表示可行点。

也画一个P(可行的)表面。

还绘制误差模型,如果它存在,它的范围是11。负值表示模型可能没有错误,正值表示模型可能有错误。模型为:

绘制误差= 2*概率(误差)- 1。

@plotObjectiveEvaluationTimeModel

绘制目标函数评价时间模型曲面。

@plotObjectiveModel

画出有趣的模型表面,估计的最小位置,并对下一个提出的点的位置进行评价。对于一维问题,绘图包络一个可信区间上和下的均值函数,并包络一个噪声标准差上和下的均值。

轨迹图-适用于所有D 描述
@情节目标

绘制每个观察到的函数值与函数求值次数的关系图。

@plotObjectiveEvaluationTime

绘制每个观察到的函数求值运行时与函数求值次数的关系图。

@plotMinObjective

将观察到的和估计的最小函数值与函数计算的次数绘制出来。

@plotElapsedTime

绘制三条曲线:优化的总运行时间、总功能评估时间、总建模和点选择时间,所有曲线都与功能评估的数量相对应。

您可以编写自己的绘图函数。有关详细信息,请参阅贝叶斯优化图函数

请注意

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

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

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

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

例子:“PlotFcn”、“所有”

数据类型:字符|字符串|细胞|function_handle

初始化

全部折叠

初始评估点,指定为N——- - - - - -D表,N是多少评价点,和D是变量的数量。

请注意

如果只有InitialX时,将其解释为要计算的初始点。目标函数的取值为InitialX

如果还提供了任何其他初始化参数,InitialX被解释为先验函数求值数据。不计算目标函数。任何缺失的值都被设置为

数据类型:表格

对应的客观值InitialX,指定为长度-N向量,N为评价点数。

例子:“InitialObjective”,(17;3;-12.5)

数据类型:

耦合约束的约束违反,指定为N——- - - - - -K矩阵,在哪里N是多少评价点和K为耦合约束的个数。有关详细信息,请参见耦合约束

数据类型:

错误InitialX,指定为长度-N向量和条目-11,在那里N为评价点数。指定-1没有错误,而且1为一个错误。

例子:'InitialErrorValues',[-1,-1,-1,1]

数据类型:

对应于InitialX,指定为长度-N细胞的向量,N为评价点数。

例子:InitialUserData,{2、3、1}

数据类型:细胞

目标函数的求值次数为InitialX,指定为长度-N向量,N是评估点数。时间以秒为单位。

数据类型:

第一次时间N迭代,指定为长度-N向量,N是评估点数。时间以秒为单位。

数据类型:

输出参数

全部折叠

贝叶斯优化结果,返回为BayesianOptimization对象。

更多关于

全部折叠

耦合约束

耦合约束是指其值来自目标函数计算的约束。看到耦合约束

提示

  • 如果存在以下条件之一,则贝叶斯优化不可重复:

    • 指定名称包括的获取函数每秒,如“expected-improvement-per-second”.这个每秒修饰符表示优化取决于目标函数的运行时间。有关详细信息,请参见获取函数类型

    • 您指定并行运行贝叶斯优化。由于并行时序的不可再现性,并行贝叶斯优化并不一定产生可再现的结果。有关详细信息,请参见平行的贝叶斯优化

扩展功能

介绍了R2016b