Байесовские выходные функции оптимизации

Что такое выходная функция байесовской оптимизации?

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

Кроме остановки итераций, выходные функции не могут изменить ход байесовской оптимизации. Они просто следят за прогрессом оптимизации.

Встроенные выходные функции

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

  • @assignInBase - Сохраняет результаты после каждой итерации в переменную с именем 'BayesoptResults' в рабочей рабочей области. Чтобы выбрать другое имя, передайте SaveVariableName Пара "имя-значение".

  • @saveToFile - Сохраняет результаты после каждой итерации в файл с именем 'BayesoptResults.mat' в текущей папке. Чтобы выбрать другое имя или папку, передайте SaveFileName Пара "имя-значение".

Например, чтобы сохранить результаты после каждой итерации в переменную рабочей области с именем 'BayesIterations',

results = bayesopt(fun,vars,'OutputFcn',@assignInBase, ...
    'SaveVariableName','BayesIterations')

Пользовательские выходные функции

Написание пользовательской выходной функции с сигнатурой

stop = outputfun(results,state)

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

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

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

  • 'initial'bayesopt собирается начать итерацию.

  • 'iteration'bayesopt только что завершила итерацию.

  • 'done'bayesopt только что закончил свою окончательную итерацию.

Для получения примера см. «Байесовская выходная функция оптимизации».

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

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

function stop = outputfun(results,state)
persistent h
stop = false;
switch state
    case 'initial'
        h = figure;
    case 'iteration'
        if results.MinObjective < 0.13
            stop = true;
        end
        figure(h)
        tms = results.IterationTimeTrace;
        plot(1:numel(tms),tms')
        xlabel('Iteration Number')
        ylabel('Time for Iteration')
        title('Time for Each Iteration')
        drawnow
end

Целевой функцией является потеря перекрестной валидации классификации KNN ionosphere данные. Загрузите данные и, для повторяемости, установите случайный поток по умолчанию.

load ionosphere
rng default

Оптимизируйте по соседству размер от 1 до 30, и для трех метрик расстояния.

num = optimizableVariable('n',[1,30],'Type','integer');
dst = optimizableVariable('dst',{'chebychev','euclidean','minkowski'},'Type','categorical');
vars = [num,dst];

Установите раздел перекрестной проверки и целевую функцию. Для воспроизводимости установите AcquisitionFunctionName на 'expected-improvement-plus'. Запустите оптимизацию.

c = cvpartition(351,'Kfold',5);
fun = @(x)kfoldLoss(fitcknn(X,Y,'CVPartition',c,'NumNeighbors',x.n,...
    'Distance',char(x.dst),'NSMethod','exhaustive'));
results = bayesopt(fun,vars,'OutputFcn',@outputfun,...
    'AcquisitionFunctionName','expected-improvement-plus');
|=====================================================================================================|
| Iter | Eval   | Objective   | Objective   | BestSoFar   | BestSoFar   |            n |          dst |
|      | result |             | runtime     | (observed)  | (estim.)    |              |              |
|=====================================================================================================|
|    1 | Best   |     0.19943 |     0.23067 |     0.19943 |     0.19943 |           24 |    chebychev |
|    2 | Best   |     0.16809 |     0.14758 |     0.16809 |      0.1747 |            9 |    euclidean |
|    3 | Best   |     0.12536 |     0.10547 |     0.12536 |     0.12861 |            3 |    chebychev |

__________________________________________________________
Optimization completed.
Total function evaluations: 3
Total elapsed time: 4.842 seconds
Total objective function evaluation time: 0.48372

Best observed feasible point:
    n       dst   
    _    _________

    3    chebychev

Observed objective function value = 0.12536
Estimated objective function value = 0.12861
Function evaluation time = 0.10547

Best estimated feasible point (according to models):
    n       dst   
    _    _________

    3    chebychev

Estimated objective function value = 0.12861
Estimated function evaluation time = 0.15309

Похожие темы