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