exponenta event banner

Ограничения байесовской оптимизации

Границы

bayesopt требует конечных границ для всех переменных. (categorical переменные по своей природе ограничены в своих возможных значениях.) Передайте нижнюю и верхнюю границы для вещественных и целочисленных переменных в optimizableVariable.

bayesopt использует эти границы для образцов точек, равномерно или с логарифмическим масштабированием. Масштабирование для выборки устанавливается в optimizableVariable.

Например, для ограничения переменной X1 к значениям между 1e-6 и 1e3, масштабировано логарифмически,

xvar = optimizableVariable('X1',[1e-6,1e3],'Transform','log')

bayesopt включает конечные точки в свой диапазон. Поэтому нельзя использовать 0 в качестве нижней границы для преобразованной в журнал переменной.

Совет

Чтобы использовать нижнюю границу нуля в преобразованной в журнал переменной, задайте для нижней границы значение 1, то внутри целевой функции использовать x-1.

Детерминированные ограничения - XConstraintFcn

Иногда ваша проблема действительна или хорошо определена только для точек в определенной области, называемой возможной областью. Детерминированное ограничение - детерминированная функция, возвращающая true когда точка выполнима, и false когда точка неосуществима. Так что детерминированные ограничения не стохастические, и они являются функциями не группы точек, а отдельных точек.

Совет

Это более эффективно использовать optimizableVariable вместо детерминированных ограничений ограничивает оптимизацию прямоугольной областью.

Запись детерминированной функции ограничения с помощью сигнатуры

tf = xconstraint(X)
  • X представляет собой таблицу width-D произвольной высоты.

  • tf - вектор логического столбца, где tf(i) = true когда именно X(i,:) выполнимо.

Передача детерминированной функции ограничения в bayesopt XConstraintFcn пара имя-значение. Например,

results = bayesopt(fun,vars,'XConstraintFcn',@xconstraint)

bayesopt вычисляет детерминированные ограничения для тысяч точек, и поэтому выполняется быстрее, когда функция ограничения векторизована. См. раздел Векторизация.

Например, предположим, что переменные с именем 'x1' и 'x2' осуществимы, когда норма вектора [x1 x2] меньше, чем 6, и когда x1 <= x2. Следующая функция ограничения оценивает эти ограничения.

function tf = xconstraint(X)
tf1 = sqrt(X.x1.^2 + X.x2.^2) < 6;
tf2 = X.x1 <= X.x2;
tf = tf1 & tf2;

Условные ограничения - ConditionalVariableFcn

Условные ограничения - это функции, выполняющие одно из следующих двух условий:

  • Если некоторые переменные имеют определенные значения, для других переменных устанавливаются заданные значения.

  • Когда некоторые переменные имеют определенные значения, другие переменные имеют NaN или, для категориальных переменных, <undefined> значения.

Задайте условное ограничение, задав bayesopt ConditionalVariableFcn пара имя-значение к дескриптору функции, скажем @condvariablefcn. @condvariablefcn функция должна иметь подпись

Xnew = condvariablefcn(X)
  • X является шириной -D таблица произвольной высоты.

  • Xnew является таблицей того же типа и размера, что и X.

condvariablefcn наборы Xnew быть равным X, за исключением того, что он также устанавливает соответствующие переменные в каждой строке Xnew до правильных значений для ограничения.

Примечание

При наличии условных и детерминированных ограничений bayesopt сначала применяет условные зависимости. Поэтому, если функция условного ограничения может установить переменные как NaN или <undefined>убедитесь, что детерминированная функция ограничения может правильно обрабатывать эти значения.

Условные ограничения гарантируют разумность значений переменных. Поэтому bayesopt сначала применяет условные ограничения, чтобы все переданные значения были разумными.

Условное ограничение, устанавливающее значение переменной

Предположим, что выполняется оптимизация классификации с помощью fitcdiscrи вы оптимизируете оба 'DiscrimType' и 'Gamma' аргументы пары имя-значение. Когда 'DiscrimType' является одним из квадратичных типов, 'Gamma' должно быть 0 или ошибки решателя. В этом случае используйте следующую функцию условного ограничения:

function XTable = fitcdiscrCVF(XTable)
% Gamma must be 0 if discrim type is a quadratic
XTable.Gamma(ismember(XTable.DiscrimType, {'quadratic',...
        'diagQuadratic','pseudoQuadratic'})) = 0;
end

Условное ограничение, устанавливающее переменную в NaN

Предположим, что выполняется оптимизация классификации с помощью fitcsvmи вы оптимизируете оба 'KernelFunction' и 'PolynomialOrder' аргументы пары имя-значение. Когда 'KernelFunction' не является 'polynomial', 'PolynomialOrder' параметр не применяется. Следующая функция применяет это условное ограничение.

function Xnew = condvariablefcn(X)
Xnew = X;
Xnew.PolynomialOrder(Xnew.KernelFunction ~= 'polynomial') = NaN;

Строку кода можно сохранить следующим образом:

function X = condvariablefcn(X)
X.PolynomialOrder(Xnew.KernelFunction ~= 'polynomial') = NaN;

