Main Content

La traducción de esta página aún no se ha actualizado a la versión más reciente. Haga clic aquí para ver la última versión en inglés.

classify

Clasificar observaciones mediante análisis discriminante

    Descripción

    ejemplo

    Nota

    Se recomienda utilizar fitcdiscr y predict en lugar de classify para entrenar un clasificador de análisis discriminante y predecir etiquetas. fitcdiscr admite la validación cruzada y la optimización de hiperparámetros, y no requiere que ajuste el clasificador cada vez que haga una nueva predicción o cambie las probabilidades a priori.

    class = classify(sample,training,group) clasifica cada fila de los datos de sample en uno de los grupos a los que pertenecen los datos de training. Los grupos de training se especifican mediante group. La función devuelve class, que contiene los grupos asignados para cada fila de sample.

    class = classify(sample,training,group,type,prior) también especifica el type de la función discriminante y las probabilidades prior de cada grupo.

    ejemplo

    [class,err,posterior,logp,coeff] = classify(___) también devuelve la tasa de error aparente (err), las probabilidades a posteriori de las observaciones de entrenamiento (posterior), el logaritmo de la densidad de probabilidad incondicional de las observaciones de muestra (logp) y los coeficientes de las curvas de límite (coeff), utilizando cualquiera de las combinaciones de argumentos de entrada de las sintaxis anteriores.

    Ejemplos

    contraer todo

    Cargue el conjunto de datos fisheriris. Cree group como un arreglo de celdas de vectores de caracteres que contenga las especies de iris.

    load fisheriris
    group = species;

    La matriz meas contiene cuatro medidas de pétalos de 150 iris. Realice una partición de manera aleatoria de las observaciones en un conjunto de entrenamiento (trainingData) y un conjunto de muestra (sampleData) con estratificación, utilizando la información de grupo de group. Especifique una muestra de retención del 40% para sampleData.

    rng('default') % For reproducibility
    cv = cvpartition(group,'HoldOut',0.40);
    trainInds = training(cv);
    sampleInds = test(cv);
    trainingData = meas(trainInds,:);
    sampleData = meas(sampleInds,:);

    Clasifique sampleData mediante análisis discriminante lineal y cree una gráfica de confusión a partir de las etiquetas verdaderas de group y las etiquetas predichas de class.

    class = classify(sampleData,trainingData,group(trainInds));
    cm = confusionchart(group(sampleInds),class);

    Figure contains an object of type ConfusionMatrixChart.

    La función classify clasifica de forma errónea un iris versicolor como virginica en el conjunto de datos de muestra.

    Clasifique los puntos de datos de una cuadrícula de mediciones (datos de muestra) mediante el análisis discriminante cuadrático. A continuación, visualice los datos de muestra, los datos de entrenamiento y el límite de decisión.

    Cargue el conjunto de datos fisheriris. Cree group como un arreglo de celdas de vectores de caracteres que contenga las especies de iris.

    load fisheriris
    group = species(51:end);

    Represente las medidas de longitud (SL) y anchura (SW) de los sépalos de las especies iris versicolor y virginica.

    SL = meas(51:end,1);
    SW = meas(51:end,2);
    h1 = gscatter(SL,SW,group,'rb','v^',[],'off');
    h1(1).LineWidth = 2;
    h1(2).LineWidth = 2;
    legend('Fisher versicolor','Fisher virginica','Location','NW')
    xlabel('Sepal Length')
    ylabel('Sepal Width')

    Figure contains an axes object. The axes object with xlabel Sepal Length, ylabel Sepal Width contains 2 objects of type line. One or more of the lines displays its values using only markers These objects represent Fisher versicolor, Fisher virginica.

    Cree sampleData como una matriz numérica que contenga una cuadrícula de medidas. Cree trainingData como una matriz numérica que contenga las medidas de longitud y anchura de los sépalos de las especies iris versicolor y virginica.

    [X,Y] = meshgrid(linspace(4.5,8),linspace(2,4));
    X = X(:); Y = Y(:);
    sampleData = [X Y];
    trainingData = [SL SW];

    Clasifique sampleData mediante un análisis discriminante cuadrático.

    [C,err,posterior,logp,coeff] = classify(sampleData,trainingData,group,'quadratic');

    Recupere los coeficientes K, L y M para el límite cuadrático entre las dos clases.

    K = coeff(1,2).const;
    L = coeff(1,2).linear; 
    Q = coeff(1,2).quadratic;

    La curva que separa las dos clases viene definida por esta ecuación:

    K+[x1x2]L+[x1x2]Q[x1x2]=0

    Visualice la clasificación discriminante.

    hold on
    h2 = gscatter(X,Y,C,'rb','.',1,'off');
    f = @(x,y) K + L(1)*x + L(2)*y + Q(1,1)*x.*x + (Q(1,2)+Q(2,1))*x.*y + Q(2,2)*y.*y;
    h3 = fimplicit(f,[4.5 8 2 4]);
    h3.Color = 'm';
    h3.LineWidth = 2;
    h3.DisplayName = 'Decision Boundary';
    hold off
    axis tight
    xlabel('Sepal Length')
    ylabel('Sepal Width')
    title('Classification with Fisher Training Data')

    Figure contains an axes object. The axes object with title Classification with Fisher Training Data, xlabel Sepal Length, ylabel Sepal Width contains 5 objects of type line, implicitfunctionline. One or more of the lines displays its values using only markers These objects represent Fisher versicolor, Fisher virginica, Decision Boundary.

    Realice una partición de un conjunto de datos en datos de muestra y datos de entrenamiento y clasifique los primeros mediante un análisis discriminante lineal. A continuación, visualice los límites de la decisión.

    Cargue el conjunto de datos fisheriris. Cree group como un arreglo de celdas de vectores de caracteres que contenga las especies de iris. Cree PL y PW como vectores numéricos que contengan las medidas de longitud y anchura de los pétalos, respectivamente.

    load fisheriris
    group = species;
    PL = meas(:,3);
    PW = meas(:,4);

    Represente las medidas de longitud (PL) y anchura (PW) de los sépalos de las especies iris setosa, versicolor y virginica.

    h1 = gscatter(PL,PW,species,'krb','ov^',[],'off');
    legend('Setosa','Versicolor','Virginica','Location','best')
    xlabel('Petal Length')
    ylabel('Petal Width')

    Figure contains an axes object. The axes object with xlabel Petal Length, ylabel Petal Width contains 3 objects of type line. One or more of the lines displays its values using only markers These objects represent Setosa, Versicolor, Virginica.

    Realice una partición de manera aleatoria de las observaciones en un conjunto de entrenamiento (trainingData) y un conjunto de muestra (sampleData) con estratificación, utilizando la información de grupo de group. Especifique una muestra de retención del 10% para sampleData.

    rng('default') % For reproducibility
    cv = cvpartition(group,'HoldOut',0.10);
    trainInds = training(cv);
    sampleInds = test(cv);
    trainingData = [PL(trainInds) PW(trainInds)];
    sampleData = [PL(sampleInds) PW(sampleInds)];

    Clasifique sampleData mediante análisis discriminante lineal.

    [class,err,posterior,logp,coeff] = classify(sampleData,trainingData,group(trainInds));

    Recupere los coeficientes K y L para el límite lineal entre la segunda y la tercera clase.

    K = coeff(2,3).const;  
    L = coeff(2,3).linear;

    La línea que separa la segunda y la tercera clase viene definida por la ecuación K+[x1x2]L=0. Represente la línea límite entre la segunda y la tercera clase.

    f = @(x1,x2) K + L(1)*x1 + L(2)*x2;
    hold on
    h2 = fimplicit(f,[.9 7.1 0 2.5]);
    h2.Color = 'r';
    h2.DisplayName = 'Boundary between Versicolor & Virginica';

    Figure contains an axes object. The axes object with xlabel Petal Length, ylabel Petal Width contains 4 objects of type line, implicitfunctionline. One or more of the lines displays its values using only markers These objects represent Setosa, Versicolor, Virginica, Boundary between Versicolor & Virginica.

    Recupere los coeficientes K y L para el límite lineal entre la primera y la segunda clase.

    K = coeff(1,2).const;
    L = coeff(1,2).linear;

    Represente la línea que separa la primera y la segunda clase.

    f = @(x1,x2) K + L(1)*x1 + L(2)*x2;
    h3 = fimplicit(f,[.9 7.1 0 2.5]);
    hold off
    h3.Color = 'k';
    h3.DisplayName = 'Boundary between Versicolor & Setosa';
    axis tight
    title('Linear Classification with Fisher Training Data')

    Figure contains an axes object. The axes object with title Linear Classification with Fisher Training Data, xlabel Petal Length, ylabel Petal Width contains 5 objects of type line, implicitfunctionline. One or more of the lines displays its values using only markers These objects represent Setosa, Versicolor, Virginica, Boundary between Versicolor & Virginica, Boundary between Versicolor & Setosa.

    Argumentos de entrada

    contraer todo

    Datos de muestra, especificados como matriz numérica. Cada columna de sample representa una variable y cada fila, una observación de muestra. sample debe tener el mismo número de columnas que training.

    Tipos de datos: single | double

    Datos de entrenamiento, especificados como matriz numérica. Cada columna de training representa una variable y cada fila una observación de entrenamiento. training debe tener el mismo número de columnas que sample y el mismo número de filas que group.

    Tipos de datos: single | double

    Nombres de grupo, especificados como un arreglo categórico, un arreglo de caracteres, un arreglo de cadenas, un vector numérico o un arreglo de celdas de vectores de caracteres. Cada elemento de group define el grupo al que pertenece la fila correspondiente de training. group debe tener el mismo número de filas que training.

    NaN, <undefined>, vector de caracteres vacío (''), cadena vacía ("") y valores <missing> de group indican valores faltantes. classify elimina filas enteras de datos training que corresponden a un nombre de grupo faltante.

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

    Tipo discriminante, especificado como uno de los valores de la siguiente tabla.

    ValorDescripción
    'linear'Ajusta una densidad normal multivariante a cada grupo, con una estimación agrupada de la covarianza. Esta opción usa razones de verosimilitud para asignar las observaciones de la muestra a los grupos.
    'quadratic'Ajusta densidades normales multivariantes con estimaciones de covarianza estratificadas por grupo. Esta opción usa razones de verosimilitud para asignar las observaciones de la muestra a los grupos.
    'diagLinear'Similar a 'linear', pero con una estimación de matriz de covarianzas diagonal. Esta opción diagonal es un ejemplo específico de clasificador bayesiano ingenuo, porque asume que las variables son condicionalmente independientes dada la etiqueta de grupo.
    'diagQuadratic'Similar a 'quadratic', pero con una estimación de matriz de covarianzas diagonal. Esta opción diagonal es un ejemplo específico de clasificador bayesiano ingenuo, porque asume que las variables son condicionalmente independientes dada la etiqueta de grupo.
    'mahalanobis'Usa distancias de Mahalanobis con estimaciones de covarianza estratificadas.

    Probabilidades a priori para cada grupo, especificadas como uno de los valores de la tabla siguiente. De forma predeterminada, todas las probabilidades a priori son iguales a 1/K, donde K es el número de grupos.

    ValorDescripción
    vector numéricoCada elemento es una probabilidad a priori de grupo. Ordene los elementos según group. classify normaliza los elementos para que sumen 1.
    'empirical'Las probabilidades a priori de los grupos son las frecuencias relativas de estos en group.
    estructura

    Una estructura S con dos campos:

    • S.group contiene los nombres de grupo como variable del mismo tipo que group.

    • S.prob contiene un vector numérico de probabilidades a priori correspondientes. classify normaliza los elementos para que sumen 1.

    prior no se utiliza para la discriminación por la distancia de Mahalanobis, excepto para el cálculo de err.

    Tipos de datos: single | double | char | string | struct

    Argumentos de salida

    contraer todo

    Clase predicha para los datos de muestra, devuelta como un arreglo categórico, un arreglo de caracteres, un arreglo de cadenas, un vector numérico o un arreglo de celdas de vectores de caracteres. class es del mismo tipo que group. Cada elemento de class contiene el grupo al que se ha asignado cada fila de sample.

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

    Tasa de error aparente, devuelta como número no negativo. err es una estimación de la tasa de error de la clasificación errónea basada en los datos training. Es el porcentaje de observaciones en training que están mal clasificadas, ponderado por las probabilidades prior de los grupos.

    Tipos de datos: single | double

    Probabilidades a posteriori de las observaciones de entrenamiento, devueltas como una matriz numérica de n por k, donde n es el número de observaciones (filas) en training y k es el número de grupos en group. El elemento posterior(i,j) es la probabilidad a posteriori de que la observación i en training pertenezca al grupo j en group. Si especifica type como 'mahalanobis', la función no calcula posterior.

    Tipos de datos: single | double

    Logaritmo de la densidad de probabilidad incondicional de las observaciones de la muestra, devuelto como vector numérico. La densidad de probabilidad incondicional prevista para la observación i en sample es

    P(obsi)=j=1kP(obsi | groupj)P(groupj),

    donde:

    • P(obsi|groupj) es la densidad condicional de la observación i en sample dado el grupo j en group.

    • P(groupj) es la probabilidad a priori del grupo j.

    • k es el número de grupos.

    Si especifica type como 'mahalanobis', la función no calcula logp.

    Tipos de datos: single | double

    Coeficientes de las curvas de límite entre pares de grupos, devueltos como una estructura de k por k, donde k es el número de grupos de group. El elemento coeff(i,j) contiene coeficientes de los límites entre los grupos i y j. Esta tabla muestra los campos coeff y sus valores.

    Nombre del campoValor
    typeTipo de función discriminante, especificada por type
    name1Nombre del grupo i
    name2Nombre del grupo j
    constTérmino constante de la ecuación límite (K)
    linearCoeficientes lineales de la ecuación límite (L)
    quadraticMatriz de coeficientes cuadráticos de la ecuación límite (Q). La estructura no incluye este campo cuando se especifica type como 'linear' o 'diagLinear'.
    • Si especifica type como 'linear' o 'diagLinear', la función clasifica una fila x de sample en el grupo i (en lugar del grupo j) cuando 0 < K + x*L.

    • Si especifica type como 'quadratic', 'diagQuadratic' o 'mahalanobis', la función clasifica una fila x de sample en el grupo i (en lugar del grupo j) cuando 0 < K + x*L + x*Q*x'.

    Funcionalidad alternativa

    La función fitcdiscr también realiza un análisis discriminante. Puede entrenar un clasificador con la función fitcdiscr y predecir las etiquetas de los nuevos datos con la función predict. La función fitcdiscr admite la validación cruzada y la optimización de hiperparámetros, y no requiere que ajuste el clasificador cada vez que haga una nueva predicción o cambie las probabilidades a priori.

    Referencias

    [1] Krzanowski, Wojtek. J. Principles of Multivariate Analysis: A User's Perspective. NY: Oxford University Press, 1988.

    [2] Seber, George A. F. Multivariate Observations. NJ: John Wiley & Sons, Inc., 1984.

    Historial de versiones

    Introducido antes de R2006a