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

Встроенные функции построения графика

Существует два набора встроенных функций построения графика.

Графики модели — применяются когда D ≤ 2Описание
@plotAcquisitionFunction

Постройте поверхность функции захвата.

@plotConstraintModels

Постройте каждую ограничительную поверхность модели. Отрицательные величины указывают на допустимые точки.

Также постройте P (выполнимая) поверхность.

Также постройте ошибочную модель, если она существует, который лежит в диапазоне от –1 к 1. Отрицательные величины означают, что модель, вероятно, не делает ошибки, положительные значения означают, что это, вероятно, делает ошибку. Модель:

Нанесенная на график ошибка = 2*Probability (ошибка) – 1.

@plotObjectiveEvaluationTimeModel

Постройте поверхность модели времени оценки целевой функции.

@plotObjectiveModel

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

Проследите графики — применяются ко всему DОписание
@plotObjective

Постройте каждое наблюдаемое значение функции по сравнению с количеством вычислений функции.

@plotObjectiveEvaluationTime

Постройте каждое наблюдаемое время выполнения вычисления функции по сравнению с количеством вычислений функции.

@plotMinObjective

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

@plotElapsedTime

График три кривые: общее прошедшее время оптимизации, общее время вычисления функции и общее моделирование и время выбора точки, все по сравнению с количеством вычислений функции.

Примечание

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

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

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

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

Пользовательский синтаксис функции построения графика

Пользовательская функция построения графика имеет тот же синтаксис как пользовательская выходная функция (см. Байесовы Выходные функции Оптимизации):

stop = plotfun(results,state)

bayesopt передает results и state переменные к вашей функции. Ваша функция возвращает stop, который вы устанавливаете на true остановить итерации, или к false продолжать итерации.

results объект класса BayesianOptimization это содержит доступную информацию о расчетах.

state имеет эти возможные значения:

  • 'initial'bayesopt собирается начать выполнять итерации. Используйте это состояние, чтобы настроить график или выполнить другие инициализации.

  • 'iteration'bayesopt только что законченный итерация. Обычно вы выполняете большую часть графического вывода или другие вычисления в этом состоянии.

  • 'done'bayesopt только что законченный его итоговая итерация. Очистите графики или в противном случае подготовьтесь к функции построения графика закрываться.

Создайте пользовательскую функцию построения графика

В этом примере показано, как создать пользовательскую функцию построения графика для bayesopt. Это далее показывает, как использовать информацию в UserData свойство BayesianOptimization объект.

Проблемный оператор

Проблема состоит в том, чтобы найти, что параметры классификации Машин опорных векторов (SVM) минимизируют перекрестную подтвержденную потерю. Определенная модель эквивалентна в, Оптимизируют перекрестный Подтвержденный Классификатор Используя bayesopt. Поэтому целевая функция является по существу тем же самым, кроме него также вычисляет UserData, в этом случае количество векторов поддержки в модели SVM, подбиравшей к текущим параметрам.

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

Целевая функция

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

function [f,viol,nsupp] = mysvmminfn(x,cdata,grp,c)
SVMModel = fitcsvm(cdata,grp,'KernelFunction','rbf',...
    'KernelScale',x.sigma,'BoxConstraint',x.box);
f = kfoldLoss(crossval(SVMModel,'CVPartition',c));
viol = [];
nsupp = sum(SVMModel.IsSupportVector);
end

Пользовательская функция построения графика

Создайте пользовательскую функцию построения графика, которая использует информацию, вычисленную в UserData. Имейте график функций и текущее количество ограничений и количество ограничений для модели с лучшей найденной целевой функцией.