Кроме того, определите целевую функцию, которая не проходит 'PolynomialOrder' аргумент пары имя-значение для fitcsvm когда значение 'PolynomialOrder' является NaN.

fun = @(X)mysvmfun(X,predictors,responce,c)

function objective = mysvmfun(X,predictors,response,c)
    args = {predictors,response, ...
        'CVPartition',c, ...
        'KernelFunction',X.KernelFunction};
    if ~isnan(X.PolynomialOrder)
        args = [args,{'PolynomialOrder',X.PolynomialOrder}];
    end
    objective = kfoldLoss(fitcsvm(args{:}));
end

Связанные зависимости

Связанные ограничения - это ограничения, которые можно вычислить только путем вызова целевой функции. Эти ограничения могут быть стохастическими или детерминированными. Верните эти значения ограничений из целевой функции во втором аргументе. См. раздел Целевые функции байесовской оптимизации.

Целевая функция возвращает числовой вектор для связанных ограничений, по одной записи для каждого связанного ограничения. Для каждой записи отрицательное значение указывает, что ограничение выполнено (также называется выполнимым). Положительное значение указывает, что ограничение не выполнено (невозможно).

bayesopt автоматически создает связанное ограничение, называемое ограничением ошибки, для каждого прогона. Это ограничение включает bayesopt для моделирования точек, вызывающих ошибки при оценке объективной функции. Дополнительные сведения см. в разделах Ошибки целевой функции и predictError.

При наличии связанных ограничений в дополнение к ограничению ошибки:

  • Включить NumCoupledConstraints пара имя-значение в вашей bayesopt вызов (обязательно). Не включайте ограничение «Ошибка» в это число.

  • Если какие-либо связанные ограничения являются стохастическими, включите AreCoupledConstraintsDeterministic пара имя-значение и проход false для любого стохастического ограничения.

Проверьте значения связанных ограничений в каждой итерации, установив значение bayesopt Verbose пара имя-значение к 1 или 2.

Примечание

При наличии связанных ограничений функции итеративного отображения и графика могут давать противоположные результаты, такие как:

  • Минимальный целевой график может увеличиться.

  • Оптимизация может объявить проблему неосуществимой, даже если она показала более раннюю осуществимую точку.

Причиной такого поведения является то, что решение о том, является ли точка осуществимой, может изменяться по мере продвижения оптимизации. bayesopt определяет выполнимость в отношении своей модели ограничения, и эта модель изменяется как bayesopt вычисляет точки. Таким образом, график «минимальной цели» может увеличиваться, когда минимальная точка позже считается неосуществимой, а итерационный дисплей может показывать осуществимую точку, которая позже считается неосуществимой.

Пример см. в разделе Байесовская оптимизация со связанными ограничениями.

Байесовская оптимизация со связанными ограничениями

Связанное ограничение - это ограничение, которое может быть вычислено только путем оценки целевой функции. В этом случае целевой функцией является перекрестная проверка потери модели SVM. Связанное ограничение заключается в том, что число векторов поддержки не превышает 100. Подробности модели приведены в разделе Оптимизация кросс-проверенного классификатора SVM с использованием байесопта.

Создайте данные для классификации.

rng default
grnpop = mvnrnd([1,0],eye(2),10);
redpop = mvnrnd([0,1],eye(2),10);
redpts = zeros(100,2);
grnpts = redpts;
for i = 1:100
    grnpts(i,:) = mvnrnd(grnpop(randi(10),:),eye(2)*0.02);
    redpts(i,:) = mvnrnd(redpop(randi(10),:),eye(2)*0.02);
end
cdata = [grnpts;redpts];
grp = ones(200,1);
grp(101:200) = -1;
c = cvpartition(200,'KFold',10);
sigma = optimizableVariable('sigma',[1e-5,1e5],'Transform','log');
box = optimizableVariable('box',[1e-5,1e5],'Transform','log');

Целевой функцией является потеря перекрестной проверки модели SVM для секционирования. c. Связанным ограничением является число векторов поддержки минус 100,5. Это гарантирует, что 100 векторов поддержки дают отрицательное значение ограничения, а 101 вектор поддержки дает положительное значение. Модель имеет 200 точек данных, поэтому связанные значения ограничений находятся в диапазоне от -99,5 (всегда существует по крайней мере один вектор поддержки) до 99,5. Положительные значения означают, что ограничение не выполняется.

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

Пройти раздел c и данные подгонки cdata и grp к целевой функции fun путем создания fun как анонимная функция, включающая эти данные. См. раздел Параметризация функций.

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

Установите NumCoupledConstraints кому 1 таким образом, оптимизатор знает, что существует связанное ограничение. Задайте опции для печати модели зависимости.

results = bayesopt(fun,[sigma,box],'IsObjectiveDeterministic',true,...
    'NumCoupledConstraints',1,'PlotFcn',...
    {@plotMinObjective,@plotConstraintModels},...
    'AcquisitionFunctionName','expected-improvement-plus','Verbose',0);

Большинство точек приводит к невыполнимому числу векторов поддержки.

См. также

|

Связанные темы