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.

Las restricciones en la optimización bayesiana

Límites

requiere límites finitos en todas las variables. (las variables son, por naturaleza, limitadas en sus valores posibles.)bayesoptcategorical Pase los límites inferior y superior de las variables reales y con valores enteros en.optimizableVariable

utiliza estos límites para muestrear puntos, ya sea uniformemente o con escala de registro.bayesopt Configure el escalado para el muestreo.optimizableVariable

Por ejemplo, para restringir una variable a valores entre y, escalado logarmicamente,X11e-61e3

xvar = optimizableVariable('X1',[1e-6,1e3],'Transform','log')

incluye los puntos finales en su rango.bayesopt Por lo tanto, no puede utilizar 0 como un límite inferior para una variable de transformación de registro.

Sugerencia

Para utilizar un límite inferior cero en una variable transformada en log, establezca el límite inferior y, a continuación, dentro del uso de la función objetiva.1x-1

Restricciones deterministas —XConstraintFcn

A veces su problema es válido o bien definido sólo para los puntos en una determinada región, llamado el.región factible Una restricción determinista es una función determinista que se devuelve cuando un punto es factible y cuando un punto es inviable.truefalse Por lo tanto, las restricciones deterministas no son estocásticas y no son funciones de un grupo de puntos, sino de puntos individuales.

Sugerencia

Es más eficaz usar límites, en lugar de restricciones deterministas, para limitar la optimización a una región rectangular.optimizableVariable

Escriba una función de restricción determinista mediante la firma

tf = xconstraint(X)
  • es una tabla width-D de altura arbitraria.X

  • es un vector de columna lógico, donde exactamente cuando es factible.tftf(i) = trueX(i,:)

Pase la función de restricción determinista en el par nombre-valor.bayesoptXConstraintFcn Por ejemplo,

results = bayesopt(fun,vars,'XConstraintFcn',@xconstraint)

evalúa las restricciones deterministas en miles de puntos y, por lo tanto, se ejecuta más rápido cuando se Vectoriza la función de restricción.bayesopt Ver.Vectorización (MATLAB)

Por ejemplo, supongamos que las variables nombradas y son factibles cuando la norma del vector es menor que, y cuando.'x1''x2'[x1 x2]6x1 <= x2 La siguiente función de restricción evalúa estas restricciones.

function tf = xconstraint(X) tf1 = sqrt(X.x1.^2 + X.x2.^2) < 6; tf2 = X.x1 <= X.x2; tf = tf1 & tf2;

Restricciones condicionales —ConditionalVariableFcn

Las restricciones condicionales son funciones que aplican una de las dos condiciones siguientes:

  • Cuando algunas variables tienen ciertos valores, otras variables se establecen en valores dados.

  • Cuando algunas variables tienen ciertos valores, otras variables tienen o, para variables categóricas, valores.NaN<undefined>

Especifique una restricción condicional estableciendo el par nombre-valor en un identificador de función, digamos.bayesoptConditionalVariableFcn@condvariablefcn La función debe tener la firma@condvariablefcn

Xnew = condvariablefcn(X)
  • es una tabla de anchura de altura arbitraria.XD

  • es una tabla del mismo tipo y tamaño que.XnewX

establece que sea igual a, excepto que también establece las variables relevantes en cada fila de a los valores correctos para la restricción.condvariablefcnXnewXXnew

Nota

Si tiene restricciones condicionales y restricciones deterministas, primero aplica las restricciones condicionales.bayesopt Por lo tanto, si la función de restricción condicional puede establecer variables o, asegúrese de que la función de restricción determinista puede procesar estos valores correctamente.NaN<undefined>

Las restricciones condicionales aseguran que los valores de las variables sean razonables. Por lo tanto, aplica las restricciones condicionales primero para que todos los valores pasados sean razonables.bayesopt

Restricción condicional que establece un valor de variable

Suponga que está optimizando una clasificación mediante y optimiza los argumentos de par nombre-valor.fitcdiscr'DiscrimType''Gamma' Cuando es uno de los tipos cuadráticos, debe ser o los errores del solucionador.'DiscrimType''Gamma'0 En ese caso, utilice esta función de restricción condicional:

function XTable = fitcdiscrCVF(XTable) % Gamma must be 0 if discrim type is a quadratic XTable.Gamma(ismember(XTable.DiscrimType, {'quadratic',...         'diagQuadratic','pseudoQuadratic'})) = 0; end 

Restricción condicional que establece una variable paraNaN

Suponga que está optimizando una clasificación mediante y optimiza los argumentos de par nombre-valor.fitcsvm'KernelFunction''PolynomialOrder' Cuando no lo está, el ajuste no se aplica.'KernelFunction''polynomial''PolynomialOrder' La siguiente función impone esta restricción condicional.

