Esta página aún no se ha traducido para esta versión. Puede ver la versión más reciente de esta página en inglés.

Funciones de trazado de optimización bayesiana

Funciones de trazado integradas

Hay dos conjuntos de funciones de trazado integradas.

Parcelas modelo: aplicar cuando D ≤ 2Descripción
@plotAcquisitionFunction

Graficar la superficie de la función de adquisición.

@plotConstraintModels

Trace cada superficie del modelo de restricción. Los valores negativos indican puntos factibles.

También trazar una superficie (factible).P

También Trace el modelo de error, si existe, que va desde a.–11 Los valores negativos significan que el modelo probablemente no error, los valores positivos significan que probablemente haga el error. El modelo es:

Error de trazado = 2 * probabilidad (error) – 1.

@plotObjectiveEvaluationTimeModel

Trace la superficie del modelo de tiempo de evaluación de función objetiva.

@plotObjectiveModel

Trace la superficie del modelo, la ubicación estimada del mínimo y la ubicación del siguiente punto propuesto para evaluar.fun Para problemas unidimensionales, trazar sobres un intervalo creíble por encima y por debajo de la función media, y sobres una desviación estándar de ruido por encima y por debajo de la media.

Trazar trazados: aplicar a todos los DDescripción
@plotObjective

Trace cada valor de función observado frente al número de evaluaciones de función.

@plotObjectiveEvaluationTime

Trace cada tiempo de ejecución de evaluación de función observada frente al número de evaluaciones de función.

@plotMinObjective

Graficar los valores mínimos observados y estimados de la función frente al número de evaluaciones de función.

@plotElapsedTime

Trace tres curvas: el tiempo total transcurrido de la optimización, el tiempo total de evaluación de la función y el tiempo total de modelado y selección de puntos, todo en comparación con el número de evaluaciones de función.

Nota

Cuando hay restricciones acopladas, la visualización iterativa y las funciones de trazado pueden dar resultados contradictorio como:

  • Una trama puede aumentar.minimum objective

  • La optimización puede declarar un problema inviable incluso cuando mostró un punto factible anterior.

La razón de este comportamiento es que la decisión sobre si un punto es factible puede cambiar a medida que avanza la optimización. determina la viabilidad con respecto a su modelo de restricción, y este modelo cambia como puntos de evaluación.bayesoptbayesopt Por lo tanto, una trama de "objetivo mínimo" puede aumentar cuando el punto mínimo se considera más tarde inviable, y la pantalla iterativa puede mostrar un punto factible que más tarde se considera inviable.

Sintaxis de función de trazado personalizado

Una función de trazado personalizada tiene la misma sintaxis que una función de salida personalizada (véase):Funciones de salida de optimización bayesiana

stop = plotfun(results,state)

pasa las variables y a la función.bayesoptresultsEstado La función devuelve, que se establece para detener las iteraciones o para continuar las iteraciones.stoptruefalse

es un objeto de clase que contiene la información disponible sobre los cálculos.resultsBayesianOptimization

tiene estos valores posibles:Estado

  • — está a punto de comenzar a iterar.'initial'bayesopt Utilice este estado para configurar un trazado o para realizar otras inicializaciones.

  • — acaba de terminar una iteración.'iteration'bayesopt Generalmente, usted realiza la mayor parte del trazado u otros cálculos en este estado.

  • — acaba de terminar su iteración final.'done'bayesopt Limpie los trazados o prepare de otro modo la función de trazado para cerrarla.

Cree una función de trazado personalizada

En este ejemplo se muestra cómo crear una función de trazado personalizada.bayesopt Además, muestra cómo utilizar la información en la propiedad de un objeto.UserDataBayesianOptimization

Sentencia de problema

El problema es encontrar los parámetros de una clasificación de la máquina de vectores de soporte (SVM) para minimizar la pérdida de validación cruzada. El modelo específico es el mismo que en.Optimice un clasificador SVM con validación cruzada mediantebayesopt Por lo tanto, la función objetiva es esencialmente la misma, excepto que también calcula, en este caso el número de vectores de soporte en un modelo SVM ajustado a los parámetros actuales.UserData

Cree una función de trazado personalizada que trace el número de vectores de soporte en el modelo SVM a medida que avanza la optimización. Para dar acceso a la función de trazado al número de vectores de soporte, cree una tercera salida, para devolver el número de vectores de soporte.UserData

Función objetivo

Cree una función objetiva que calcule la pérdida de validación cruzada para una partición de validación cruzada fija y que devuelva el número de vectores de soporte en el modelo resultante.

 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  

Función de trazado personalizado

Cree una función de trazado personalizada que utilice la información calculada en.UserData Hacer que la función trace tanto el número actual de restricciones como el número de restricciones para el modelo con la mejor función objetiva encontrada.

 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  

Configure el modelo

Genere diez puntos base para cada clase.

rng default grnpop = mvnrnd([1,0],eye(2),10); redpop = mvnrnd([0,1],eye(2),10); 

Genere 100 puntos de datos de cada clase.

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 

Coloque los datos en una matriz y haga un vector que etiqueta la clase de cada punto.grp

cdata = [grnpts;redpts]; grp = ones(200,1); % Green label 1, red label -1 grp(101:200) = -1; 

Compruebe la clasificación básica de todos los datos utilizando los parámetros predeterminados de SVM.

SVMModel = fitcsvm(cdata,grp,'KernelFunction','rbf','ClassNames',[-1 1]); 

Configure una partición para corregir la validación cruzada. Sin este paso, la validación cruzada es aleatoria, por lo que la función objetiva no es determinista.

c = cvpartition(200,'KFold',10); 

Compruebe la precisión de validación cruzada del modelo ajustado original.

loss = kfoldLoss(fitcsvm(cdata,grp,'CVPartition',c,...     'KernelFunction','rbf','BoxConstraint',SVMModel.BoxConstraints(1),...     'KernelScale',SVMModel.KernelParameters.Scale)) 
 loss =      0.1350  

Prepare variables para la optimización

La función objetiva toma una entrada y devuelve el valor de pérdida de validación cruzada de.z = [rbf_sigma,boxconstraint]z Tome los componentes de variables positivas, de transformación logaritmo entre y.z1e-51e5 Elija un amplio rango porque no sabe qué valores son propensos a ser buenos.

sigma = optimizableVariable('sigma',[1e-5,1e5],'Transform','log'); box = optimizableVariable('box',[1e-5,1e5],'Transform','log'); 

Establecer función de trazado y llamar al optimizador

Busca los mejores parámetros usando.[sigma,box]bayesopt Para reproducibilidad, seleccione la función de adquisición.'expected-improvement-plus' La función de adquisición predeterminada depende del tiempo de ejecución, por lo que puede dar resultados variables.

Trace el número de vectores de soporte como una función del número de iteración y trace el número de vectores de soporte para los mejores parámetros encontrados.

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: 138.1693                          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]  

Temas relacionados