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

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

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

Образцовые графики — применяются когда 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 только что закончил итерацию. Обычно вы выполняете большую часть графического вывода или другие вычисления в этом состоянии.

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

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

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

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

Проблема состоит в том, чтобы найти, что параметры классификации Машин вектора поддержки (SVM) минимизируют перекрестную подтвержденную потерю. Определенная модель эквивалентна в, Оптимизируют перекрестный Подтвержденный Классификатор 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: 52.1276
                         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]

Похожие темы