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.

Manejar datos desequilibrados o costos desiguales de clasificación errónea en conjuntos de clasificación

En muchas aplicaciones, es posible que prefiera tratar las clases de los datos de forma asimétrica. Por ejemplo, los datos pueden tener muchas más observaciones de una clase que cualquier otra. O clasificar erróneamente las observaciones de una clase tiene consecuencias más severas que clasificar erróneamente las observaciones de otra clase. En tales situaciones, puede utilizar el algoritmo RUSBoost (especificar como) o utilizar el argumento de par nombre-valor o de.'Method''RUSBoost''Prior''Cost'fitcensemble

Si algunas clases están infrarrepresentadas o sobrerepresentadas en el conjunto de entrenamiento, utilice el argumento de par nombre-valor o el algoritmo RUSBoost.'Prior' Por ejemplo, supongamos que obtiene los datos de entrenamiento por simulación. Dado que la simulación de clase es más costosa que la clase de simulación, se elige generar menos observaciones de clase y más observaciones de clase.ABAB La expectativa, sin embargo, es que la clase y la clase se mezclan en una proporción diferente en situaciones reales (no simuladas).AB En este caso, use para establecer probabilidades previas para la clase y aproximadamente para los valores que espera observar en una situación real.'Prior'AB La función normaliza las probabilidades previas para hacerlas sumar.fitcensemble1 Multiplicar todas las probabilidades previas por el mismo factor positivo no afecta al resultado de la clasificación. Otra forma de manejar los datos desequilibrados es utilizar el algoritmo (RUSBoost'Method','RUSBoost'). No es necesario ajustar las probabilidades previas al usar este algoritmo. Para obtener más información, consulte y.Submuestreo aleatorio impulsarClasificación con datos desequilibrados

Si las clases están adecuadamente representadas en los datos de entrenamiento pero desea tratarlas de forma asimétrica, use el argumento de par nombre-valor.'Cost' Supongamos que desea clasificar tumores benignos y malignos en pacientes con cáncer. El hecho de no identificar un tumor maligno (falso negativo) tiene consecuencias mucho más severas que las que identifican erróneamente a los benignos como malignos (falsos positivos). Debe asignar un alto costo para identificar erróneamente a los malignos como benignos y de bajo costo para identificar erróneamente a los benignos como malignos.

Debe pasar los costes de clasificación errónea como una matriz cuadrada con elementos no negativos. El elemento de esta matriz es el costo de clasificar una observación en la clase si la clase verdadera es.C(i,j)ji Los elementos diagonales de la matriz de costes deben ser.C(i,i)0 Para el ejemplo anterior, puede elegir un tumor maligno como clase 1 y un tumor benigno para ser de clase 2. A continuación, puede establecer la matriz de costes para

[0c10]

donde > 1 es el costo de identificar erróneamente un tumor maligno como benigno.c Los costes son relativos: la multiplicación de todos los costes por el mismo factor positivo no afecta al resultado de la clasificación.

Si solo tiene dos clases, ajusta sus probabilidades previas usandofitcensemble P˜i=CijPipara la clase i = 1,2 Y j ≠ i. Pi son probabilidades previas pasadas o calculadas a partir de frecuencias de clase en los datos de entrenamiento, yfitcensemble P˜i se ajustan las probabilidades previas. A continuación, utiliza la matriz de costes predeterminadafitcensemble

[0110]

y estas probabilidades ajustadas para entrenar a sus estudiantes débiles. Por lo tanto, manipular la matriz de costes equivale a manipular las probabilidades previas.

Si tiene tres o más clases, también convierte los costos de entrada en probabilidades anteriores ajustadas.fitcensemble Esta conversión es más compleja. Primero, intenta resolver una ecuación matricial descrita en Zhou y Liu.fitcensemble[1] Si no encuentra una solución, aplica el ajuste "coste medio" descrito en Breiman et al. .fitcensemble[2] Para más información, véase Zadrozny, Langford y Abe.[3]

Conjunto de trenes con costos de clasificación desiguales

Este ejemplo muestra cómo entrenar un conjunto de árboles de clasificación con costos de clasificación desiguales. Este ejemplo utiliza datos sobre pacientes con hepatitis para ver si viven o mueren como resultado de la enfermedad. El conjunto de datos se describe en.El repositorio de datos de aprendizaje automático UCI

Lea el conjunto de datos de hepatitis del repositorio UCI como una matriz de caracteres. A continuación, convierta el resultado a una matriz de celdas de vectores de caracteres utilizando.textscan Especifique una matriz de celdas de vectores de caracteres que contengan los nombres de variable.

hepatitis = textscan(urlread(['https://archive.ics.uci.edu/ml/' ...     'machine-learning-databases/hepatitis/hepatitis.data']),...     '%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f','TreatAsEmpty','?',...     'Delimiter',',');  size(hepatitis)
ans = 1×2

     1    20

VarNames = {'dieOrLive' 'age' 'sex' 'steroid' 'antivirals' 'fatigue' ...     'malaise' 'anorexia' 'liverBig' 'liverFirm' 'spleen' ...     'spiders' 'ascites' 'varices' 'bilirubin' 'alkPhosphate' 'sgot' ...     'albumin' 'protime' 'histology'};

es una matriz de 1 por 20 celdas de vectores de caracteres.hepatitis Las celdas corresponden a la respuesta () y a 19 predictores heterogéneos.liveOrDie

Especifique una matriz numérica que contenga los predictores y un vector de celda que contenga y, que son categorías de respuesta.'Die''Live' La respuesta contiene dos valores: indica que un paciente murió e indica que un paciente vivió.12 Especifique una matriz de celdas de vectores de caracteres para la respuesta mediante las categorías de respuesta. La primera variable en contiene la respuesta.hepatitis

