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.

Mejorar árboles de clasificación y árboles de regresión

Puede ajustar los árboles estableciendo pares nombre-valor en y.fitctreefitrtree El resto de esta sección describe cómo determinar la calidad de un árbol, Cómo decidir qué pares de nombre-valor para establecer y cómo controlar el tamaño de un árbol.

Examinando el error de reenvío

es la diferencia entre los datos de entrenamiento de respuesta y las predicciones que el árbol hace de la respuesta en función de los datos de entrenamiento de entrada.Error de reenvío Si el error de reenvío es alto, no puede esperar que las predicciones del árbol sean buenas. Sin embargo, tener un error de reenvío bajo no garantiza buenas predicciones para los nuevos datos. El error de reenvío suele ser una estimación excesivamente optimista del error predictivo en los datos nuevos.

Error de reenvío de árbol de clasificación

En este ejemplo se muestra cómo examinar el error de reenvío de un árbol de clasificación.

Cargue los datos de iris de Fisher.

load fisheriris

Entrenar un árbol de clasificación predeterminado utilizando todo el conjunto de datos.

Mdl = fitctree(meas,species);

Examine el error de reenvío.

resuberror = resubLoss(Mdl)
resuberror = 0.0200 

El árbol clasifica casi todos los datos del iris de Fisher correctamente.

Validación cruzada

Para obtener una mejor idea de la precisión predictiva de su árbol para los nuevos datos, valide el árbol de forma cruzada. De forma predeterminada, la validación cruzada divide los datos de entrenamiento en 10 partes al azar. Entrena 10 árboles nuevos, cada uno en nueve partes de los datos. A continuación, examina la precisión predictiva de cada árbol nuevo en los datos que no se incluyen en la formación de ese árbol. Este método proporciona una buena estimación de la precisión predictiva del árbol resultante, ya que prueba los nuevos árboles en los nuevos datos.

Validación cruzada de un árbol de regresión

En este ejemplo se muestra cómo examinar la precisión de la representación y la validación cruzada de un árbol de regresión para predecir el kilometraje en función de los datos.carsmall

Cargue el conjunto de datos.carsmall Considere la aceleración, el desplazamiento, la potencia y el peso como predictores de MPG.

load carsmall X = [Acceleration Displacement Horsepower Weight];

Cultivar un árbol de regresión usando todas las observaciones.

rtree = fitrtree(X,MPG);

Calcule el error de la muestra.

resuberror = resubLoss(rtree)
resuberror = 4.7188 

La pérdida de reenvío para un árbol de regresión es el error cuadrático medio. El valor resultante indica que un error predictivo típico para el árbol es sobre la raíz cuadrada de 4,7, o un bit sobre 2.

Estime el MSE de la validación cruzada.

rng 'default'; cvrtree = crossval(rtree); cvloss = kfoldLoss(cvrtree)
cvloss = 25.6450 

La pérdida validada cruzada es casi 25, lo que significa que un error predictivo típico para el árbol en los nuevos datos es de aproximadamente 5. Esto demuestra que la pérdida de validación cruzada suele ser mayor que la pérdida de reenvío simple.

Elija la técnica dividir predictor selección

El algoritmo estándar de CART tiende a seleccionar predictores continuos que tienen muchos niveles. A veces, tal selección puede ser falsa y también puede enmascarar predictores más importantes que tienen menos niveles, como predictores categóricos. Es decir, el proceso de selección de predictor en cada nodo es sesgado. Además, CART estándar tiende a perderse las interacciones importantes entre pares de predictores y la respuesta.

Para mitigar el sesgo de selección y aumentar la detección de interacciones importantes, puede especificar el uso de la curvatura o las pruebas de interacción mediante el argumento de par nombre-valor.'PredictorSelection' El uso de la prueba de curvatura o interacción tiene la ventaja añadida de producir estimaciones de mayor importancia predictoras que el carrito estándar.

En esta tabla se resumen las técnicas de selección de predictor admitidas.

TécnicaValor'PredictorSelection'DescripciónVelocidad de entrenamientoCuándo especificar
CARRITO estándar[1]Predeterminado

Selecciona el predictor dividido que maximiza la ganancia de criterio dividido sobre todas las posibles divisiones de todos los predictores.

