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 los modelos de análisis discriminantes

Lidiar con datos singulares

El análisis discriminante necesita datos suficientes para ajustarse a los modelos Gaussianos con matrices de covarianza invertibles. Si los datos no son suficientes para ajustarse a un modelo de este tipo de forma única, se produce un error.fitcdiscr En esta sección se muestran métodos para controlar errores.

Sugerencia

Para obtener un clasificador de análisis discriminante sin errores, establezca el par nombre-valor en o en.DiscrimType'pseudoLinear''pseudoQuadratic'fitcdiscr

"Pseudo" discriminantes nunca fallan, porque utilizan el pseudoinverso de la matriz de covarianza Σk (véase).pinv

Ejemplo: la matriz de covarianza singular

Cuando la matriz de covarianza del clasificador ajustado es singular, puede fallar:fitcdiscr

load popcorn X = popcorn(:,[1 2]); X(:,3) = 0; % a zero-variance column Y = popcorn(:,3); ppcrn = fitcdiscr(X,Y);  Error using ClassificationDiscriminant (line 635) Predictor x3 has zero variance. Either exclude this predictor or set 'discrimType' to 'pseudoLinear' or 'diagLinear'.  Error in classreg.learning.FitTemplate/fit (line 243)             obj = this.MakeFitObject(X,Y,W,this.ModelParameters,fitArgs{:});  Error in fitcdiscr (line 296)             this = fit(temp,X,Y);

Para proceder con el análisis discriminante lineal, utilice un tipo discriminante o:pseudoLineardiagLinear

ppcrn = fitcdiscr(X,Y,...     'discrimType','pseudoLinear'); meanpredict = predict(ppcrn,mean(X))  meanpredict =     3.5000

Elija un tipo discriminante

Hay seis tipos de clasificadores de análisis discriminantes: lineales y cuadráticos, con y variantes de cada tipo.Diagonalpseudo

Sugerencia

Para ver si la matriz de covarianza es singular, se establece en o.discrimType'linear''quadratic' Si la matriz es singular, se produce un error en el método y la propiedad es distinto de cero para.fitcdiscr'quadratic'Gamma'linear'

Para obtener un clasificador cuadrático incluso cuando la matriz de covarianzas es singular, se establece en o.DiscrimType'pseudoQuadratic''diagQuadratic'

obj = fitcdiscr(X,Y,'DiscrimType','pseudoQuadratic') % or 'diagQuadratic'

Elija un tipo de clasificador estableciendo el par nombre-valor en uno de:discrimType

  • (valor predeterminado): estime una matriz de covarianza para todas las clases.'linear'

  • — Estimar una matriz de covarianza para cada clase.'quadratic'

  • — Utilice la diagonal de la matriz de covarianza y utilice su pseudoinverso si es necesario.'diagLinear''linear'

  • : Utilice las diagonales de las matrices de covarianza y utilice sus pseudoinverses si es necesario.'diagQuadratic''quadratic'

  • : Utilice el pseudoinverso de la matriz de covarianza si es necesario.'pseudoLinear''linear'

  • : Utilice las pseudoinverses de las matrices de covarianza si es necesario.'pseudoQuadratic''quadratic'

puede fallar para los y clasificadores.fitcdiscr'linear''quadratic' Cuando falla, devuelve una explicación, como se muestra en.Lidiar con datos singulares

siempre tiene éxito con la diagonal y pseudo variantes.fitcdiscr Para obtener información sobre pseudoinverses, consulte.pinv

Puede establecer el tipo discriminante utilizando la notación de puntos después de construir un clasificador:

obj.DiscrimType = 'discrimType'

Puede cambiar entre tipos lineales o entre tipos cuadráticos, pero no puede cambiar entre un tipo lineal y un cuadrático.

Examine la matriz de error y confusión de reenvío

Es la diferencia entre los datos de entrenamiento de respuesta y las predicciones que hace el clasificador 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 clasificador 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.

El muestra cuántos errores, y qué tipos, surgen en el reenvío.matriz de confusión Cuando hay clases, la matriz de confusión es una-por-matriz conKRKK

= el número de observaciones de clase que el clasificador predice que son de clase.R(i,j)ij

Ejemplo: error de reenvío de un clasificador de análisis discriminante

Examine el error de reenvío del clasificador de análisis discriminante predeterminado para los datos de iris de Fisher:

load fisheriris obj = fitcdiscr(meas,species); resuberror = resubLoss(obj)  resuberror =     0.0200

El error de reenvío es muy bajo, lo que significa que clasifica casi todos los datos de iris de Fisher correctamente.obj El número total de clasificaciones erróneas es:

resuberror * obj.NumObservations  ans =     3.0000

Para ver los detalles de las tres clasificaciones erróneas, examine la matriz de confusión:

R = confusionmat(obj.Y,resubPredict(obj))  R =     50     0     0      0    48     2      0     1    49  obj.ClassNames  ans =      'setosa'     'versicolor'     'virginica'
  • significa clasificar todos los Iris 50 setosa correctamente.R(1,:) = [50 0 0]obj

  • significa clasifica los iris de versicolor 48 correctamente, y clasifica erróneamente dos Iris versicolor como virginica.R(2,:) = [0 48 2]obj

  • significa que clasifica los iris de la virginica 49 correctamente, y clasifica erróneamente un diafragma virginica como versicolor.R(3,:) = [0 1 49]obj