X = cell2mat(hepatitis(2:end)); ClassNames = {'Die' 'Live'}; Y = ClassNames(hepatitis{:,1});

es una matriz numérica que contiene los 19 predictores. es una matriz de celdas de vectores de caracteres que contiene la respuesta.XY

Inspeccione los datos de los valores faltantes.

figure barh(sum(isnan(X),1)/size(X,1)) h = gca; h.YTick = 1:numel(VarNames) - 1; h.YTickLabel = VarNames(2:end); ylabel('Predictor') xlabel('Fraction of missing values')

La mayoría de los predictores tienen valores faltantes, y uno tiene casi el 45% de los valores faltantes. Por lo tanto, utilice árboles de decisión con divisiones sustitutas para una mayor precisión. Debido a que el conjunto de datos es pequeño, el tiempo de entrenamiento con divisiones sustitutas debe ser tolerable.

Cree una plantilla de árbol de clasificación que utilice divisiones sustitutas.

rng(0,'twister') % For reproducibility t = templateTree('surrogate','all');

Examine los datos o la descripción de los datos para ver qué predictores son categóricos.

X(1:5,:)
ans = 5×19

   30.0000    2.0000    1.0000    2.0000    2.0000    2.0000    2.0000    1.0000    2.0000    2.0000    2.0000    2.0000    2.0000    1.0000   85.0000   18.0000    4.0000       NaN    1.0000
   50.0000    1.0000    1.0000    2.0000    1.0000    2.0000    2.0000    1.0000    2.0000    2.0000    2.0000    2.0000    2.0000    0.9000  135.0000   42.0000    3.5000       NaN    1.0000
   78.0000    1.0000    2.0000    2.0000    1.0000    2.0000    2.0000    2.0000    2.0000    2.0000    2.0000    2.0000    2.0000    0.7000   96.0000   32.0000    4.0000       NaN    1.0000
   31.0000    1.0000       NaN    1.0000    2.0000    2.0000    2.0000    2.0000    2.0000    2.0000    2.0000    2.0000    2.0000    0.7000   46.0000   52.0000    4.0000   80.0000    1.0000
   34.0000    1.0000    2.0000    2.0000    2.0000    2.0000    2.0000    2.0000    2.0000    2.0000    2.0000    2.0000    2.0000    1.0000       NaN  200.0000    4.0000       NaN    1.0000

Parece que los predictores 2 a 13 son categóricos, así como el predictor 19. Puede confirmar esta inferencia utilizando la descripción del conjunto de datos en.El repositorio de datos de aprendizaje automático UCI

Enumere las variables categóricas.

catIdx = [2:13,19];

Crea un conjunto validado con 150 alumnos y el algoritmo.GentleBoost

Ensemble = fitcensemble(X,Y,'Method','GentleBoost', ...     'NumLearningCycles',150,'Learners',t,'PredictorNames',VarNames(2:end), ...     'LearnRate',0.1,'CategoricalPredictors',catIdx,'KFold',5); figure plot(kfoldLoss(Ensemble,'Mode','cumulative','LossFun','exponential')) xlabel('Number of trees') ylabel('Cross-validated exponential loss')

Inspeccione la matriz de confusión para ver qué pacientes predice correctamente el conjunto.

[yFit,sFit] = kfoldPredict(Ensemble); confusionchart(Y,yFit);

Del paciente 123 que vive, el conjunto predice correctamente que 112 vivirá. Pero para los 32 pacientes que mueren de hepatitis, el conjunto sólo predice correctamente que aproximadamente la mitad morirá de hepatitis.

Hay dos tipos de error en las predicciones del conjunto:

  • Predecir que el paciente vive, pero el paciente muere

  • Predecir que el paciente muere, pero el paciente vive

Supongamos que usted cree que el primer error es cinco veces peor que el segundo. Cree una nueva matriz de costes de clasificación que refleje esta creencia.

cost.ClassNames = ClassNames; cost.ClassificationCosts = [0 5; 1 0];

Cree un nuevo conjunto validado con validación cruzada utilizando el coste de clasificación errónea e inspeccione la matriz de confusión resultante.cost

EnsembleCost = fitcensemble(X,Y,'Method','GentleBoost', ...     'NumLearningCycles',150,'Learners',t,'PredictorNames',VarNames(2:end), ...     'LearnRate',0.1,'CategoricalPredictors',catIdx,'KFold',5,'Cost',cost); [yFitCost,sFitCost] = kfoldPredict(EnsembleCost); confusionchart(Y,yFitCost);

Como era de esperar, el nuevo Ensemble hace un mejor trabajo clasificando a los pacientes que mueren. Un poco sorprendente, el nuevo conjunto también hace un mejor trabajo clasificar a los pacientes que viven, aunque el resultado no es estadísticamente significativamente mejor. Los resultados de la validación cruzada son aleatorios, por lo que este resultado es simplemente una fluctuación estadística. El resultado parece indicar que la clasificación de los pacientes que viven no es muy sensible al costo.

Referencias

[1] Zhou, Z.-H. and X.-Y. Liu. “On Multi-Class Cost-Sensitive Learning.”Computational Intelligence. Vol. 26, Issue 3, 2010, pp. 232–257 CiteSeerX.

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

[3] Zadrozny, B., J. Langford, and N. Abe. “Cost-Sensitive Learning by Cost-Proportionate Example Weighting.” Third IEEE International Conference on Data Mining, 435–442. 2003.

Consulte también

| | | |

Temas relacionados