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.

confusionmat

Calcular matriz de confusión para el problema de clasificación

Descripción

ejemplo

C = confusionmat(group,grouphat) devuelve la matriz de confusión determinada por los grupos conocidos y previstos en y , respectivamente.Cgroupgrouphat

ejemplo

C = confusionmat(group,grouphat,'Order',grouporder) utiliza para ordenar las filas y columnas de .grouporderC

ejemplo

[C,order] = confusionmat(___) también devuelve el orden de las filas y columnas de la variable utilizando cualquiera de los argumentos de entrada en sintaxis anteriores.Corder

Ejemplos

contraer todo

Muestre la matriz de confusión para los datos con dos clasificaciones erróneas y una clasificación que falta.

Cree vectores para los grupos conocidos y los grupos previstos.

g1 = [3 2 2 3 1 1]'; % Known groups g2 = [4 2 3 NaN 1 1]'; % Predicted groups

Devuelve la matriz de confusión.

C = confusionmat(g1,g2)
C = 4×4

     2     0     0     0
     0     1     1     0
     0     0     0     1
     0     0     0     0

Los índices de las filas y columnas de la matriz de confusión son idénticos y se organizan de forma predeterminada en el orden ordenado de , es decir, .C[g1;g2](1,2,3,4)

La matriz de confusión muestra que los dos puntos de datos que se sabe que están en el grupo 1 se clasifican correctamente. Para el grupo 2, uno de los puntos de datos se clasifica erróneamente en el grupo 3. Además, uno de los puntos de datos que se sabe que está en el grupo 3 se clasifica erróneamente en el grupo 4. trata el valor de la variable de agrupación como un valor que falta y no lo incluye en las filas y columnas de .confusionmatNaNg2C

Trazar la matriz de confusión como un gráfico de matriz de confusión utilizando .confusionchart

confusionchart(C);

No es necesario calcular primero la matriz de confusión y, a continuación, trazarla. En su lugar, trace un gráfico de matriz de confusión directamente desde las etiquetas true y predicted utilizando .confusionchart

cm = confusionchart(g1,g2)

cm =    ConfusionMatrixChart with properties:      NormalizedValues: [4x4 double]          ClassLabels: [4x1 double]    Show all properties  

El objeto almacena la matriz de confusión numérica en la propiedad y las clases de la propiedad.ConfusionMatrixChartNormalizedValuesClassLabels Muestre estas propiedades mediante la notación de puntos.

cm.NormalizedValues
ans = 4×4

     2     0     0     0
     0     1     1     0
     0     0     0     1
     0     0     0     0

cm.ClassLabels
ans = 4×1

     1
     2
     3
     4

Muestre la matriz de confusión para los datos con dos clasificaciones erróneas y una clasificación que falta, y especifique el orden del grupo.

Cree vectores para los grupos conocidos y los grupos previstos.

g1 = [3 2 2 3 1 1]'; % Known groups g2 = [4 2 3 NaN 1 1]'; % Predicted groups

Especifique el orden de grupo y devuelva la matriz de confusión.

C = confusionmat(g1,g2,'Order',[4 3 2 1])
C = 4×4

     0     0     0     0
     1     0     0     0
     0     1     1     0
     0     0     0     2

Los índices de las filas y columnas de la matriz de confusión son idénticos y están organizados en el orden especificado por el orden de grupo, es decir, .C(4,3,2,1)

La segunda fila de la matriz de confusión muestra que uno de los puntos de datos que se sabe que está en el grupo 3 se clasifica erróneamente en el grupo 4.C La tercera fila muestra que uno de los puntos de datos pertenecientes al grupo 2 está clasificado incorrectamente en el grupo 3, y la cuarta fila muestra que los dos puntos de datos que se sabe que están en el grupo 1 se clasifican correctamente. trata el valor de la variable de agrupación como un valor que falta y no lo incluye en las filas y columnas de .CconfusionmatNaNg2C

Realice la clasificación en una muestra del conjunto de datos y muestre la matriz de confusión para la clasificación resultante.fisheriris

Cargue el conjunto de datos de iris de Fisher.

load fisheriris

Aleatorizar las mediciones y grupos en los datos.

rng(0,'twister'); % For reproducibility numObs = length(species); p = randperm(numObs); meas = meas(p,:); species = species(p);

Capacitar a un clasificador de análisis discriminante mediante el uso de mediciones en la primera mitad de los datos.

half = floor(numObs/2); training = meas(1:half,:); trainingSpecies = species(1:half); Mdl = fitcdiscr(training,trainingSpecies);

Predecir etiquetas para las mediciones en la segunda mitad de los datos mediante el clasificador entrenado.

sample = meas(half+1:end,:); grouphat = predict(Mdl,sample);

Especifique el orden de grupo y muestre la matriz de confusión para la clasificación resultante.

