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.

Agregación de bootstrap (embolsado) de árboles de clasificación medianteTreeBagger

Estadísticas y machine learning Toolbox™ ofrece dos objetos que admiten la agregación de bootstrap (embolsado) de árboles de clasificación: creados mediante el uso y la creación mediante.TreeBaggerTreeBaggerClassificationBaggedEnsemblefitcensemble Ver por diferencias entre y.La comparación y los conjuntos en bolsasTreeBaggerTreeBaggerClassificationBaggedEnsemble

En este ejemplo se muestra el flujo de trabajo para la clasificación utilizando únicamente las características.TreeBagger

Utilice datos de ionosfera con 351 observaciones y 34 predictores con valores reales. La variable de respuesta es categórica con dos niveles:

  • representa un buen retorno de radar.'g'

  • representa la mala rentabilidad del radar.'b'

El objetivo es predecir retornos buenos o malos usando un conjunto de mediciones de 34.

Fije la semilla aleatoria inicial, crezca 50 árboles, inspeccione cómo el error del conjunto cambia con la acumulación de árboles, y estime la importancia de la característica. Para la clasificación, es mejor establecer el tamaño mínimo de hoja en 1 y seleccionar la raíz cuadrada del número total de entidades para cada división de decisión al azar. Estos valores son los valores predeterminados para la clasificación.TreeBagger

load ionosphere rng(1945,'twister') b = TreeBagger(50,X,Y,'OOBPredictorImportance','On'); figure plot(oobError(b)) xlabel('Number of Grown Trees') ylabel('Out-of-Bag Classification Error')

El método entrena conjuntos con pocos árboles en las observaciones que están en la bolsa para todos los árboles. Para tales observaciones, es imposible calcular la verdadera predicción out-of-bag, y devuelve la clase más probable para la clasificación y la media de la muestra para la regresión.TreeBagger Puede cambiar el valor predeterminado devuelto para las observaciones en el contenedor mediante la propiedad.DefaultYfit Si establece el valor predeterminado en un vector de caracteres vacío para la clasificación, el método excluye las observaciones in-bag del cálculo del error out-of-bag. En este caso, la curva es más variable cuando el número de árboles es pequeño, ya sea porque algunas observaciones nunca están fuera de la bolsa (y por lo tanto se excluyen) o porque sus predicciones se basan en pocos árboles.

b.DefaultYfit = ''; figure plot(oobError(b)) xlabel('Number of Grown Trees') ylabel('Out-of-Bag Error Excluding In-Bag Observations')

La propiedad de las pistas que las observaciones están fuera de bolsa para lo que los árboles.OOBIndicesTreeBagger Con esta propiedad, puede supervisar la fracción de observaciones en los datos de entrenamiento que están en la bolsa para todos los árboles. La curva comienza en aproximadamente 2/3, que es la fracción de observaciones únicas seleccionadas por una réplica de arranque, y baja a 0 en aproximadamente 10 árboles.

finbag = zeros(1,b.NumTrees); for t=1:b.NTrees     finbag(t) = sum(all(~b.OOBIndices(:,1:t),2)); end finbag = finbag / size(X,1); figure plot(finbag) xlabel('Number of Grown Trees') ylabel('Fraction of In-Bag Observations')

Importancia de la característica de estimación.

figure bar(b.OOBPermutedPredictorDeltaError) xlabel('Feature Index') ylabel('Out-of-Bag Feature Importance')

Seleccione las características que producen una medida de importancia mayor que 0,75. Este umbral se elige arbitrariamente.

idxvar = find(b.OOBPermutedPredictorDeltaError>0.75)
idxvar = 1×6

     3     5     6     7     8    27

Habiendo seleccionado las características más importantes, haz crecer un conjunto más grande en el conjunto de características reducidas. Ahorre tiempo al no permutar observaciones fuera de bolsa para obtener nuevas estimaciones de importancia de características para el conjunto de características reducidas (establecido en).OOBVarImp'off' Todavía estaría interesado en obtener estimaciones fuera de bolsa de error de clasificación (establecido en).OOBPred'on'

b5v = TreeBagger(100,X(:,idxvar),Y,'OOBPredictorImportance','off','OOBPrediction','on'); figure plot(oobError(b5v)) xlabel('Number of Grown Trees') ylabel('Out-of-Bag Classification Error')

Para los conjuntos de clasificación, además del error de clasificación (fracción de observaciones mal clasificadas), también puede supervisar el margen de clasificación promedio. Para cada observación, el se define como la diferencia entre la puntuación de la clase verdadera y la puntuación máxima para otras clases previstas por este árbol.Margen El margen de clasificación acumulado utiliza las puntuaciones promediadas sobre todos los árboles y el margen de clasificación acumulado medio es el margen acumulado promediado sobre todas las observaciones. El método con el argumento establecido en (predeterminado) muestra cómo cambia el margen acumulado medio a medida que el conjunto crece: cada nuevo elemento en la matriz devuelta representa el margen acumulado obtenido mediante la inclusión de un nuevo árbol en el conjunto.oobMeanMargin'mode''cumulative' Si el entrenamiento es exitoso, usted esperaría ver un aumento gradual en el margen de clasificación media.

El método entrena conjuntos con pocos árboles en las observaciones que están en la bolsa para todos los árboles. Para tales observaciones, es imposible calcular la verdadera predicción out-of-bag, y devuelve la clase más probable para la clasificación y la media de la muestra para la regresión.TreeBagger

