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.

Seleccione predictores para bosques aleatorios

En este ejemplo se muestra cómo elegir la técnica de selección de predictor de división adecuada para el conjunto de datos al cultivar un bosque aleatorio de árboles de regresión. Este ejemplo también muestra cómo decidir qué predictores son más importantes para incluir en los datos de entrenamiento.

Cargar y preprocesar datos

Cargue el conjunto de datos.carbig Considere un modelo que predice la economía de combustible de un automóvil debido a su número de cilindros, desplazamiento del motor, potencia, peso, aceleración, año del modelo y país de origen. Considere, y como variables categóricas.CylindersModel_YearOrigin

load carbig Cylinders = categorical(Cylinders); Model_Year = categorical(Model_Year); Origin = categorical(cellstr(Origin)); X = table(Cylinders,Displacement,Horsepower,Weight,Acceleration,Model_Year,Origin);

Determinar niveles en predictores

El algoritmo estándar de CART tiende a dividir los predictores con muchos valores únicos (niveles), por ejemplo, variables continuas, sobre aquellos con menos niveles, por ejemplo, variables categóricas. Si los datos son heterogéneos o las variables predictoras varían mucho en su número de niveles, considere la posibilidad de utilizar las pruebas de curvatura o de interacción para la selección de predictor dividido en lugar del carrito estándar.

Para cada predictor, determine el número de niveles en los datos. Una forma de hacerlo es definir una función anónima que:

  1. Convierte todas las variables en el tipo de datos categórico medianteCategórico

  2. Determina todas las categorías únicas ignorando los valores faltantes mediantecategories

  3. Cuenta las categorías mediantenumel

A continuación, aplique la función a cada variable utilizando.varfun

countLevels = @(x)numel(categories(categorical(x))); numLevels = varfun(countLevels,X,'OutputFormat','uniform');

Compare el número de niveles entre las variables predictoras.

figure bar(numLevels) title('Number of Levels Among Predictors') xlabel('Predictor variable') ylabel('Number of levels') h = gca; h.XTickLabel = X.Properties.VariableNames(1:end-1); h.XTickLabelRotation = 45; h.TickLabelInterpreter = 'none';

Las variables continuas tienen muchos más niveles que las variables categóricas. Debido a que el número de niveles entre los predictores varía tanto, el uso de CART estándar para seleccionar los predictores divididos en cada nodo de los árboles en un bosque aleatorio puede producir estimaciones de importancia imprecisas del predictor. En este caso, utilice la prueba de curvatura o la prueba de interacción. Especifique el algoritmo mediante el argumento de par nombre-valor.'PredictorSelection' Para obtener más información, consulte.Elija la técnica dividir predictor selección

Tren conjunto de árboles de regresión de bagged

Entrenar un conjunto embolvado de 200 árboles de regresión para estimar los valores de importancia predictora. Defina un alumno de árbol con estos argumentos de par nombre-valor:

  • : Utilice todas las variables predictoras en cada nodo para asegurarse de que cada árbol utiliza todas las variables predictoras.'NumVariablesToSample','all'

  • : Permite especificar el uso de la prueba de interacción para seleccionar predictores divididos.'PredictorSelection','interaction-curvature'

  • : Permite especificar el uso de divisiones sustitutas para aumentar la precisión porque el conjunto de datos incluye valores faltantes.'Surrogate','on'

t = templateTree('NumVariablesToSample','all',...     'PredictorSelection','interaction-curvature','Surrogate','on'); rng(1); % For reproducibility Mdl = fitrensemble(X,MPG,'Method','Bag','NumLearningCycles',200, ...     'Learners',t);

es un modelo.MdlRegressionBaggedEnsemble

Estimar el modelo

<math display="block">
<mrow>
<msup>
<mrow>
<mi>R</mi>
</mrow>
<mrow>
<mn>2</mn>
</mrow>
</msup>
</mrow>
</math>
utilizando predicciones fuera de bolsa.

yHat = oobPredict(Mdl); R2 = corr(Mdl.Y,yHat)^2
R2 = 0.8744 

explica el 87% de la variabilidad alrededor de la media.Mdl

Estimación de importancia predictora

Calcule los valores de importancia predictora mediante el permuting de observaciones fuera de bolsa entre los árboles.

impOOB = oobPermutedPredictorImportance(Mdl);