group = species(half+1:end); [C,order] = confusionmat(group,grouphat,'Order',{'setosa','versicolor','virginica'})
C = 3×3

    29     0     0
     0    22     2
     0     0    22

order = 3x1 cell array
    {'setosa'    }
    {'versicolor'}
    {'virginica' }

La matriz de confusión muestra que las medidas pertenecientes a setosa y virginica se clasifican correctamente, mientras que dos de las medidas pertenecientes a versicolor se clasifican erróneamente como virginicas. La salida contiene el orden de las filas y columnas de la matriz de confusión en la secuencia especificada por el orden de grupo.order {'setosa','versicolor','virginica'}

Realice la clasificación en una matriz alta del conjunto de datos, calcule una matriz de confusión para las etiquetas altas conocidas y predichas mediante la función y trace la matriz de confusión mediante la función.fisheririsconfusionmatconfusionchart

Al realizar cálculos en matrices altas, MATLAB® utiliza un grupo paralelo (predeterminado si tiene Parallel Computing Toolbox™) o la sesión local de MATLAB. Si desea ejecutar el ejemplo utilizando la sesión local de MATLAB cuando tiene Parallel Computing Toolbox, puede cambiar el entorno de ejecución global mediante la función.mapreducer

Cargue el conjunto de datos de iris de Fisher.

load fisheriris

Convierta las matrices en memoria y en matrices altas.measspecies

tx = tall(meas);
Starting parallel pool (parpool) using the 'local' profile ... Connected to the parallel pool (number of workers: 4). 
ty = tall(species);

Encuentre el número de observaciones en la matriz alta.

numObs = gather(length(ty));   % gather collects tall array into memory
Evaluating tall expression using the Parallel Pool 'local': Evaluation completed in 0.57 sec 

Establezca las semillas de los generadores de números aleatorios que utilizan y para reproducibilidad, y seleccione al azar muestras de entrenamiento.rngtallrng Los resultados pueden variar en función del número de trabajadores y del entorno de ejecución de las matrices altas. Para obtener más información, consulte .Controle dónde se ejecuta el código (MATLAB)

rng('default')  tallrng('default') numTrain = floor(numObs/2); [txTrain,trIdx] = datasample(tx,numTrain,'Replace',false); tyTrain = ty(trIdx); 

Ajuste un modelo de clasificador de árbol de decisión en las muestras de entrenamiento.

mdl = fitctree(txTrain,tyTrain); 
Evaluating tall expression using the Parallel Pool 'local': - Pass 1 of 2: Completed in 5.3 sec - Pass 2 of 2: Completed in 2.4 sec Evaluation completed in 11 sec Evaluating tall expression using the Parallel Pool 'local': - Pass 1 of 4: Completed in 2.6 sec - Pass 2 of 4: Completed in 3.4 sec - Pass 3 of 4: Completed in 7.4 sec - Pass 4 of 4: Completed in 5.3 sec Evaluation completed in 22 sec Evaluating tall expression using the Parallel Pool 'local': - Pass 1 of 4: Completed in 1.6 sec - Pass 2 of 4: Completed in 3.9 sec - Pass 3 of 4: Completed in 9.3 sec - Pass 4 of 4: Completed in 5.9 sec Evaluation completed in 24 sec Evaluating tall expression using the Parallel Pool 'local': - Pass 1 of 4: Completed in 1.3 sec - Pass 2 of 4: Completed in 2.6 sec - Pass 3 of 4: Completed in 4.5 sec - Pass 4 of 4: Completed in 3.8 sec Evaluation completed in 15 sec Evaluating tall expression using the Parallel Pool 'local': - Pass 1 of 4: Completed in 1.4 sec - Pass 2 of 4: Completed in 2.3 sec - Pass 3 of 4: Completed in 3.9 sec - Pass 4 of 4: Completed in 4.8 sec Evaluation completed in 15 sec 

Predecir etiquetas para las muestras de prueba mediante el modelo entrenado.

txTest = tx(~trIdx,:); label = predict(mdl,txTest);

Calcular la matriz de confusión para la clasificación resultante.

tyTest = ty(~trIdx); [C,order] = confusionmat(tyTest,label)
C =    MxNx... tall array      ?    ?    ?    ...     ?    ?    ?    ...     ?    ?    ?    ...     :    :    :     :    :    :   order =    MxNx... tall array      ?    ?    ?    ...     ?    ?    ?    ...     ?    ?    ?    ...     :    :    :     :    :    : 

Utilice la función para realizar el cálculo diferido y devolver el resultado de la memoria.gatherconfusionmat

gather(C)
Evaluating tall expression using the Parallel Pool 'local': - Pass 1 of 1: Completed in 3 sec Evaluation completed in 4.2 sec 
ans = 3×3

    20     0     0
     1    25     5
     0     0    24

gather(order)
Evaluating tall expression using the Parallel Pool 'local': Evaluation completed in 0.048 sec 
ans = 3x1 cell array
    {'setosa'    }
    {'versicolor'}
    {'virginica' }