Línea base para la comparación

Especifique si alguna de estas condiciones es verdadera:

  • Todos los predictores son continuos

  • La importancia del predictor no es el objetivo del análisis

  • Para impulsar árboles de decisión

Prueba de curvatura[2][3]'curvature'Selecciona el predictor dividido que minimiza el-valor de las pruebas de Chi-cuadrado de independencia entre cada predictor y la respuesta.pComparable al carrito estándar

Especifique si alguna de estas condiciones es verdadera:

  • Las variables predictoras son heterogéneas

  • La importancia del predictor es un objetivo de análisis

  • Mejore la interpretación de árboles

Prueba de interacción[3]'interaction-curvature'Elige el predictor dividido que minimiza el-valor de las pruebas de Chi-cuadrado de independencia entre cada predictor y la respuesta (es decir, realiza pruebas de curvatura), y que minimiza el-valor de una prueba de Chi-cuadrado de independencia entre cada par de predictores y respuesta.ppMás lento que el carrito estándar, especialmente cuando el conjunto de datos contiene muchas variables predictoras.

Especifique si alguna de estas condiciones es verdadera:

  • Las variables predictoras son heterogéneas

  • Sospechas de asociaciones entre pares de predictores y la respuesta

  • La importancia del predictor es un objetivo de análisis

  • Mejore la interpretación de árboles

Para más detalles sobre las técnicas de selección de predictores:

Profundidad de control o "Leafiness"

Cuando crezca un árbol de decisiones, tenga en cuenta su simplicidad y poder predictivo. Un árbol profundo con muchas hojas suele ser muy preciso en los datos de entrenamiento. Sin embargo, no se garantiza que el árbol muestre una precisión comparable en un conjunto de pruebas independiente. Un árbol frondoso tiende a sobreformarse (o sobreajustarse), y su precisión de prueba suele ser mucho menor que su precisión de entrenamiento (representación). Por el contrario, un árbol superficial no alcanza una alta precisión de entrenamiento. Pero un árbol superficial puede ser más robusto: su precisión de entrenamiento podría estar cerca de la de un conjunto de pruebas representativo. Además, un árbol superficial es fácil de interpretar. Si no tiene suficientes datos para el entrenamiento y la prueba, calcule la precisión del árbol mediante la validación cruzada.

y tienen tres argumentos de par nombre-valor que controlan la profundidad de los árboles de decisión resultantes:fitctreefitrtree

  • : El número máximo de divisiones de nodos de bifurcación es por árbol.MaxNumSplitsMaxNumSplits Establezca un valor grande para obtener un árbol profundo.MaxNumSplits El valor predeterminado es.size(X,1) – 1

  • — Cada hoja tiene al menos observaciones.MinLeafSizeMinLeafSize Establecer pequeños valores de para obtener árboles profundos.MinLeafSize El valor predeterminado es.1

  • : Cada nodo de ramificación del árbol tiene al menos observaciones.MinParentSizeMinParentSize Establecer pequeños valores de para obtener árboles profundos.MinParentSize El valor predeterminado es.10

Si especifica y, el alumno utiliza la configuración que produce árboles con hojas más grandes (es decir, árboles menos profundos):MinParentSizeMinLeafSize

MinParent = max(MinParentSize,2*MinLeafSize)

Si se suministra, el software divide un árbol hasta que se satisface uno de los tres criterios de división.MaxNumSplits

Para obtener un método alternativo de control de la profundidad del árbol, consulte.Poda

Seleccione profundidad de árbol adecuada

En este ejemplo se muestra cómo controlar la profundidad de un árbol de decisión y cómo elegir una profundidad adecuada.

Cargue los datos.ionosphere

load ionosphere

Genere un conjunto de valores exponencialmente espaciados que representen el número mínimo de observaciones por nodo hoja.10100

leafs = logspace(1,2,10);

Cree árboles de clasificación con validación cruzada para los datos.ionosphere Especifique para cultivar cada árbol utilizando un tamaño de hoja mínimo.leafs

