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.

Tunea Random Forest usando error cuantil y optimización bayesiana

En este ejemplo se muestra cómo implementar la optimización bayesiana para ajustar los hiperparámetros de un bosque aleatorio de árboles de regresión mediante el error cuantil. Ajustar un modelo utilizando un error cuantil, en lugar de un error cuadrado medio, es apropiado si planea utilizar el modelo para predecir cuantiles condicionales en lugar de medios condicionales.

Cargar y preprocesar datos

Cargue el conjunto de datos.carsmall Considere un modelo que predice la economía de combustible mediana de un automóvil debido a su aceleración, número de cilindros, cilindrada del motor, potencia, fabricante, año del modelo y peso. Considere, y como variables categóricas.CylindersMfgModel_Year

load carsmall Cylinders = categorical(Cylinders); Mfg = categorical(cellstr(Mfg)); Model_Year = categorical(Model_Year); X = table(Acceleration,Cylinders,Displacement,Horsepower,Mfg,...     Model_Year,Weight,MPG); rng('default'); % For reproducibility 

Especifique parámetros de ajuste

Considere la posibilidad de ajustar:

  • La complejidad (profundidad) de los árboles en el bosque. Los árboles profundos tienden a sobreajustarse, pero los árboles poco profundos tienden a ser subaptos. Por lo tanto, especifique que el número mínimo de observaciones por hoja sea como máximo 20.

  • Al cultivar los árboles, el número de predictores para muestrear en cada nodo. Especifique el muestreo de 1 a través de todos los predictores.

, la función que implementa la optimización Bayesiana, requiere que se pasen estas especificaciones como objetos.bayesoptoptimizableVariable

maxMinLS = 20; minLS = optimizableVariable('minLS',[1,maxMinLS],'Type','integer'); numPTS = optimizableVariable('numPTS',[1,size(X,2)-1],'Type','integer'); hyperparametersRF = [minLS; numPTS]; 

es una matriz de objetos 2 por 1.hyperparametersRFOptimizableVariable

También debe considerar ajustar el número de árboles en el conjunto. tiende a elegir bosques aleatorios que contengan muchos árboles porque los conjuntos con más estudiantes son más precisos.bayesopt Si los recursos de computación disponibles son una consideración, y prefieres conjuntos con menos árboles, entonces considera ajustar el número de árboles por separado de los otros parámetros o penalizando los modelos que contienen muchos estudiantes.

Definir función objetiva

Defina una función objetiva para optimizar el algoritmo de optimización bayesiana. La función debe:

  • Acepte los parámetros para sintonizar como entrada.

  • Entrena un bosque aleatorio usando.TreeBagger En la llamada, especifique los parámetros que desea ajustar y especifique la devolución de los índices fuera de bolsa.TreeBagger

  • Calcule el error de cuantil fuera de bolsa basado en la mediana.

  • Devuelva el error de cuantil fuera de bolsa.

 function oobErr = oobErrRF(params,X) %oobErrRF Trains random forest and estimates out-of-bag quantile error %   oobErr trains a random forest of 300 regression trees using the %   predictor data in X and the parameter specification in params, and then %   returns the out-of-bag quantile error based on the median. X is a table %   and params is an array of OptimizableVariable objects corresponding to %   the minimum leaf size and number of predictors to sample at each node. randomForest = TreeBagger(300,X,'MPG','Method','regression',...     'OOBPrediction','on','MinLeafSize',params.minLS,...     'NumPredictorstoSample',params.numPTS); oobErr = oobQuantileError(randomForest); end   

Minimice el objetivo mediante la optimización bayesiana

Encuentre el modelo que logra el error cuantil mínimo, penalizado y fuera de la bolsa con respecto a la complejidad del árbol y el número de predictores para muestrear en cada nodo usando la optimización bayesiana. Especifique la función de mejora esperada Plus como la función de adquisición y suprima la impresión de la información de optimización.

results = bayesopt(@(params)oobErrRF(params,X),hyperparametersRF,...     'AcquisitionFunctionName','expected-improvement-plus','Verbose',0); 

es un objeto que contiene, entre otras cosas, el mínimo de la función objetiva y los valores de hiperparámetros optimizados.resultsBayesianOptimization

Visualice el mínimo observado de la función objetiva y los valores de hiperparámetros optimizados.

bestOOBErr = results.MinObjective bestHyperparameters = results.XAtMinObjective 
 bestOOBErr =      1.0890   bestHyperparameters =    1×2 table      minLS    numPTS     _____    ______        7        7     

Modelo de tren utilizando hiperparámetros optimizados

Entrenar un bosque aleatorio utilizando todo el conjunto de datos y los valores de hiperparámetros optimizados.

Mdl = TreeBagger(300,X,'MPG','Method','regression',...     'MinLeafSize',bestHyperparameters.minLS,...     'NumPredictorstoSample',bestHyperparameters.numPTS); 

es objeto optimizado para la predicción mediana.MdlTreeBagger Puede predecir la mediana de la economía de combustible dados los Datos predictores pasando y los nuevos datos.MdlquantilePredict

Consulte también

| | | |

Temas relacionados