Существует два набора встроенных функций построения графика.
Графики модели — применяются когда D ≤ 2 | Описание |
---|---|
@plotAcquisitionFunction | Постройте поверхность функции приобретения. |
@plotConstraintModels | Постройте каждую ограничительную поверхность модели. Отрицательные величины указывают на допустимые точки. Также постройте P (выполнимая) поверхность. Также постройте ошибочную модель, если она существует, который лежит в диапазоне от Нанесенная на график ошибка = 2*Probability (ошибка) – 1. |
@plotObjectiveEvaluationTimeModel | Постройте поверхность модели времени оценки целевой функции. |
@plotObjectiveModel | Постройте |
Проследите графики — применяются ко всему D | Описание |
---|---|
@plotObjective | Постройте каждое наблюдаемое значение функции по сравнению с количеством вычислений функции. |
@plotObjectiveEvaluationTime | Постройте каждое наблюдаемое время выполнения вычисления функции по сравнению с количеством вычислений функции. |
@plotMinObjective | Постройте минимальные наблюдаемые и предполагаемые значения функции по сравнению с количеством вычислений функции. |
@plotElapsedTime | График три кривые: общее прошедшее время оптимизации, общее время вычисления функции и общее моделирование и время выбора точки, все по сравнению с количеством вычислений функции. |
Когда существуют связанные ограничения, итеративное отображение и функции построения графика могут дать парадоксальные результаты, такие как:
Минимальный объективный график может увеличиться.
Оптимизация может объявить проблему, неосуществимую, даже когда она показала более раннюю допустимую точку.
Причина этого поведения состоит в том, что решение о том, выполнима ли точка, может измениться, в то время как оптимизация прогрессирует. bayesopt
определяет выполнимость относительно ее ограничительной модели и этой модели изменения как bayesopt
оценивает точки. Таким образом, “минимальный объективный” график может увеличиться, когда минимальную точку позже считают неосуществимой, и итеративное отображение может показать допустимую точку, которую позже считают неосуществимой.
Пользовательская функция построения графика имеет тот же синтаксис как пользовательская выходная функция (см. Байесовы Выходные функции Оптимизации):
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: 55.7338 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]