function stop = svmsuppvec(results,state)
persistent hs nbest besthist nsupptrace
stop = false;
switch state
    case 'initial'
        hs = figure;
        besthist = [];
        nbest = 0;
        nsupptrace = [];
    case 'iteration'
        figure(hs)
        nsupp = results.UserDataTrace{end};   % get nsupp from UserDataTrace property.
        nsupptrace(end+1) = nsupp; % accumulate nsupp values in a vector.
        if (results.ObjectiveTrace(end) == min(results.ObjectiveTrace)) || (length(results.ObjectiveTrace) == 1) % current is best
            nbest = nsupp;
        end
        besthist = [besthist,nbest];
        plot(1:length(nsupptrace),nsupptrace,'b',1:length(besthist),besthist,'r--')
        xlabel 'Iteration number'
        ylabel 'Number of support vectors'
        title 'Number of support vectors at each iteration'
        legend('Current iteration','Best objective','Location','best')
        drawnow
end

Настройка модели

Сгенерируйте десять базисных точек для каждого класса.

rng default
grnpop = mvnrnd([1,0],eye(2),10);
redpop = mvnrnd([0,1],eye(2),10);

Сгенерируйте 100 точек данных каждого класса.

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

Поместите данные в одну матрицу и сделайте векторный grp это помечает класс каждой точки.

cdata = [grnpts;redpts];
grp = ones(200,1);
% Green label 1, red label -1
grp(101:200) = -1;

Проверяйте основную классификацию всех данных с помощью параметров SVM по умолчанию.

SVMModel = fitcsvm(cdata,grp,'KernelFunction','rbf','ClassNames',[-1 1]);

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

c = cvpartition(200,'KFold',10);

Проверяйте точность перекрестной проверки исходной подобранной модели.

loss = kfoldLoss(fitcsvm(cdata,grp,'CVPartition',c,...
    'KernelFunction','rbf','BoxConstraint',SVMModel.BoxConstraints(1),...
    'KernelScale',SVMModel.KernelParameters.Scale))
loss =

    0.1350

Подготовьте переменные к оптимизации

Целевая функция берет вход z = [rbf_sigma,boxconstraint] и возвращает значение перекрестной проверки потерь z. Возьмите компоненты z как положительные, преобразованные в журнал переменные между 1e-5 и 1e5. Выберите широкий спектр, потому что вы не знаете, какие значения, вероятно, будут хороши.

sigma = optimizableVariable('sigma',[1e-5,1e5],'Transform','log');
box = optimizableVariable('box',[1e-5,1e5],'Transform','log');

Установите функцию построения графика и вызовите оптимизатор

Ищите лучшие параметры [sigma,box] использование bayesopt. Для воспроизводимости выберите 'expected-improvement-plus' функция захвата. Функция захвата по умолчанию зависит от времени выполнения, таким образом, это может дать различные результаты.

Постройте количество векторов поддержки в зависимости от номера итерации и постройте количество векторов поддержки для лучших найденных параметров.

obj = @(x)mysvmminfn(x,cdata,grp,c);
results = bayesopt(obj,[sigma,box],...
    'IsObjectiveDeterministic',true,'Verbose',0,...
    'AcquisitionFunctionName','expected-improvement-plus',...
    'PlotFcn',{@svmsuppvec,@plotObjectiveModel,@plotMinObjective})
results = 

  BayesianOptimization with properties:

                      ObjectiveFcn: @(x)mysvmminfn(x,cdata,grp,c)
              VariableDescriptions: [1x2 optimizableVariable]
                           Options: [1x1 struct]
                      MinObjective: 0.0750
                   XAtMinObjective: [1x2 table]
             MinEstimatedObjective: 0.0750
          XAtMinEstimatedObjective: [1x2 table]
           NumObjectiveEvaluations: 30
                  TotalElapsedTime: 40.6641
                         NextPoint: [1x2 table]
                            XTrace: [30x2 table]
                    ObjectiveTrace: [30x1 double]
                  ConstraintsTrace: []
                     UserDataTrace: {30x1 cell}
      ObjectiveEvaluationTimeTrace: [30x1 double]
                IterationTimeTrace: [30x1 double]
                        ErrorTrace: [30x1 double]
                  FeasibilityTrace: [30x1 logical]
       FeasibilityProbabilityTrace: [30x1 double]
               IndexOfMinimumTrace: [30x1 double]
             ObjectiveMinimumTrace: [30x1 double]
    EstimatedObjectiveMinimumTrace: [30x1 double]

Похожие темы