es un vector 1-por-7 de estimaciones de importancia predictora correspondiente a los predictores en.impOOBMdl.PredictorNames Las estimaciones no están sesgadas hacia los predictores que contienen muchos niveles.

Compare las estimaciones de importancia del predictor.

figure bar(impOOB) title('Unbiased Predictor Importance Estimates') xlabel('Predictor variable') ylabel('Importance') h = gca; h.XTickLabel = Mdl.PredictorNames; h.XTickLabelRotation = 45; h.TickLabelInterpreter = 'none';

Las estimaciones de mayor importancia indican predictores más importantes. El gráfico de barras sugiere que es el predictor más importante, seguido de y.Model_YearCylindersWeight Las variables y sólo tienen 13 y 5 niveles distintos, respectivamente, mientras que la variable tiene más de 300 niveles.Model_YearCylindersWeight

Compare las estimaciones de importancia del predictor mediante el permuting de observaciones fuera de bolsa y las estimaciones obtenidas sumando ganancias en el error medio cuadrado debido a divisiones en cada predictor. También, obtener las medidas de asociación predictoras estimadas por divisiones sustitutas.

[impGain,predAssociation] = predictorImportance(Mdl);  figure plot(1:numel(Mdl.PredictorNames),[impOOB' impGain']) title('Predictor Importance Estimation Comparison') xlabel('Predictor variable') ylabel('Importance') h = gca; h.XTickLabel = Mdl.PredictorNames; h.XTickLabelRotation = 45; h.TickLabelInterpreter = 'none'; legend('OOB permuted','MSE improvement') grid on

De acuerdo con los valores de, las variables, y parecen ser igualmente importantes.impGainDisplacementHorsepowerWeight

es una matriz de 7 por 7 de las medidas de asociación predictoras.predAssociation Las filas y columnas corresponden a los predictores en.Mdl.PredictorNames Puede deducir la fuerza de la relación entre pares de predictores utilizando los elementos de.predAssociation Los valores más grandes indican pares de predictores altamente correlacionados.

figure imagesc(predAssociation) title('Predictor Association Estimates') colorbar h = gca; h.XTickLabel = Mdl.PredictorNames; h.XTickLabelRotation = 45; h.TickLabelInterpreter = 'none'; h.YTickLabel = Mdl.PredictorNames;

predAssociation(1,2)
ans = 0.6871 

La asociación más grande está entre y, pero el valor no es lo suficientemente alto como para indicar una relación fuerte entre los dos predictores.CylindersDisplacement

Cultivar bosque aleatorio utilizando el conjunto de predictor reducido

Debido a que el tiempo de predicción aumenta con el número de predictores en bosques aleatorios, una buena práctica es crear un modelo utilizando tan pocos predictores como sea posible.

Cultivar un bosque aleatorio de 200 árboles de regresión usando sólo los dos mejores predictores. El valor predeterminado de es un tercio del número de predictores para la regresión, por lo que utiliza el algoritmo de bosque aleatorio.'NumVariablesToSample'templateTreefitrensemble

t = templateTree('PredictorSelection','interaction-curvature','Surrogate','on', ...     'Reproducible',true); % For reproducibility of random predictor selections MdlReduced = fitrensemble(X(:,{'Model_Year' 'Weight'}),MPG,'Method','Bag', ...     'NumLearningCycles',200,'Learners',t);

Calcule el

<math display="block">
<mrow>
<msup>
<mrow>
<mi>R</mi>
</mrow>
<mrow>
<mn>2</mn>
</mrow>
</msup>
</mrow>
</math>
del modelo reducido.

yHatReduced = oobPredict(MdlReduced); r2Reduced = corr(Mdl.Y,yHatReduced)^2
r2Reduced = 0.8627 

el

<math display="block">
<mrow>
<msup>
<mrow>
<mi>R</mi>
</mrow>
<mrow>
<mn>2</mn>
</mrow>
</msup>
</mrow>
</math>
para el modelo reducido está cerca de la
<math display="block">
<mrow>
<msup>
<mrow>
<mi>R</mi>
</mrow>
<mrow>
<mn>2</mn>
</mrow>
</msup>
</mrow>
</math>
del modelo completo. Este resultado sugiere que el modelo reducido es suficiente para la predicción.

Consulte también

| | | | |

Temas relacionados