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