优化,在其最一般的形式,是定位一个点的过程,使一个实值函数称为目标函数.贝叶斯优化就是这样一个过程的名称。贝叶斯优化内部保持目标函数的高斯过程模型,并使用目标函数评估来训练模型。贝叶斯优化的一个创新是使用了获取函数,算法用它来确定下一个要计算的点。采集功能可以在目标函数建模较低的点上平衡采样,并探索尚未建模好的领域。有关详细信息,请参见贝叶斯优化算法.
贝叶斯优化是统计和机器学习工具箱™的一部分,因为它非常适合优化hyperparameters分类和回归算法。超参数是分类器或回归函数的内部参数,如支持向量机的框约束或鲁棒分类集成的学习率。万博1manbetx这些参数可以极大地影响分类器或回归器的性能,但通常很难或耗时地优化它们。看到贝叶斯优化特性.
通常,优化超参数意味着要尽量减少分类器或回归的交叉验证损失。
你可以通过以下几种方式执行贝叶斯优化:
fitcauto
和fitrauto
-传递预测器和响应数据fitcauto
或fitrauto
函数用于对模型类型和超参数值的选择进行优化。不同于其他方法,使用fitcauto
或fitrauto
不需要您在优化前指定单个模型;模型选择是优化过程的一部分。优化最大限度地减少交叉验证损失,这是使用一个多TreeBagger
模型fitcauto
和一个多RegressionGP
模型fitrauto
,而不是其他方法中使用的单一高斯过程回归模型。看到贝叶斯优化为fitcauto
和贝叶斯优化为fitrauto
.
分类学习者和回归学习者应用程序-选择Optimizable模型,并通过贝叶斯优化自动调整其超参数值。根据所选的验证选项,优化将模型损失降至最低。这种方法比使用合适的函数具有更少的调优选项,但允许您直接在应用程序中执行贝叶斯优化。看到分类学习应用中的超参数优化和回归学习应用中的超参数优化.
适合功能-包括OptimizeHyperparameters
名称-值对在许多拟合函数中自动应用贝叶斯优化。优化最小化了交叉验证的损失。与使用相比,这种方法提供的调优选项较少bayesopt
,但使您能够更轻松地执行贝叶斯优化。看到使用拟合函数的贝叶斯优化.
bayesopt
-通过调用对优化施加最大的控制bayesopt
直接。这种方法要求您编写一个目标函数,它不需要表示交叉验证损失。看到使用bayesopt的贝叶斯优化.
为了通过贝叶斯优化最小化交叉验证响应中的错误,请遵循以下步骤。
从中选择您的分类或回归求解器fitcdiscr
,fitcecoc
,fitcensemble
,fitckernel
,fitcknn
,fitclinear
,fitcnb
,fitcsvm
,fitctree
,fitrensemble
,fitrgp
,fitrkernel
,fitrlinear
,fitrsvm
,或fitrtree
.
确定要优化的超参数,并将它们传递到OptimizeHyperparameters
名称-值对。对于每个拟合函数,您可以从一组超参数中进行选择。看到适合函数的超参数,或使用hyperparameters
函数,或查阅适合函数参考页。
您可以传递参数名称的单元格数组。你也可以设置“汽车”
随着OptimizeHyperparameters
值,它选择要优化的一组典型超参数,或者“所有”
优化所有可用参数。
对于整体拟合函数fitcecoc
,fitcensemble
,fitrensemble
,也包括弱学习者的参数OptimizeHyperparameters
单元阵列。
对象的选项结构,可选地创建HyperparameterOptimizationOptions
名称-值对。看到适合函数的超参数优化选项.
使用适当的名称-值对调用fit函数。
有关示例,请参见使用贝叶斯优化法优化支持向量机分类器和优化一个增强回归集成.此外,每个拟合函数参考页面都包含一个贝叶斯优化示例。
bayesopt
使用。执行贝叶斯优化bayesopt
,按照以下步骤操作。
例如,请参见利用bayesopt优化交叉验证支持向量机分类器.
贝叶斯优化算法最适合这些问题类型。
特征 | 细节 |
---|---|
低维 | 贝叶斯优化在较低的维数中效果最好,通常是10个或更少。虽然贝叶斯优化可以用几十个变量解决一些问题,但不建议在维数高于50的情况下使用它。 |
昂贵的目标 | 贝叶斯优化设计的目标函数是评价缓慢。它有相当大的开销,每次迭代通常需要几秒钟。 |
低精度 | 贝叶斯优化并不一定会给出非常精确的结果。如果你有一个确定性的目标函数,你有时可以通过从 |
全球解决方案 | 贝叶斯优化是一种全局技术。与许多其他算法不同的是,要寻找一个全局解,你不必从不同的初始点开始算法。 |
Hyperparameters | 贝叶斯优化非常适合于优化hyperparameters另一个函数。超参数是控制函数行为的参数。例如, |
适合函数的超参数
函数名 | 合格的参数 |
---|---|
fitcdiscr |
δ γ DiscrimType |
fitcecoc |
编码 符合条件的 fitcdiscr 参数“学习者”,“判别” 符合条件的 fitckernel 参数“学习者”,“内核” 符合条件的 fitcknn 参数“学习者”,“资讯” 符合条件的 fitclinear 参数“学习者”,“线性” 符合条件的 fitcsvm 参数“学习者”,“支持向量机” 符合条件的 fitctree 参数“学习者”,“树” |
fitcensemble |
方法 NumLearningCycles LearnRate 符合条件的 fitcdiscr 参数“学习者”,“判别” 符合条件的 fitcknn 参数“学习者”,“资讯” 符合条件的 fitctree 参数“学习者”,“树” |
fitckernel |
“学习者” “KernelScale” “λ” “NumExpansionDimensions” |
fitcknn |
NumNeighbors 距离 DistanceWeight 指数 标准化 |
fitclinear |
λ 学习者 正则化 |
fitcnb |
DistributionNames 宽度 内核 |
fitcsvm |
BoxConstraint KernelScale KernelFunction PolynomialOrder 标准化 |
fitctree |
MinLeafSize MaxNumSplits SplitCriterion NumVariablesToSample |
fitrensemble |
方法 NumLearningCycles LearnRate 符合条件的 fitrtree 参数“学习者”,“树” :MinLeafSize MaxNumSplits NumVariablesToSample |
fitrgp |
σ BasisFunction KernelFunction KernelScale 标准化 |
fitrkernel |
学习者 KernelScale λ NumExpansionDimensions ε |
fitrlinear |
λ 学习者 正则化 |
fitrsvm |
BoxConstraint KernelScale ε KernelFunction PolynomialOrder 标准化 |
fitrtree |
MinLeafSize MaxNumSplits NumVariablesToSample |
在优化使用fit函数时,可以在HyperparameterOptimizationOptions
名称-值对。以结构形式给出值。结构中的所有字段都是可选的。
字段名 | 值 | 默认的 |
---|---|---|
优化器 |
|
“bayesopt” |
AcquisitionFunctionName |
名称包括的获取函数 |
“expected-improvement-per-second-plus” |
MaxObjectiveEvaluations |
目标函数评估的最大数目。 | 30. 为“bayesopt” 或“randomsearch” ,整个电网“gridsearch” |
MaxTime |
时间限制,指定为正实。时间限制以秒为单位,用 |
正 |
NumGridDivisions |
为“gridsearch” ,表示每个维度中值的数量。该值可以是一个正整数向量,给出每个维度的值数,也可以是一个适用于所有维度的标量。对于分类变量,该字段将被忽略。 |
10 |
ShowPlots |
指示是否显示图形的逻辑值。如果真正的 ,该字段绘制针对迭代次数的最佳目标函数值。如果有一个或两个优化参数,如果优化器 是“bayesopt” ,然后ShowPlots 并根据参数绘制目标函数模型。 |
真正的 |
SaveIntermediateResults |
指示何时是否保存结果的逻辑值优化器 是“bayesopt” .如果真正的 ,该字段将覆盖名为“BayesoptResults” 在每一个迭代。变量是aBayesianOptimization 对象。 |
假 |
详细的 |
显示到命令行。
具体操作请参见 |
1 |
UseParallel |
指示是否并行运行贝叶斯优化的逻辑值,这需要parallel Computing Toolbox™。由于并行定时的不可再现性,并行贝叶斯优化并不一定产生可再现的结果。有关详细信息,请参见平行的贝叶斯优化. | 假 |
重新分区 |
指示是否在每次迭代时重新划分交叉验证的逻辑值。如果
|
假 |
使用以下三个字段名中不超过一个。 | ||
CVPartition |
一个cvpartition 对象创建的cvpartition . |
“Kfold”,5 如果没有指定任何交叉验证字段 |
坚持 |
量程中的标量(0,1) 表示滞留率。 |
|
Kfold |
大于1的整数。 |