Существует два набора встроенных функций построения графика.
Образцовые графики — применяются когда 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
только что закончил итерацию. Обычно вы выполняете большую часть графического вывода или другие вычисления в этом состоянии.
сделанный
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: 52.1276 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]