贝叶斯优化matlab

目录

bayesopt函数

         一、形式

二、输入变量

贝叶斯算法步骤(bayesopt)

一、构建变量

二、创建目标函数

三、定义优化选项

四、调用bayseopt

五、检查解决方案

例子:使用bayesopt创建一个贝叶斯优化对象


bayesopt函数

一、形式

results = bayesopt(fun,vars)
results = bayesopt(fun,vars,Name,Value)

 results = bayesopt(fun,vars) 试图找到最小化fun(vars)的变量vars的值(变量)

 results = bayesopt(fun,vars,Name,Value) 根据名称Name、值Value等参数修改优化过程.

二、输入变量

1.fun——目标函数

        具有三种形式:

objective = fun(x)
[objective,constraints] = fun(x)
[objective,constraints,UserData] = fun(x)

 objective:表示目标函数值fun (x)的实标量

 constraints:表示是否违反耦合约束的真实向量,constraint(j) > 0意味着违反,constraint(j) < 0意味着不违反

 UserData:任何类型的实体(如标量、矩阵、结构或对象)

2.vars——变量描述

        optimizableVariable的向量定义要调整的超参数的变量对象

3.Name—Value 变量对

        指定可选的以逗号分隔的名称、值参数对。名称是参数名称,值是对应的值。名称必须显示在引号内。您可以以任意顺序指定多个名称和值对参数,如Name1,Value1,...,NameN,ValueN。

        下面为常用的参数表,其他更多到MATLAB帮助文档看:

AcquisitionFunctionName要选择下一个评估点的函数'expected-improvement-per-second-plus' (default) | 'expected-improvement' | 'expected-improvement-plus' | 'expected-improvement-per-second' | 'lower-confidence-bound' | 'probability-of-improvement'

IsObjectiveDeterministic

指定确定性目标函数

false (default) | true

GPActiveSetSize

拟合高斯过程模型到GPActiveSet大小或更少的点数字

UseParallel

是否为并行计算

false (default) | true

ParallelMethod

并行工作目标函数值的计算方法

'clipped-model-prediction' (default) | 'model-prediction' | 'max-observed' | 'min-observed'

MaxObjectiveEvaluations

目标函数评价极限数字

MaxTime

时间限制数字
NumSeedPoints初始评估点数数字

贝叶斯算法步骤(bayesopt)

一、构建变量

        对于目标函数中的每个变量,使用optimizableVariable创建一个变量描述对象。每个变量都有一个唯一的名称和一个值的范围。变量创建的最小语法是:

variable = optimizableVariable(Name,Range)

        函数创建了一个实变量,其范围从下界Range(1)到上界Range(2);

        可以在 ‘ Type ’ 名称-值对中指定三种类型的变量:

  • ‘real’——有限边界之间的连续实值。将Range作为双元素向量[lower  upper],表示下界和上界。
  • 'integer'——有限边界之间的整数值,类似于“实数”
  • ‘categorical’——包含可能值的名称的单元格数组,例如您在“Range”参数中指定的{'red','green','blue'}

        下面举一些例子:

        从0到1的实数变量:

var1 = optimizableVariable('xvar',[0 1])

var1 = 
  optimizableVariable with properties:

         Name: 'xvar'
        Range: [0 1]
         Type: 'real'
    Transform: 'none'
     Optimize: 1

        在对数尺度上,从1到1000的整数变量:

var2 = optimizableVariable('ivar',[1 1000],'Type','integer','Transform','log')

var2 = 
  optimizableVariable with properties:

         Name: 'ivar'
        Range: [1 1000]
         Type: 'integer'
    Transform: 'log'
     Optimize: 1

         彩虹色的分类变量:

ar3 = optimizableVariable('rvar',{'r' 'o' 'y' 'g' 'b' 'i' 'v'},'Type','categorical')

 var3 = 
  optimizableVariable with properties:

         Name: 'rvar'
        Range: {'r'  'o'  'y'  'g'  'b'  'i'  'v'}
         Type: 'categorical'
    Transform: 'none'
     Optimize: 1

二、创建目标函数

        贝叶斯优化目标函数,需要创建约束条件,并要在目标函数中包含额外的参数

       bayesopt尝试最小化一个目标函数。相反,如果需要最大化一个函数,则将目标函数设置为您要最大化的函数的负值。

       bayesopt将一个变量表传递给目标函数。这些变量具有之前上一步所声明的名称和类型。

        这里举一个MATLAB中的例子:目标函数返回一个具有参数框和sigma的SVM模型的交叉验证拟合中的损失。当支持向量的数量超过100(100是可行的,101不是)时,该目标还返回一个正的耦合约束函数(不可行)。

function [objective,constraint] = mysvmfun(x,cdata,grp)
SVMModel = fitcsvm(cdata,grp,'KernelFunction','rbf',...
    'BoxConstraint',x.box,...
    'KernelScale',x.sigma);
objective = kfoldLoss(crossval(SVMModel));
constraint = sum(SVMModel.SupportVectors) - 100.5;

三、定义优化选项

        即bayseopt Name,Value值对。不需要将任何选项传递给bayesopt,但您通常会这样做,特别是在试图改进解决方案时。

四、调用bayseopt

五、检查解决方案

这里可以决定通过使用恢复来恢复优化,或者重新启动优化,这通常使用修改后的选项。

例子:使用bayesopt创建一个贝叶斯优化对象

        本示例展示了如何通过使用bayesopt来创建一个贝叶斯优化对象来最小化交叉验证损失。

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

  • 最近的社区的大小从1到30
  • 距离函数“切比切夫”、“欧几里得”和“闵可夫斯基”。

        为了实现再现性,设置随机种子,设置分区,并将“AcquisitionFunctionName”选项设置为“expected-improvement-plus”。若要抑制迭代显示,请将“Verbose”设置为0。通过创建一个匿名函数来合并这些数据,将分区c和拟合数据X和Y传递给目标函数fun。

load ionosphere
rng default
num = optimizableVariable('n',[1,30],'Type','integer');
dst = optimizableVariable('dst',{'chebychev','euclidean','minkowski'},'Type','categorical');
c = cvpartition(351,'Kfold',5);
fun = @(x)kfoldLoss(fitcknn(X,Y,'CVPartition',c,'NumNeighbors',x.n,...
    'Distance',char(x.dst),'NSMethod','exhaustive'));
results = bayesopt(fun,[num,dst],'Verbose',0,...
    'AcquisitionFunctionName','expected-improvement-plus')

运行结果:

        博主第一次写博客,有问题多多谅解 😊😊

  • 3
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值