主要内容

bayesopt

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

描述

例子

结果= bayesopt (有趣的var的值var,减少乐趣(var)

请注意

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

例子

结果= bayesopt (有趣的var名称,值修改优化过程名称,值参数。

例子

全部折叠

此示例显示如何创建BayesianOptimization对象,使用bayesopt最小化交叉验证损失。

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

  • 最近邻域大小从1到30

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

为了重现性,设置随机种子,设置分区,并设置AcquisitionFunctionName选项“expected-improvement-plus”.要抑制迭代显示,请设置“详细”0.传递分区c拟合数据X而且Y到目标函数有趣的通过创建有趣的作为一个包含此数据的匿名函数。看到参数化功能

负载电离层rng默认的num = optimizableVariable(“n”(1、30),“类型”“整数”);dst = optimizableVariable(dst的, {“chebychev”“欧几里得”闵可夫斯基的},“类型”“分类”);C = cvpartition(351,“Kfold”5);fun = @(x)kfoldLoss(fitcknn(x,Y,“CVPartition”c“NumNeighbors”x.n,...“距离”char (x.dst),“NSMethod”“详尽”));结果= bayesopt(fun,[num,dst],“详细”0,...“AcquisitionFunctionName”“expected-improvement-plus”

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

图中包含一个轴对象。标题为Min objective vs. Number of function的axis对象包含2个类型为line的对象。这些对象代表最小观测目标,估计最小目标。

results = BayesianOptimization with properties: ObjectiveFcn: [function_handle] variabledescription: [1x2 optimizableVariable] Options: [1x1 struct] MinObjective: 0.1197 XAtMinObjective: [1x2 table] MinEstimatedObjective: 0.1213 XAtMinEstimatedObjective: [1x2 table] numobjectiveevaluveevaluation: 30 TotalElapsedTime: 51.1317 NextPoint: [1x2 table] XTrace: [30x2 table] ObjectiveTrace: [30x1 double] ConstraintsTrace: [] UserDataTrace: {30x1 cell} ObjectiveEvaluationTimeTrace:[30x1 double] IterationTimeTrace: [30x1 double] ErrorTrace: [30x1 double]可行性trace: [30x1 logical]可行性probabilitytrace: [30x1 double] IndexOfMinimumTrace: [30x1 double] objectivminimumtrace: [30x1 double] estimatedobjectivminimumtrace: [30x1 double]

耦合约束是一种只能通过计算目标函数来计算的约束。在这种情况下,目标函数是支持向量机模型的交叉验证损失。耦合约束条件是支持向量的个数不超过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),“转换”“日志”);

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

函数[objective,constraint] = mysvmfun(x,cdata,grp,c) SVMModel = fitcsvm(cdata,grp, c)“KernelFunction”“rbf”...“BoxConstraint”x.box,...“KernelScale”, x.sigma);cvModel = crossval(svm模型,“CVPartition”c);objective = kfoldLoss(cvModel);约束= sum(SVMModel.IsSupportVe金宝appctor)-100.5;

传递分区c拟合数据cdata而且grp到目标函数有趣的通过创建有趣的作为一个包含此数据的匿名函数。看到参数化功能

mysvmfun(x,cdata,grp,c);

设置NumCoupledConstraints1因此优化器知道存在耦合约束。设置选项以绘制约束模型。

结果= bayesopt(fun,[sigma,box],“IsObjectiveDeterministic”,真的,...“NumCoupledConstraints”, 1“PlotFcn”...{@plotMinObjective, @plotConstraintModels},...“AcquisitionFunctionName”“expected-improvement-plus”“详细”, 0);

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

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

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

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

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

通过并行贝叶斯优化,寻找交叉验证误差最小的参数。

