使用贝叶斯优化选择最优的机器学习超参数
贝叶斯偏见
对象使用bayesopt
这个例子展示了如何创建一个贝叶斯偏见
通过使用bayesopt
最大限度地减少交叉验证损失。
优化KNN分类器的超级参数电离层
数据,即找到最小化交叉验证损耗的Knn HyperParameters。有bayesopt
最小化以下超参数:
最近的邻居大小从1到30
距离功能“chebychev”
,'euclidean'
, 和'minkowski'
.
为了再现性,设置随机种子,设置分区,并设置收集功能名称
选择'预期改善加'
.要抑制迭代显示,请设置'verbose'
到0
.通过分区c
和拟合数据X
和Y
目标函数乐趣
通过创建乐趣
作为包含此数据的匿名功能。看参数化功能(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);
设定NumCoupledConstraints
到1
所以优化器知道有一个耦合约束。设置绘制约束模型的选项。
结果= 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.
谁的价值
是一个功能手柄目标函数,指定为函数句柄或使用指α.
名称值对是真的
, 一种并行.Pool.Constant.
谁的价值
是函数句柄。通常情况下,乐趣
为具有可调超参数来控制其训练的机器学习模型返回损失(如误分类错误)的度量。乐趣
有这些签名:
目标=乐趣(x)% 或者(目标、约束)(x) =乐趣% 或者[目的,约束,userData] =有趣(x)
乐趣
接受x
,一个1-by-D
变量值以及返回表客观的
,代表目标函数值的真正标量有趣(x)
.
可选地,乐趣
也返回:
有关使用的详细信息并行.Pool.Constant.
和bayesopt
,请参阅将客观职能放在工人身上.
例子:@objfun.
数据类型:function_handle
vars.
- - - - - -变量描述优化的不变性
定义要调整的超参数的对象可变描述,指定为向量优化的不变性
定义要调整的超参数的对象。
例子:[x1,x2]
, 在哪里X1
和X2
是优化的不变性
对象
指定可选的逗号分离对名称,价值
论点。姓名
是参数名称和价值
是相应的价值。姓名
必须出现在引号内。您可以以任何顺序指定多个名称和值对参数name1,value1,...,namen,valuen
.
结果= Bayesopt(乐趣,vars,'获取功能名称','预期 - 改进 - 加')
“AcquisitionFunctionName”
- - - - - -功能选择下一个评估点'预期 - 每秒改善'
(默认)|'预期改善'
|'预期改善加'
|'预期 - 每秒改善'
|“较低的信任”
|'改善概率'
函数选择下一个评估点,指定为列出的选项之一。
收购函数,其名称包括每秒
不要产生可重复的结果,因为优化取决于目标函数的运行时间。收购函数,其名称包括加
当他们过度开发一个区域时,调整他们的行为。有关详细信息,请参见采集函数类型.
例子:'获取功能名称','预期 - 每秒改善'
'IsobjectiveDeterministic'
- - - - - -指定确定性目标函数错误的
(默认)|真的
指定确定的目标函数,指定为错误的
或者真的
.如果乐趣
是随机的(也就是说,有趣(x)
可以返回相同的不同值x
),然后设置IsobjectiveEterministic.
到错误的
.在这种情况下,bayesopt
估计优化期间的噪音水平。
例子:“IsObjectiveDeterministic”,真的
数据类型:逻辑
'探索力'
- - - - - -探索倾向0.5
(默认)|积极的现实'gpactivessize'
- - - - - -适合高斯过程模型gpactivessetsize.
或更少的点300
(默认)|正整数适合高斯过程模型gpactivessetsize.
或更少的点,指定为正整数。当bayesopt
已经访问了更多gpactivessetsize.
点,使用GP模型的后续迭代适合模型gpactivessetsize.
要点。bayesopt
在随访的情况下,在随访时选择均匀的点。使用更少的点导致更快的GP模型配件,以牺牲可能更少的准确配件为代价。
例子:'GPACTIVESERIZE',80
数据类型:双倍的
“UseParallel”
- - - - - -并行计算错误的
(默认)|真的
“平行方法”
- - - - - -平行工人客观函数值的估算方法'剪裁模型预测'
(默认)|'模型预测'
|'最大观察'
|'闵观察'
并行工人客观函数值的估算方法,指定为'剪裁模型预测'
,'模型预测'
,'最大观察'
, 或者'闵观察'
.生成一个评估的新点,bayesopt
适合所有要点的高斯进程,包括正在对工人进行评估的积分。适应这个过程,bayesopt
对工人上目前的点赋予目标函数值。并行摩托
指定用于归档的方法。
'剪裁模型预测'
- 赋予最大数量:
意味着在该点的平均高斯过程预测x
可行点之间的最低观察目标函数访问
所有可行点之间的最小模型预测
'模型预测'
- 赋予该点的平均高斯过程预测x
.
'最大观察'
-在可行点之间输入观测到的目标函数的最大值。
'闵观察'
-在可行点之间输入观测目标函数的最小值。
例子:'ParallyMethod','Max-Ingeged'
'minworkerutilization'
- - - - - -有宽度的积极平行工人地板(0.8 * NWORKERS)
(默认)|正整数对作为正整数指定的活动并行工人数量的容忍度。后bayesopt
分配指向评估,然后在计算要分配的新点之前,它检查是否少于MinWorkerUtilization
工人是活跃的。如果是这样,bayesopt
将绑定中的随机点分配给所有可用工人。除此以外,bayesopt
计算一个工人的最佳点。bayesopt
从装配点创造随机点快得多,因此这种行为导致工人的利用率更高,以可能较差的成本。有关详细信息,请参见并行贝叶斯优化.
例子:'minworkerutilizize',3
数据类型:双倍的
'maxobjectiveevaluations'
- - - - - -客观函数评估限制30.
(默认)|正整数目标函数评估限制,指定为正整数。
例子:'maxobjectiveevaluations',60
数据类型:双倍的
'numseedpoints'
- - - - - -初始评估点数4
(默认)|正整数初始评估点的数量,指定为正整数。bayesopt
根据该设置,在可变界限内随机选择这些点转变
每个变量设置(均匀'没有任何'
,对数间隔开“日志”
)。
例子:“NumSeedPoints”,10
数据类型:双倍的
'xconstraintfcn'
- - - - - -变量的确定性约束[]
(默认)|函数处理确定变量的确定性约束,指定为函数句柄。
有关详细信息,请参见确定性约束 - Xconstraintfcn.
例子:XConstraintFcn, @xconstraint
数据类型:function_handle
“ConditionalVariableFcn”
- - - - - -条件可变约束[]
(默认)|函数处理条件可变约束,指定为函数句柄。
有关详细信息,请参见条件约束 - 条件variafiesefcn.
例子:'conditionalvarifiesefcn',@ condfun
数据类型:function_handle
'numcoupledconstraints'
- - - - - -耦合约束的数量0
(默认)|正整数耦合约束的数量,指定为正整数。有关详细信息,请参见耦合约束.
NumCoupledConstraints
耦合约束时是必需的。
例子:'numcoupledconstraints',3
数据类型:双倍的
'arecoupledconstraintsdeterministic'
- - - - - -指示是否耦合约束是确定性的真的
对于所有耦合约束(默认)|逻辑矢量指示是否耦合约束是确定性的,指定为长度的逻辑向量NumCoupledConstraints
.有关详细信息,请参见耦合约束.
例子:“AreCoupledConstraintsDeterministic”(真的,假,真的)
数据类型:逻辑
'verbose'
- - - - - -命令行显示水平1
(默认)|0
|2
命令行显示级别,指定为0
,1
, 或者2
.
0
- 没有命令行显示。
1
-在每次迭代时,显示迭代次数、结果报告(见下一段)、目标函数模型、目标函数评估时间、最佳(最低)观测目标函数值、最佳(最低)估计目标函数值、观测约束值(如果有)。当并行优化时,显示还包括一个列,显示活动工作者的数量,在将一个作业分配给下一个工作者后计算。
每个迭代的结果报告都是以下之一:
接受
-目标函数返回一个有限值,且满足所有约束条件。
最好的事物
- 满足约束,目标函数返回可行点之间的最低值。
错误
-目标函数返回一个非有限实标量的值。
ideas.
—至少违反了一个约束。
2
- 与...一样1
,添加诊断信息,如时间选择下一个点,模型拟合时间,指示“加”获取功能声明过度开销,并且由于低于平利用率而被分配给随机点。
例子:'verbose',2
数据类型:双倍的
'outputfcn'
- - - - - -每次迭代后都会调用{}
(默认)|函数处理|功能函数阵列每次迭代后调用函数,指定为函数句柄或功能句柄阵列。输出函数可以停止求解器,并且可以执行任意计算,包括创建变量或绘图。使用单元格阵列指定多个输出函数。
有两个内置的输出函数:
@assignInbase.
构造一个贝叶斯偏见
在每个迭代处的实例,并将其分配给基础工作区中的变量。使用的使用变量名称savevariablename.
名称值对。
@savetofile.
构造一个贝叶斯偏见
每个迭代的实例并将其保存到当前文件夹中的文件中。使用该文件名选择文件名savefilename.
名称值对。
您可以编写自己的输出函数。有关详细信息,请参见贝叶斯优化输出功能.
例子:'outputfcn',{@ savetofile @myoutputfunction}
数据类型:细胞
|function_handle
'savefilename'
- - - - - -文件名@savetofile.
输出功能'Bayesoptresults.mat'
(默认)|字符向量|字符串标量文件名@savetofile.
输出函数,指定为字符向量或字符串标量。文件名可以包括路径,例如'../optimizations/september2.mat'
.
例子:'Savefilename','sepember2.mat'
数据类型:char
|细绳
'savevariablename'
- - - - - -变量名称@assignInbase.
输出功能'贝叶特遗露'
(默认)|字符向量|字符串标量变量名称@assignInbase.
输出函数,指定为字符向量或字符串标量。
例子:'sevebariablename','sepebar2results'
数据类型:char
|细绳
'plotfcn'
- - - - - -每次迭代后调用绘图函数{@plotobjectivemodel,@ plotminobjective}
(默认)|'全部'
|函数处理|功能函数阵列每次迭代后调用绘图函数,指定为'全部'
,函数句柄或功能函数的单元格阵列。绘图函数可以停止求解器,并且可以执行任意计算,包括创建变量,除绘图之外。
指定没有绘图功能[]
.
'全部'
调用所有内置绘图函数。使用cell函数句柄指定多个绘图函数。
内置绘图函数出现在下表中。
模型图 - 当D≤2时申请 | 描述 |
---|---|
@plotacquisitionFunction |
绘制采集函数曲面。 |
@plotConstraintModels |
绘制每个约束模型曲面。负值表示可行点。 也是绘图A.P(可行)表面。 还绘制错误模型,如果存在,那么它的范围 绘制误差= 2 *概率(误差) - 1。 |
@plotobjectiveevaliveTimemodel. |
绘制目标函数评价时间模型曲面。 |
@plotObjectiveModel |
绘图 |
跟踪图 - 适用于所有D. | 描述 |
---|---|
@plotobjective. |
绘制每个观察到的函数值与函数评估的数量。 |
@plotobjectiveevaluationtime. |
绘制每个观察到的函数评估运行时间与函数评估的数量。 |
@plotminobjective. |
绘制最小观察和估计的函数值与函数评估的数量。 |
@plotelapsedtime. |
绘制三条曲线:优化的总经过时间,总函数评估时间和总建模和点选择时间,所有与功能评估数。 |
您可以编写自己的绘图功能。有关详细信息,请参见贝叶斯优化绘图功能.
当有耦合约束时,迭代显示器和绘图函数可以给出违反直接结果,例如:
一个最低目标情节可以增加。
即使它显示出早期的可行点,优化也可以宣布不可行的问题。
这种行为的原因是,随着优化进展的情况,决定点是否可行。bayesopt
确定关于其约束模型的可行性,并且该模型变化为bayesopt
评估积分。因此,当最低点视为不可行时,“最小目标”曲线可以增加,迭代显示器可以显示后来认为不可行的可行点。
例子:“PlotFcn”、“所有”
数据类型:char
|细绳
|细胞
|function_handle
'itialx'
- - - - - -初始评估点numseedpoints.
-经过-D
界限内随机初始点(默认)|N
-经过-D
桌子初始评估点,指定为一个N
-经过-D
表,N
是评估点数,和D
是变量的数量。
要是itialx.
提供,它被解释为评估的初始点。客观函数在评估itialx.
.
如果还提供了任何其他初始化参数,itialx.
被解释为先验函数求值数据。不计算目标函数。任何缺失的值都被设置为南
.
数据类型:桌子
'initialbjective'
- - - - - -对应的客观值itialx.
[]
(默认)|长度-N
向量对应的客观值itialx.
,指定为一个长度 -N
矢量,在那里N
是评估点的数量。
例子:'initialobjective',[17; -3; -12.5]
数据类型:双倍的
'初始激动言语'
- - - - - -约束违反耦合约束[]
(默认)|N
-经过-K
矩阵约束违反耦合约束,指定为一个N
-经过-K
矩阵,其中N
是评估点的数量和K
是耦合约束的数量。有关详细信息,请参见耦合约束.
数据类型:双倍的
'InitialErrorvalues'
- - - - - -错误itialx.
[]
(默认)|长度-N
矢量与参赛作品-1
或者1
错误itialx.
,指定为一个长度 -N
矢量与参赛作品-1
或者1
, 在哪里N
是评估点的数量。指定-1
没有错误,和1
出错。
例子:'InitialErrorvalues',[ - 1,-1,-1,-1,1]
数据类型:双倍的
'InitialUserdata'
- - - - - -对应于itialx.
[]
(默认)|长度-N
细胞矢量'initialobjectiveevalive it'
- - - - - -客观函数的评估时间itialx.
[]
(默认)|长度-N
向量客观函数的评估时间itialx.
,指定为一个长度 -N
矢量,在那里N
是评估点的数量。时间以秒为单位测量。
数据类型:双倍的
'InitialIentationtimes'
- - - - - -第一个时代N
迭代{}
(默认)|长度-N
向量第一个时代N
迭代,指定为长度 -N
矢量,在那里N
是评估点的数量。时间以秒为单位测量。
数据类型:双倍的
要并行运行,请设置“UseParallel”
选择真的
.
设定'使用反应',真实
对此函数调用中的名称值对参数。
有关并行计算的更多通用信息,请参见使用自动并行支持运行MATLAB功能万博1manbetx(并行计算工具箱)。
您单击了与此MATLAB命令对应的链接:
在MATLAB命令窗口中输入它来运行命令。Web浏览器不支持MATLAB命令。万博1manbetx
您还可以从以下列表中选择一个网站:
选择中国网站(中文或英文)以获得最佳网站性能。其他MathWorks国家站点没有针对您所在位置的访问进行优化。