Для каждой переменной в целевой функции создайте объект описания переменной с помощью optimizableVariable. Каждая переменная имеет уникальное имя и диапазон значений. Минимальный синтаксис для создания переменной:
variable = optimizableVariable(Name,Range)
Эта функция создает действительную переменную, которая находится в диапазоне от нижней границы Range(1) к верхней границе Range(2).
Можно указать три типа переменных в Type пара имя-значение:
'real' - Непрерывные вещественные значения между конечными границами. Дать Range как двухэлементный вектор [lower upper], которые представляют нижнюю и верхнюю границы.
'integer' - целочисленные значения между конечными границами, аналогично 'real'.
'categorical' - Массив ячеек имен возможных значений, таких как {'red','green','blue'}, который вы указываете в Range аргумент.
Для 'real' или 'integer' переменные, можно указать, что bayesopt поиск в пространстве с масштабированием журнала путем установки Transform пара имя-значение к 'log'. Для этого преобразования убедитесь, что нижняя граница в Range является строго позитивным.
Включить переменные для bayesopt в качестве вектора во втором аргументе.
results = bayesopt(fun,[xvar,ivar,rvar])
Чтобы исключить переменную из оптимизации, задайте Optimize кому false, либо в паре имя-значение optimizableVariable, или точечной нотацией:
xvar.Optimize = false;
Совет
Существует два имени, связанных с optimizableVariable:
Имя переменной рабочего пространства MATLAB ®
Имя переменной в оптимизации
Например,
xvar = optimizableVariable('spacevar',[1,100]);xvar является переменной рабочей области MATLAB, и 'spacevar' - переменная в оптимизации.
Используйте следующие имена:
Использовать xvar как элемент в векторе переменных, которым вы передаете bayesopt. Например,
results = bayesopt(fun,[xvar,tvar])
Использовать 'spacevar' в качестве имени переменной в оптимизации. Например, в целевой функции
function objective = mysvmfun(x,cdata,grp)
SVMModel = fitcsvm(cdata,grp,'KernelFunction','rbf',...
'BoxConstraint',x.spacevar,...
'KernelScale',x.tvar);
objective = kfoldLoss(crossval(SVMModel));Вещественная переменная от 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
Категориальная переменная цветов радуги:
var3 = 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