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

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

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

Модели графиков - Применить Когда D ≤ 2Описание
@plotAcquisitionFunction

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

@plotConstraintModels

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

Также постройте график P (допустимой) поверхности.

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

Нанесенная ошибка = 2 * Вероятность (ошибка) - 1.

@plotObjectiveEvaluationTimeModel

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

@plotObjectiveModel

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

Графики трассировки - Применить ко всем DОписание
@plotObjective

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

@plotObjectiveEvaluationTime

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

@plotMinObjective

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

@plotElapsedTime

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

Примечание

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

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

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

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

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

Пользовательская функция построения графика имеет тот же синтаксис, что и пользовательская выходная функция (см. Bayesian Optimization Output Functions):

stop = plotfun(results,state)

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

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

state имеет следующие возможные значения:

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

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

  • 'done'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: 43.8851
                         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]

Похожие темы