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

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

Выходная функция является функцией, которая вызвана в конце каждой итерации 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 только что закончил итерацию.

  • сделанный 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.29551 |     0.19943 |     0.19943 |           24 |    chebychev |
|    2 | Best   |     0.16809 |     0.14402 |     0.16809 |      0.1747 |            9 |    euclidean |
|    3 | Best   |     0.12536 |     0.10833 |     0.12536 |     0.12861 |            3 |    chebychev |

__________________________________________________________
Optimization completed.
Total function evaluations: 3
Total elapsed time: 5.3326 seconds.
Total objective function evaluation time: 0.54786

Best observed feasible point:
    n       dst   
    _    _________

    3    chebychev

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

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

    3    chebychev

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

Похожие темы