Para los árboles de decisión, una puntuación de clasificación es la probabilidad de observar una instancia de esta clase en esta hoja de árbol. Por ejemplo, si la hoja de un árbol de decisión crecido tiene cinco y tres observaciones de entrenamiento en ella, las puntuaciones devueltas por este árbol de decisión para cualquier observación caída en esta hoja son 5/8 para la clase y 3/8 para la clase.'good''bad''good''bad' Estas probabilidades se llaman por coherencia con otros clasificadores que podrían no tener una interpretación obvia para los valores numéricos de las predicciones devueltas.'scores'

figure plot(oobMeanMargin(b5v)); xlabel('Number of Grown Trees') ylabel('Out-of-Bag Mean Classification Margin')

Calcule la matriz de las proximidades y examine la distribución de las medidas atípico. A diferencia de la regresión, las medidas atípico para conjuntos de clasificación se calculan por separado dentro de cada clase.

b5v = fillProximities(b5v); figure histogram(b5v.OutlierMeasure) xlabel('Outlier Measure') ylabel('Number of Observations')

Encuentra la clase de los valores atípicos extremos.

extremeOutliers = b5v.Y(b5v.OutlierMeasure>40)
extremeOutliers = 3x1 cell array
    {'g'}
    {'g'}
    {'g'}

percentGood = 100*sum(strcmp(extremeOutliers,'g'))/numel(extremeOutliers)
percentGood = 100 

Todos los valores atípicos extremos están etiquetados.'good'

En cuanto a la regresión, puede trazar coordenadas a escala, mostrando las dos clases en diferentes colores utilizando el argumento de par nombre-valor ' Colors ' de.mdsProx Este argumento toma un vector de caracteres en el que cada carácter representa un color. El software no clasifica los nombres de las clases. Por lo tanto, es recomendable determinar la posición de las clases en la propiedad del conjunto.ClassNames

gPosition = find(strcmp('g',b5v.ClassNames))
gPosition = 2 

La clase es la primera y la clase es la segunda.'bad''good' Mostrar coordenadas a escala utilizando rojo para la clase y azul para las observaciones de clase.'bad''good'

figure [s,e] = mdsProx(b5v,'Colors','rb'); xlabel('First Scaled Coordinate') ylabel('Second Scaled Coordinate')

Trazar los primeros 20 valores propios obtenidos por el escalado. El primer valor valor propio domina claramente y la primera coordenada a escala es la más importante.

figure bar(e(1:20)) xlabel('Scaled Coordinate Index') ylabel('Eigenvalue')

Otra forma de explorar el rendimiento de un conjunto de clasificación es trazar su curva de características operativas del receptor (ROC) u otra curva de rendimiento adecuada para el problema actual. Obtenga predicciones para las observaciones fuera de bolsa. Para un conjunto de clasificación, el método devuelve una matriz de celdas de etiquetas de clasificación como el primer argumento de salida y una matriz numérica de puntuaciones como el segundo argumento de salida.oobPredict La matriz devuelta de puntuaciones tiene dos columnas, una para cada clase. En este caso, la primera columna es para la clase y la segunda columna es para la clase.'bad''good' Una columna de la matriz de puntuación es redundante porque las puntuaciones representan probabilidades de clase en hojas de árbol y, por definición, suman 1.

[Yfit,Sfit] = oobPredict(b5v);

Se utiliza para calcular una curva de rendimiento.perfcurve De forma predeterminada, devuelve la curva ROC estándar, que es la tasa positiva real frente a la tasa de falsos positivos. requiere etiquetas de clase verdaderas, puntuaciones y la etiqueta de clase positiva para la entrada.perfcurveperfcurve En este caso, elija la clase como positiva.'good'

[fpr,tpr] = perfcurve(b5v.Y,Sfit(:,gPosition),'g'); figure plot(fpr,tpr) xlabel('False Positive Rate') ylabel('True Positive Rate')

En lugar de la curva ROC estándar, es posible que desee trazar, por ejemplo, la precisión del conjunto frente al umbral de la puntuación de la clase.'good' El argumento de entrada de permite especificar el criterio para el eje y el tercer argumento de salida de devuelve una matriz de umbrales para la puntuación de clase positiva.ycritperfcurveyperfcurve La precisión es la fracción de las observaciones clasificadas correctamente, o equivalentemente, 1 menos el error de clasificación.

[fpr,accu,thre] = perfcurve(b5v.Y,Sfit(:,gPosition),'g','YCrit','Accu'); figure(20) plot(thre,accu) xlabel('Threshold for ''good'' Returns') ylabel('Classification Accuracy')

La curva muestra una región plana que indica que cualquier umbral de 0,2 a 0,6 es una opción razonable. De forma predeterminada, asigna etiquetas de clasificación utilizando 0,5 como el límite entre las dos clases.perfcurve Puede encontrar exactamente a qué precisión corresponde esto.

accu(abs(thre-0.5)<eps)
ans =    0x1 empty double column vector 

La precisión máxima es un poco más alta que la predeterminada.

[maxaccu,iaccu] = max(accu)
maxaccu = 0.9459 
iaccu = 105 

Por lo tanto, el umbral óptimo es.

thre(iaccu)
ans = 0.4503 

Consulte también

| | | | | | |

Temas relacionados