Validación cruzada

Normalmente, los clasificadores de análisis discriminantes son robustos y no exhiben sobreentrenamiento cuando el número de predictores es mucho menor que el número de observaciones. Sin embargo, es una buena práctica cruzar la validación de su clasificador para asegurar su estabilidad.

Validación cruzada de un clasificador de análisis discriminante

En este ejemplo se muestra cómo realizar una validación cruzada de cinco veces de un clasificador de análisis de discriminante cuadrático.

Cargue los datos de ejemplo.

load fisheriris

Cree un clasificador de análisis de discriminante cuadrático para los datos.

quadisc = fitcdiscr(meas,species,'DiscrimType','quadratic');

Busque el error de reenvío del clasificador.

qerror = resubLoss(quadisc)
qerror = 0.0200 

El clasificador hace un trabajo excelente. Sin embargo, el error de reenvío puede ser una estimación optimista del error al clasificar nuevos datos. Proceda a la validación cruzada.

Cree un modelo de validación cruzada.

cvmodel = crossval(quadisc,'kfold',5);

Encuentre la pérdida de validación cruzada para el modelo, es decir, el error de las observaciones que se desdoblan.

cverror = kfoldLoss(cvmodel)
cverror = 0.0200 

La pérdida de validación cruzada es tan baja como la pérdida de reenvío original. Por lo tanto, puede tener la seguridad de que el clasificador es razonablemente preciso.

Cambiar costes y Priors

A veces desea evitar ciertos errores de clasificación errónea más que otros. Por ejemplo, podría ser mejor tener detección de cáncer sobresensible en lugar de detección de cáncer subsensible. La detección sobresensible da más falsos positivos (pruebas o tratamientos innecesarios). La detección poco sensible da más falsos negativos (enfermedades o muertes prevenibles). Las consecuencias de la subdetección pueden ser elevadas. Por lo tanto, es posible que desee establecer los costos para reflejar las consecuencias.

De forma similar, los datos de entrenamiento pueden tener una distribución de clases que no represente su verdadera frecuencia.Y Si tiene una estimación mejor de la frecuencia verdadera, puede incluir este conocimiento en la propiedad de clasificación.Prior

Ejemplo: configuración de costes de clasificación errónea

Considere los datos del iris de Fisher. Supongamos que el costo de clasificar un Iris versicolor como virginica es 10 veces más grande que hacer cualquier otro error de clasificación. Cree un clasificador a partir de los datos y, a continuación, incorpore este coste y, a continuación, visualice el clasificador resultante.

  1. Cargue los datos de iris de Fisher y cree un clasificador predeterminado (lineal) como en:Ejemplo: error de reenvío de un clasificador de análisis discriminante

    load fisheriris obj = fitcdiscr(meas,species); resuberror = resubLoss(obj)  resuberror =     0.0200  R = confusionmat(obj.Y,resubPredict(obj))  R =     50     0     0      0    48     2      0     1    49  obj.ClassNames  ans =      'setosa'     'versicolor'     'virginica'

    significa clasifica los iris de versicolor 48 correctamente, y clasifica erróneamente dos Iris versicolor como virginica.R(2,:) = [0 48 2]obj

  2. Cambie la matriz de costos para cometer menos errores al clasificar los Iris versicolor como virginica:

    obj.Cost(2,3) = 10; R2 = confusionmat(obj.Y,resubPredict(obj))  R2 =     50     0     0      0    50     0      0     7    43

    ahora clasifica todos los Iris versicolor correctamente, a expensas de aumentar el número de clasificaciones erróneas de los Iris virginica de a.obj17

Ejemplo: establecer Priors alternativos

Considere los datos del iris de Fisher. Hay 50 iris de cada tipo en los datos. Supongamos que, en una región en particular, tiene datos históricos que muestran virginica son cinco veces más prevalentes que los otros tipos. Cree un clasificador que incorpore esta información.

  1. Cargue los datos de iris de Fisher y haga un clasificador predeterminado (lineal) como en:Ejemplo: error de reenvío de un clasificador de análisis discriminante

    load fisheriris obj = fitcdiscr(meas,species); resuberror = resubLoss(obj)  resuberror =     0.0200  R = confusionmat(obj.Y,resubPredict(obj))  R =     50     0     0      0    48     2      0     1    49  obj.ClassNames  ans =      'setosa'     'versicolor'     'virginica'

    significa que clasifica los iris de la virginica 49 correctamente, y clasifica erróneamente un diafragma virginica como versicolor.R(3,:) = [0 1 49]obj

  2. Cambie el anterior para que coincida con sus datos históricos y examine la matriz de confusión del nuevo clasificador:

    obj.Prior = [1 1 5]; R2 = confusionmat(obj.Y,resubPredict(obj))  R2 =     50     0     0      0    46     4      0     0    50

    El nuevo clasificador clasifica correctamente todos los Iris virginica, a expensas de aumentar el número de clasificaciones erróneas de los Iris versicolor.24

Consulte también

Funciones

Objetos

Temas relacionados