bayesopt

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

描述

例子

结果= bayesopt (乐趣vars.试图找到值vars.这最小化有趣(vars)

请注意

在目标函数中包含额外的参数,请参阅参数化功能(matlab)。

例子

结果= bayesopt (乐趣vars.名称,价值根据客户要求修改优化流程名称,价值论点。

例子

全部收缩

这个例子展示了如何创建一个贝叶斯偏见通过使用bayesopt最大限度地减少交叉验证损失。

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

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

  • 距离功能“chebychev”'euclidean', 和'minkowski'

为了再现性,设置随机种子,设置分区,并设置收集功能名称选择'预期改善加'.要抑制迭代显示,请设置'verbose'0.通过分区c和拟合数据XY目标函数乐趣通过创建乐趣作为包含此数据的匿名功能。看参数化功能(matlab)。

加载电离层RNG.默认num =优化不变('n',[1,30],'类型''整数');dst = optimizableVariable ('DST',{“chebychev”'euclidean''minkowski'},'类型''分类');c = cvpartition (351'kfold'5);有趣= @ (x) kfoldLoss (fitcknn (x, Y,'cvpartition',C,'numneighbors',x.n,......'距离',char(x.dst),'nsmethod''彻底的'));结果= Bayesopt(乐趣,[Num,DST],'verbose',0,......“AcquisitionFunctionName”'预期改善加'

结果=具有属性的贝叶斯optimization:ObjectiveFCN:[function_handle] variabledesions:[1x2 oldizablevariable]选项:[1x1 struct] minobjective:0.1197 xatminobjective:[1x2表] minestimatedobjective:0.1213 xatminestimatedobjective:[1x2表] NumObjectiveEvaluations:30总计:60.8003 NextPoint:[1x2表] xtrace:[30x2表] ObjectiveTreace:[30x1 double] constraindstrace:[] UserDataTrace:{30x1 Cell} WateSealeValionTimetrace:[30x1 Double] iterationTimetrace:[30x1 double] errortrace:[30x1 double] feaselytrace:[30x1逻辑] FeasilyProbilityProbabilityProbabilityTrace:[30x1 double] indexofmimumimumimummimumimumimumimumimumimumimum $ actach:[30x1双]估计objectiveminimumtrace:[30x1 double]

耦合约束是可以通过评估目标函数来评估的约束。在这种情况下,目标函数是SVM模型的交叉验证丢失。耦合约束是支撑载体的数量不超过100.模型细节在万博1manbetx使用贝叶斯算法优化交叉验证的SVM分类器

创建分类数据。

RNG.默认grnpop = mvnrnd((1,0)、眼睛(2),10);redpop = mvnrnd([0, 1],眼(2),10);redpts = 0 (100 2);grnpts = redpts;i = 1:100 gnpts(i,:) = mvnrnd(grnpop(randi(10),:),眼睛(2)* 0.02);redpts(i,:) = mvnrnd(Redpop(randi(10),:),眼睛(2)* 0.02);结尾cdata = [grnpts; redpts];GRP = ONE(200,1);GRP(101:200)= -1;c = cvpartition(200,'kfold',10);sigma =优化的不变性(“σ”,[1e-5,1e5],'转变'“日志”);盒子=优化不变('盒子',[1e-5,1e5],'转变'“日志”);

目标函数是SVM模型的分区的交叉验证丢失c.耦合约束是支撑载体的数量减去100.5。万博1manbetx这确保了100个支持向量产生负约束值,但是1万博1manbetx01个支持向量提供了正值。该模型具有200个数据点,因此耦合约束值范围从-99.5(总有至少一个支持向量)到99.5。万博1manbetx正值意味着约束不满足。

功能[目的,约束] = mysvmfun(x,cdata,grp,c)svmmodel = fitcsvm(cdata,grp,'骨箱''rbf'......'boxconstraint',x.box,......'kernelscale',x.sigma);cvmodel = crossval(svmmodel,'cvpartition',C);目标= kfoldloss(cvmodel);约束= sum(svmmodel.issupportve万博1manbetxctor)-100.5;

通过分区c和拟合数据cdata.GRP.目标函数乐趣通过创建乐趣作为包含此数据的匿名功能。看参数化功能(matlab)。

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

设定NumCoupledConstraints1所以优化器知道有一个耦合约束。设置绘制约束模型的选项。

结果= Bayesopt(乐趣,[Sigma,Box],'IsobjectiveDeterministic',真的,......'numcoupledconstraints',1,'plotfcn'......{@ plotminobjective,@ plotconstraintmodels},......“AcquisitionFunctionName”'预期改善加''verbose',0);

大多数点导致支持向量的数目不可行。万博1manbetx

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

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

目标函数是电离层数据的交叉验证错误率,二进制分类问题。用fitcsvm.作为分类器,用boxconstraint.内塞尔作为优化的参数。

加载电离层盒子=优化不变('盒子',[1e-4,1e3],'转变'“日志”);kern =优化的不变('kern',[1e-4,1e3],'转变'“日志”);vars = [box,kern];Fun = @(vars)kfoldloss(fitcsvm(x,y,'boxconstraint',vars.box,'kernelscale',vars.kern,......'kfold',5));

搜索使用并行贝叶斯优化提供最低交叉验证错误的参数。

结果= Bayesopt(乐趣,vars,“UseParallel”,真的);
将目标函数复制到工人......对工人进行复制目标职能。
| =============================================================================================================== ||磨练|活跃|eval |目标|目标|Bestsofar |Bestsofar |盒子| kern | | | workers | result | | runtime | (observed) | (estim.) | | | |===============================================================================================================| | 1 | 2 | Accept | 0.2735 | 0.56171 | 0.13105 | 0.13108 | 0.0002608 | 0.2227 | | 2 | 2 | Accept | 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 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 |
|19 |4 |接受|0.55556 |17.564 |0.10826 |0.10828 |0.0087593 |0.00014486 | | 20 | 4 | Accept | 0.1396 | 16.473 | 0.10826 | 0.10828 | 0.054844 | 0.004479 | |===============================================================================================================| | Iter | Active | Eval | Objective | Objective | 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 | Accept | 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 | Accept | 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最佳观察到的可行点:框kern __________ __________ 0.0015925 0.0050225观察到的目标函数值= 0.10826估计目标函数值= 0.10846函数评估时间= 4.0711最佳估计可行点(根据型号):框kern ___________________ 0.00159250.0050225估计目标函数值= 0.10846估计函数评估时间= 2.8307

返回贝叶斯模型中的最佳可行点结果通过使用best函数。使用默认条件最小置信 - 上置信间隔,这决定了作为访问点的最佳可行点,其最小化目标函数值上的上置信区间。

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

桌子Zbest.的最佳估计值'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.

输入参数

全部收缩

目标函数,指定为函数句柄或使用指α.名称值对是真的, 一种并行.Pool.Constant.谁的价值是函数句柄。通常情况下,乐趣为具有可调超参数来控制其训练的机器学习模型返回损失(如误分类错误)的度量。乐趣有这些签名:

目标=乐趣(x)% 或者(目标、约束)(x) =乐趣% 或者[目的,约束,userData] =有趣(x)

乐趣接受x,一个1-by-D变量值以及返回表客观的,代表目标函数值的真正标量有趣(x)

可选地,乐趣也返回:

  • 约束,耦合约束违规的真正矢量。对于定义,请参阅耦合约束约束(j)> 0意味着约束j被违反了。约束(j)<0意味着约束j是满意的。

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

有关使用的详细信息并行.Pool.Constant.bayesopt,请参阅将客观职能放在工人身上

例子:@objfun.

数据类型:function_handle

可变描述,指定为向量优化的不变性定义要调整的超参数的对象。

例子:[x1,x2], 在哪里X1X2优化的不变性对象

名称值对参数

指定可选的逗号分离对名称,价值论点。姓名是参数名称和价值是相应的价值。姓名必须出现在引号内。您可以以任何顺序指定多个名称和值对参数name1,value1,...,namen,valuen

例子:结果= Bayesopt(乐趣,vars,'获取功能名称','预期 - 改进 - 加')

算法控制

全部收缩

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

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

例子:'获取功能名称','预期 - 每秒改善'

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

例子:“IsObjectiveDeterministic”,真的

数据类型:逻辑

倾向于探索,指定为一个积极的真实。适用于'预期改善加''预期 - 每秒改善'采集函数。看

例子:“ExplorationRatio”,0.2

数据类型:双倍的

适合高斯过程模型gpactivessetsize.或更少的点,指定为正整数。当bayesopt已经访问了更多gpactivessetsize.点,使用GP模型的后续迭代适合模型gpactivessetsize.要点。bayesopt在随访的情况下,在随访时选择均匀的点。使用更少的点导致更快的GP模型配件,以牺牲可能更少的准确配件为代价。

例子:'GPACTIVESERIZE',80

数据类型:双倍的

并行计算,指定为错误的(不要并行计算)或真的(并行计算)。bayesopt同时在并行工作人员执行并行目标函数评估。对于算法详细信息,请参阅并行贝叶斯优化

例子:'使用反应',真实

数据类型:逻辑

并行工人客观函数值的估算方法,指定为'剪裁模型预测''模型预测''最大观察', 或者'闵观察'.生成一个评估的新点,bayesopt适合所有要点的高斯进程,包括正在对工人进行评估的积分。适应这个过程,bayesopt对工人上目前的点赋予目标函数值。并行摩托指定用于归档的方法。

  • '剪裁模型预测'- 赋予最大数量:

    • 意味着在该点的平均高斯过程预测x

    • 可行点之间的最低观察目标函数访问

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

  • '模型预测'- 赋予该点的平均高斯过程预测x

  • '最大观察'-在可行点之间输入观测到的目标函数的最大值。

  • '闵观察'-在可行点之间输入观测目标函数的最小值。

例子:'ParallyMethod','Max-Ingeged'

对作为正整数指定的活动并行工人数量的容忍度。后bayesopt分配指向评估,然后在计算要分配的新点之前,它检查是否少于MinWorkerUtilization工人是活跃的。如果是这样,bayesopt将绑定中的随机点分配给所有可用工人。除此以外,bayesopt计算一个工人的最佳点。bayesopt从装配点创造随机点快得多,因此这种行为导致工人的利用率更高,以可能较差的成本。有关详细信息,请参见并行贝叶斯优化

例子:'minworkerutilizize',3

数据类型:双倍的

启动和停止

全部收缩

目标函数评估限制,指定为正整数。

例子:'maxobjectiveevaluations',60

数据类型:双倍的

时间限制,指定为正面真实。时间限制是以秒为单位的抽搐TOC.

运行时间可能超过MaxTime.因为bayesopt不中断功能评估。

例子:“MaxTime”,3600年

数据类型:双倍的

初始评估点的数量,指定为正整数。bayesopt根据该设置,在可变界限内随机选择这些点转变每个变量设置(均匀'没有任何',对数间隔开“日志”)。

例子:“NumSeedPoints”,10

数据类型:双倍的

约束

全部收缩

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

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

例子:XConstraintFcn, @xconstraint

数据类型:function_handle

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

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

例子:'conditionalvarifiesefcn',@ condfun

数据类型:function_handle

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

请注意

NumCoupledConstraints耦合约束时是必需的。

例子:'numcoupledconstraints',3

数据类型:双倍的

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

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

数据类型:逻辑

报告,情节和停止

全部收缩

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

  • 0- 没有命令行显示。

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

    每个迭代的结果报告都是以下之一:

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

    • 最好的事物- 满足约束,目标函数返回可行点之间的最低值。

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

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

  • 2- 与...一样1,添加诊断信息,如时间选择下一个点,模型拟合时间,指示“加”获取功能声明过度开销,并且由于低于平利用率而被分配给随机点。

例子:'verbose',2

数据类型:双倍的

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

有两个内置的输出函数:

  • @assignInbase.构造一个贝叶斯偏见在每个迭代处的实例,并将其分配给基础工作区中的变量。使用的使用变量名称savevariablename.名称值对。

  • @savetofile.构造一个贝叶斯偏见每个迭代的实例并将其保存到当前文件夹中的文件中。使用该文件名选择文件名savefilename.名称值对。

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

例子:'outputfcn',{@ savetofile @myoutputfunction}

数据类型:细胞|function_handle

文件名@savetofile.输出函数,指定为字符向量或字符串标量。文件名可以包括路径,例如'../optimizations/september2.mat'

例子:'Savefilename','sepember2.mat'

数据类型:char|细绳

变量名称@assignInbase.输出函数,指定为字符向量或字符串标量。

例子:'sevebariablename','sepebar2results'

数据类型:char|细绳

每次迭代后调用绘图函数,指定为'全部',函数句柄或功能函数的单元格阵列。绘图函数可以停止求解器,并且可以执行任意计算,包括创建变量,除绘图之外。

指定没有绘图功能[]

'全部'调用所有内置绘图函数。使用cell函数句柄指定多个绘图函数。

内置绘图函数出现在下表中。

模型图 - 当D≤2时申请 描述
@plotacquisitionFunction

绘制采集函数曲面。

@plotConstraintModels

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

也是绘图A.P(可行)表面。

还绘制错误模型,如果存在,那么它的范围-11.负值意味着模型可能不会出错,正值意味着它可能会产生错误。该模型是:

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

@plotobjectiveevaliveTimemodel.

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

@plotObjectiveModel

绘图乐趣模型表面,估计的位置最小,以及下一个拟议点的位置评估。对于一维问题,绘图封装在平均功能上方和低于平均功能的一个可靠间隔,并在平均值上方和低于平均值的噪声标准偏差。

跟踪图 - 适用于所有D. 描述
@plotobjective.

绘制每个观察到的函数值与函数评估的数量。

@plotobjectiveevaluationtime.

绘制每个观察到的函数评估运行时间与函数评估的数量。

@plotminobjective.

绘制最小观察和估计的函数值与函数评估的数量。

@plotelapsedtime.

绘制三条曲线:优化的总经过时间,总函数评估时间和总建模和点选择时间,所有与功能评估数。

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

请注意

当有耦合约束时,迭代显示器和绘图函数可以给出违反直接结果,例如:

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

  • 即使它显示出早期的可行点,优化也可以宣布不可行的问题。

这种行为的原因是,随着优化进展的情况,决定点是否可行。bayesopt确定关于其约束模型的可行性,并且该模型变化为bayesopt评估积分。因此,当最低点视为不可行时,“最小目标”曲线可以增加,迭代显示器可以显示后来认为不可行的可行点。

例子:“PlotFcn”、“所有”

数据类型:char|细绳|细胞|function_handle

初始化

全部收缩

初始评估点,指定为一个N-经过-D表,N是评估点数,和D是变量的数量。

请注意

要是itialx.提供,它被解释为评估的初始点。客观函数在评估itialx.

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

数据类型:桌子

对应的客观值itialx.,指定为一个长度 -N矢量,在那里N是评估点的数量。

例子:'initialobjective',[17; -3; -12.5]

数据类型:双倍的

约束违反耦合约束,指定为一个N-经过-K矩阵,其中N是评估点的数量和K是耦合约束的数量。有关详细信息,请参见耦合约束

数据类型:双倍的

错误itialx.,指定为一个长度 -N矢量与参赛作品-1或者1, 在哪里N是评估点的数量。指定-1没有错误,和1出错。

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

数据类型:双倍的

对应于itialx.,指定为一个长度 -N细胞矢量,在哪里N是评估点的数量。

例子:'InitialUserdata',{2,3,-1}

数据类型:细胞

客观函数的评估时间itialx.,指定为一个长度 -N矢量,在那里N是评估点的数量。时间以秒为单位测量。

数据类型:双倍的

第一个时代N迭代,指定为长度 -N矢量,在那里N是评估点的数量。时间以秒为单位测量。

数据类型:双倍的

输出参数

全部收缩

贝叶斯优化结果,返回为贝叶斯偏见目的。

更多关于

全部收缩

耦合约束

耦合约束是那些来自目标函数计算的限制的约束。看耦合约束

提示

  • 如果其中一个条件存在,贝叶斯优化不会再现:

    • 您可以指定一个名称包含的采集函数每秒,如'预期 - 每秒改善'.这每秒修饰符表明优化取决于目标函数的运行时间。有关详细信息,请参见采集函数类型

    • 您指定并行运行Bayesian Optimization。由于并行时序的不可递容性,并行贝叶斯优化不一定会产生可重复的结果。有关详细信息,请参见并行贝叶斯优化

扩展能力

介绍了R2016b