主要内容

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”

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

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

results = BayesianOptimization with properties: ObjectiveFcn: [function_handle] variabledescription: [1x2 optimizableVariable] Options: [1x1 struct] MinObjective: 0.1197 XAtMinObjective: [1x2 table] minestimatedobjobjective: 0.1213 xatminestimatedobjobjective: [1x2 table] numobjectiveevaluationevaluts30 TotalElapsedTime: 35.9996 NextPoint: [1x2 table] XTrace: [30x2 table] ObjectiveTrace: [30x1 double] ConstraintsTrace: [] UserDataTrace: {30x1 cell} ObjectiveEvaluationTimeTrace:[30x1 double] IterationTimeTrace: [30x1 double] ErrorTrace: [30x1 double]可行性追踪:[30x1 logical]可行性概率追踪:[30x1 double] IndexOfMinimumTrace: [30x1 double] objectivminimumtrace: [30x1 double] estimatedobjectivminimumtrace: [30x1 double]

耦合约束是一种只能通过评估目标函数来评估的约束。在这种情况下,目标函数是支持向量机模型的交叉验证损失。耦合约束为支持向量个数不超过100。模型细节在里面使用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。这确保了100个支持向量给出一个负的约束值,而101个支持向量给出一个正的值。该模型有200个数据点,因此耦合约束值的范围从-99.5(总是至少有一个支持向量)到99.5。正值表示约束不满足。

函数[objective,constraint] = mysvmfun(x,cdata,grp,c) SVMModel = fitcsvm(cdata,grp, c)“KernelFunction”,“rbf”,...“BoxConstraint”x.box,...“KernelScale”, x.sigma);cvModel = crossval(SVMModel,“CVPartition”c);objective = kfoldLoss(cvModel);constraint = sum(SVMModel.IsSupportVector)-100.5;

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

Fun = @(x)mysvmfun(x,cdata,grp,c);

设置NumCoupledConstraints1因此优化器知道存在一个耦合约束。设置用于绘制约束模型的选项。

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

大多数点会导致支持向量的不可行的数量。

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

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

目标函数是电离层数据的交叉验证错误率,这是一个二元分类问题。使用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 |44.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 |接受| 0.14245 | 0.24943 | 0.11396 | 0.11395 | 0.0020774 | 0.022712 |
| 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 |
| 0.1339 | 15.581 | 0.10826 | 0.10829 | 1.4553 | 0.011186 |接受| 0.1339 | 15.581 | 0.10826 | 0.10829 |
| 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 |
| 0.12536 | 0.11382 | 0.10826 | 0.10829 | 5.7059 | 2.5642 |接受| 0.12536 | 0.11382 | 0.10826 |
| 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 |
| 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 | | 14.75 |接受| 0.11966 | 0.14597 | 0.10826 | 0.10846 | 639.15 |

__________________________________________________________ 优化完成。最大目标:达到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表Box kern _________ _________ 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)%或[目标,约束,用户数据]=乐趣(x)

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

可选地,有趣的返回:

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

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

有关使用parallel.pool.Constantbayesopt,请参阅把目标函数放在工人身上

例子:@objfun

数据类型:function_handle

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

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

名称-值参数

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

在R2021a之前,名称和值之间用逗号隔开,并括起来的名字在报价。

例子:results = bayesopt(fun,vars,' acquire - functionname ','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指定用于imputation的方法。

  • “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

例子:ConditionalVariableFcn, @condfun

数据类型:function_handle

耦合约束的个数,指定为正整数。详情请参见耦合约束

请注意

NumCoupledConstraints当您有耦合约束时,是必需的。

例子:“NumCoupledConstraints”,3

数据类型:

指示耦合约束是否确定,指定为长度的逻辑向量NumCoupledConstraints.详情请参见耦合约束

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

数据类型:逻辑

报告、情节和中止

全部折叠

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

  • 0-没有命令行显示。

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

    每次迭代的结果报告如下所示:

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

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

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

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

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

例子:“详细”,2

数据类型:

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

有两个内置的输出函数:

您可以编写自己的输出函数。详情请参见贝叶斯优化输出函数

例子:OutputFcn, {@saveToFile @myOutputFunction}

数据类型:细胞|function_handle

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

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

数据类型:字符|字符串

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

例子:“SaveVariableName”、“September2Results”

数据类型:字符|字符串

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

不指定绘图函数为[]

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

下表中显示了内置的plot函数。

模型图-适用于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中引入

Baidu
map