rng('default') N = numel(leafs); err = zeros(N,1); for n=1:N     t = fitctree(X,Y,'CrossVal','On',...         'MinLeafSize',leafs(n));     err(n) = kfoldLoss(t); end plot(leafs,err); xlabel('Min Leaf Size'); ylabel('cross-validated error');

El mejor tamaño de la hoja es entre aproximadamente y observaciones por hoja.2050

Compare el árbol casi óptimo con al menos las observaciones por hoja con el árbol predeterminado, que utiliza observaciones por nodo principal y observación por hoja.40101

DefaultTree = fitctree(X,Y); view(DefaultTree,'Mode','Graph')

 OptimalTree = fitctree(X,Y,'MinLeafSize',40); view(OptimalTree,'mode','graph')

resubOpt = resubLoss(OptimalTree); lossOpt = kfoldLoss(crossval(OptimalTree)); resubDefault = resubLoss(DefaultTree); lossDefault = kfoldLoss(crossval(DefaultTree)); resubOpt,resubDefault,lossOpt,lossDefault
resubOpt = 0.0883 
resubDefault = 0.0114 
lossOpt = 0.1054 
lossDefault = 0.1111 

El árbol casi óptimo es mucho más pequeño y da un error de reenvío mucho más alto. Sin embargo, proporciona una precisión similar para los datos con validación cruzada.

Poda

La poda optimiza la profundidad del árbol (leafiness) fusionando las hojas en la misma rama del árbol. describe un método para seleccionar la profundidad óptima para un árbol.Profundidad de control o "Leafiness" A diferencia de esa sección, no es necesario cultivar un nuevo árbol para cada tamaño de nodo. En su lugar, cultivar un árbol profundo, y podar al nivel que elija.

Podar un árbol en la línea de comando utilizando el prune método (clasificación) o prune método (regresión). Alternativamente, puede podar un árbol de forma interactiva con el visor de árbol:

view(tree,'mode','graph')

Para podar un árbol, el árbol debe contener una secuencia de poda. De forma predeterminada, ambos y calculan una secuencia de poda para un árbol durante la construcción.fitctreefitrtree Si construye un árbol con el par nombre-valor establecido, o si poda un árbol a un nivel más pequeño, el árbol no contiene la secuencia de poda completa.'Prune''off' Genere la secuencia de poda completa con el prune método (clasificación) o prune método (regresión).

Podar un árbol de clasificación

Este ejemplo crea un árbol de clasificación para los datos y lo poda a un buen nivel.ionosphere

Cargue los datos:ionosphere

load ionosphere

Construya un árbol de clasificación predeterminado para los datos:

tree = fitctree(X,Y);

Ver el árbol en el visor interactivo:

view(tree,'Mode','Graph')

Encuentre el nivel de poda óptimo minimizando la pérdida de validación cruzada:

[~,~,~,bestlevel] = cvLoss(tree,...     'SubTrees','All','TreeSize','min')
bestlevel = 6 

Podar el árbol a nivel:6

view(tree,'Mode','Graph','Prune',6)

Alternativamente, utilice la ventana interactiva para podar el árbol.

El árbol podado es el mismo que el árbol casi óptimo en el ejemplo "seleccionar profundidad de árbol apropiada".

Establecer en (predeterminado) para encontrar el nivel de poda máximo para el que el error de árbol no excede el error del mejor nivel más una desviación estándar:'TreeSize''SE'

[~,~,~,bestlevel] = cvLoss(tree,'SubTrees','All')
bestlevel = 6 

En este caso, el nivel es el mismo para cualquiera de los ajustes de.'TreeSize'

Podar el árbol para utilizarlo con otros fines:

tree = prune(tree,'Level',6);  view(tree,'Mode','Graph')

Referencias

[1] Breiman, L., J. H. Friedman, R. A. Olshen, and C. J. Stone. Classification and Regression Trees. Boca Raton, FL: Chapman & Hall, 1984.

[2] Loh, W.Y. and Y.S. Shih. “Split Selection Methods for Classification Trees.” Statistica Sinica, Vol. 7, 1997, pp. 815–840.

[3] Loh, W.Y. “Regression Trees with Unbiased Variable Selection and Interaction Detection.” Statistica Sinica, Vol. 12, 2002, pp. 361–386.

Consulte también

| | | | | | |

Temas relacionados