结果= bayesopt(fun,vars,“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 | Accept | 0.13675 | 0.42727 | 0.13105 | 0.13108 | 0.33594 | 0.39276 | | 4 | 2 | Accept | 0.35897 | 0.4453 | 0.13105 | 0.13108 | 0.014127 | 449.58 | | 5 | 2 | Best | 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 |接受| 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盒| | kern | | |工人结果| | |运行时|(观察)| (estim) | | ||===============================================================================================================| | 21日| 4 |接受| 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 b|接受| 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 |

__________________________________________________________ 优化完成。最大目标达到30个。总函数计算:30总运行时间:48.2085秒。总目标函数评估时间:128.3472最佳观测可行点:box kern _________ _________ 0.0015925 0.0050225观测目标函数值= 0.10826估计目标函数值= 0.10846函数评估时间= 4.0711最佳估计可行点(根据模型):box kern _________ _________ 0.0015925 0.0050225估计目标函数值= 0.10846估计函数评估时间= 2.8307

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

zbest = bestPoint(结果)
zb =1×2表盒子克恩_________ _________ 0.0015925 0.0050225

zb的最佳估计值“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名值对为真正的,一个parallel.pool.Constant(并行计算工具箱)谁的价值是函数句柄。通常情况下,有趣的返回具有可调超参数来控制其训练的机器学习模型的损失度量(例如错误分类错误)。有趣的具有这些特征:

目标=乐趣(x)%或[目标,约束条件]=乐趣(x)%或[目标,约束,UserData] = fun(x)

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

可选地,有趣的返回:

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

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

关于使用的详细信息parallel.pool.Constantbayesopt,请参阅将目标函数放在工人身上

例子:@objfun

数据类型:function_handle

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

例子:(X1, X2),在那里X1而且X2optimizableVariable对象

名称-值参数

指定可选参数对为Name1 = Value1,…,以=家,在那里的名字参数名称和价值对应的值。名称-值参数必须出现在其他参数之后,但对的顺序无关紧要。

在R2021a之前,使用逗号分隔每个名称和值,并将其括起来的名字在报价。

例子:results = bayesopt(fun,vars,' accesstionfunctionname ','expected-improvement-plus')

算法控制

全部折叠

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

名称包括的获取函数每秒不能产生可重复的结果,因为优化依赖于目标函数的运行时间。名称包括的获取函数+当他们过度开发一个区域时,修改他们的行为。详情请参见采集函数类型

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

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

例子:“IsObjectiveDeterministic”,真的

数据类型:逻辑

探索倾向:探索的倾向,被指定为积极的真实适用于“expected-improvement-plus”而且“expected-improvement-per-second-plus”采集功能。看到+

例子:“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在限定范围内随机分配点给所有可用的worker。否则,bayesopt计算一个工人的最佳得分。bayesopt创建随机点的速度比拟合点快得多,因此这种行为会导致更高的工人利用率,但代价可能是更差的点。详细信息请参见并行贝叶斯优化

例子:“MinWorkerUtilization”,3

数据类型:

启动和停止

全部折叠

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

例子:“MaxObjectiveEvaluations”,60

数据类型:

时间限制,指定为正实数。时间限制以秒为单位,由抽搐而且toc

运行时可能超过MaxTime因为bayesopt不中断函数求值。

例子:“MaxTime”,3600年

数据类型:

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

例子:“NumSeedPoints”,10

数据类型:

约束

全部折叠

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

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

例子:XConstraintFcn, @xconstraint

数据类型:function_handle

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

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

例子:ConditionalVariableFcn, @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”

数据类型:字符|字符串

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

不指定绘图函数为[]

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

内建的绘图函数如下表所示。

模型图-适用于D≤2 描述
@plotAcquisitionFunction

绘制采集函数曲面。

@plotConstraintModels

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

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

如果存在误差模型,也要绘制误差模型,其范围为11.负值意味着模型可能不会出错,正值意味着模型可能会出错。模型为:

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

@plotObjectiveEvaluationTimeModel

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

@plotObjectiveModel

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

轨迹图-适用于所有D 描述
@plotObjective

绘制每个观察到的函数值与函数计算的数量。

@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,1)

数据类型:

对应的初始数据为InitialX,指定为长度-N单元格向量,其中N是评价点的个数。

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

数据类型:细胞

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

数据类型:

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

数据类型:

输出参数

全部折叠

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

更多关于

全部折叠

耦合约束

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

提示

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

    • 您可以指定一个获取函数,其名称包括每秒,例如“expected-improvement-per-second”.的每秒修饰符表示优化取决于目标函数的运行时间。详情请参见采集函数类型

    • 您指定并行运行贝叶斯优化。由于并行计时的不可再现性,并行贝叶斯优化不一定产生可再现的结果。详情请参见并行贝叶斯优化

扩展功能

版本历史

在R2016b中引入