La matriz de confusión muestra que tres mediciones en la clase versicolor están clasificadas incorrectamente. Todas las medidas pertenecientes a setosa y virginica se clasifican correctamente.

Para calcular y trazar la matriz de confusión, utilice confusionchart en lugar de.

cm = confusionchart(tyTest,label)
Evaluating tall expression using the Parallel Pool 'local': - Pass 1 of 1: Completed in 1.9 sec Evaluation completed in 3 sec Evaluating tall expression using the Parallel Pool 'local': - Pass 1 of 1: Completed in 1.4 sec Evaluation completed in 2.4 sec 

cm =    ConfusionMatrixChart with properties:      NormalizedValues: [3x3 double]          ClassLabels: {3x1 cell}    Show all properties  

Argumentos de entrada

contraer todo

Grupos conocidos para categorizar observaciones, especificados como vector numérico, vector lógico, matriz de caracteres, matriz de cadenas, matriz de celdas de vectores de caracteres o vector categórico.

es una variable de agrupación del mismo tipo que .groupgrouphat El argumento debe tener el mismo número de observaciones que , como se describe en .groupgrouphatGrouping Variables La función trata las matrices de caracteres y matrices de cadenas como matrices de celdas de vectores de caracteres.confusionmat Además, trata , vacío y valores en como valores que faltan y no los cuenta como grupos o categorías distintos.confusionmatNaN'undefined'group

Ejemplo: {'Male','Female','Female','Male','Female'}

Tipos de datos: single | double | logical | char | string | cell | categorical

Grupos previstos para categorizar observaciones, especificados como vector numérico, vector lógico, matriz de caracteres, matriz de cadenas, matriz de celdas de vectores de caracteres o vector categórico.

es una variable de agrupación del mismo tipo que .grouphatgroup El argumento debe tener el mismo número de observaciones que , como se describe en .grouphatgroupGrouping Variables La función trata las matrices de caracteres y matrices de cadenas como matrices de celdas de vectores de caracteres.confusionmat Además, trata , vacío y valores en como valores que faltan y no los cuenta como grupos o categorías distintos.confusionmatNaN'undefined'grouphat

Ejemplo: [1 0 0 1 0]

Tipos de datos: single | double | logical | char | string | cell | categorical

Orden de grupo, especificado como vector numérico, vector lógico, matriz de caracteres, matriz de cadenas, matriz de celdas de vectores de caracteres o vector categórico.

es una variable de agrupación que contiene todos los elementos distintos en y .groupordergroupgrouphat Especifique para definir el orden de las filas y columnas de .grouporderC Si contiene elementos que no están en o , las entradas correspondientes en son .groupordergroupgrouphatC0

De forma predeterminada, el orden del grupo depende del tipo de datos de:s = [group;grouphat]

  • Para vectores numéricos y lógicos, el orden es el orden ordenado de .s

  • Para los vectores categóricos, la orden es la orden devuelta por categories(s).

  • Para otros tipos de datos, el orden es el orden de la primera aparición en .s

Ejemplo: 'order',{'setosa','versicolor','virginica'}

Tipos de datos: single | double | logical | char | string | cell | categorical

Argumentos de salida

contraer todo

Matriz de confusión, devuelta como una matriz cuadrada con un tamaño igual al número total de elementos distintos en los argumentos y. es el recuento de observaciones que se sabe que están en grupo, pero se prevé que estén en grupo.groupgrouphatC(i,j)ij

Las filas y columnas de tienen un orden idéntico de los mismos índices de grupo.C De forma predeterminada, el orden del grupo depende del tipo de datos de:s = [group;grouphat]

  • Para vectores numéricos y lógicos, el orden es el orden ordenado de .s

  • Para los vectores categóricos, la orden es la orden devuelta por categories(s).

  • Para otros tipos de datos, el orden es el orden de la primera aparición en .s

Para cambiar el orden, especifique ,grouporder

La función trata , vacío y valores en las variables de agrupación como valores que faltan y no los incluye en las filas y columnas de .confusionmatNaN'undefined'C

Orden de filas y columnas en , devuelto como vector numérico, vector lógico, vector categórico o matriz de celdas de vectores de caracteres.C Si y son matrices de caracteres, matrices de cadenas o matrices de celdas de vectores de caracteres, la variable es una matriz de celdas de vectores de caracteres.groupgrouphatorder De lo contrario, es del mismo tipo que y .ordergroupgrouphat

Funcionalidad alternativa

  • Se utiliza para calcular y trazar una matriz de confusión.confusionchart Además, muestra estadísticas resumidas sobre los datos y ordena las clases de la matriz de confusión según la precisión de la clase (valor predictivo positivo), la recuperación por clase (tasa positiva real) o el número total de clasificados correctamente Observaciones.confusionchart

Capacidades ampliadas

Introducido en R2008b