function Xnew = condvariablefcn(X) Xnew = X; Xnew.PolynomialOrder(Xnew.KernelFunction ~= 'polynomial') = NaN;

Puede guardar una línea de código de la siguiente manera:

function X = condvariablefcn(X) X.PolynomialOrder(Xnew.KernelFunction ~= 'polynomial') = NaN;

Además, defina una función objetiva que no pase el argumento de par nombre-valor a cuando el valor de is.'PolynomialOrder'fitcsvm'PolynomialOrder'NaN

fun = @(X)mysvmfun(X,predictors,responce,c)  function objective = mysvmfun(X,predictors,response,c)     args = {predictors,response, ...         'CVPartition',c, ...         'KernelFunction',X.KernelFunction};     if ~isnan(X.PolynomialOrder)         args = [args,{'PolynomialOrder',X.PolynomialOrder}];     end     objective = kfoldLoss(fitcsvm(args{:})); end

Restricciones acopladas

son restricciones que solo se pueden evaluar llamando a la función objetiva.Las restricciones acopladas Estas restricciones pueden ser estocásticas o deterministas. Devuelva estos valores de restricción de la función objetiva en el segundo argumento. Ver.Funciones objetivo de optimización bayesiana

La función objetiva devuelve un vector numérico para las restricciones acopladas, una entrada para cada restricción acoplada. Para cada entrada, un valor negativo indica que la restricción se satisface (también llamada factible). Un valor positivo indica que la restricción no se satisface (imposible).

crea automáticamente una restricción acoplada, denominada restricción de error, para cada ejecución.bayesopt Esta restricción permite modelar puntos que causan errores en la evaluación de la función objetiva.bayesopt Para obtener más información, consulte y.Errores de función objetivapredictError

Si tiene restricciones acopladas además de la restricción error:

  • Incluya el par nombre-valor en la llamada (obligatorio).NumCoupledConstraintsbayesopt No incluya la restricción error en este número.

  • Si alguna de sus restricciones acopladas es estocástica, incluya el par nombre-valor y pase para cualquier restricción estocástica.AreCoupledConstraintsDeterministicfalse

Observe los valores de restricción acoplados en cada iteración estableciendo el par nombre-valor en o.bayesoptVerbose12

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.

Para ver un ejemplo, vea.Optimización Bayesiana con restricciones acopladas

Optimización Bayesiana con restricciones acopladas

Una restricción acoplada es aquella que solo se puede evaluar evaluando la función objetiva. En este caso, la función objetiva es la pérdida validada entre un modelo SVM. La restricción acoplada es que el número de vectores de soporte no es superior a 100. Los detalles del modelo están en.Optimice un clasificador SVM con validación cruzada mediantebayesopt

Cree los datos para la clasificación.

rng default grnpop = mvnrnd([1,0],eye(2),10); redpop = mvnrnd([0,1],eye(2),10); 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 cdata = [grnpts;redpts]; grp = ones(200,1); grp(101:200) = -1; c = cvpartition(200,'KFold',10); sigma = optimizableVariable('sigma',[1e-5,1e5],'Transform','log'); box = optimizableVariable('box',[1e-5,1e5],'Transform','log'); 

La función objetiva es la pérdida de validación cruzada del modelo SVM para la partición.c La restricción acoplada es el número de vectores de soporte menos 100,5. Esto garantiza que los vectores de soporte 100 den un valor de restricción negativo, pero 101 vectores de soporte dan un valor positivo. El modelo tiene 200 puntos de datos, por lo que los valores de restricción acoplados oscilan entre-99,5 (siempre hay al menos un vector de soporte) a 99,5. Los valores positivos significan que la restricción no se satisface.

 function [objective,constraint] = mysvmfun(x,cdata,grp,c) SVMModel = fitcsvm(cdata,grp,'KernelFunction','rbf',...     'BoxConstraint',x.box,...     'KernelScale',x.sigma); cvModel = crossval(SVMModel,'CVPartition',c); objective = kfoldLoss(cvModel); constraint = sum(SVMModel.IsSupportVector)-100.5;  
fun = @(x)mysvmfun(x,cdata,grp,c); 

Fije el para así que el optimizador sabe que hay una restricción acoplada.NumCoupledConstraints1 Configure las opciones para trazar el modelo de restricción.

results = bayesopt(fun,[sigma,box],'IsObjectiveDeterministic',true,...     'NumCoupledConstraints',1,'PlotFcn',...     {@plotMinObjective,@plotConstraintModels},...     'AcquisitionFunctionName','expected-improvement-plus','Verbose',0); 

La mayoría de los puntos conducen a un número infactible de vectores de soporte.

Consulte también

|

Temas relacionados