Существует два набора встроенных функций графика.
| Графики модели - Применить при 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 с использованием байесопта». Следовательно, целевая функция по существу та же, за исключением того, что она также вычисляет 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]


