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.

ClassificationECOC

Modelo multiclase para máquinas de vectores de soporte (SVMs) y otros clasificadores

Descripción

es un aprendizaje multiclase, en el que el clasificador consta de varios alumnos binarios, como máquinas de vectores de soporte (SVMs).ClassificationECOCclasificador de códigos de salida de corrección de errores (ECOC) Los clasificadores entrenados almacenan datos de entrenamiento, valores de parámetros, probabilidades previas y matrices de codificación.ClassificationECOC Utilice estos clasificadores para realizar tareas como predecir etiquetas o probabilidades posteriores de nuevos datos (consulte).Predecir

Creación

Cree un objeto mediante.ClassificationECOCfitcecoc

Si especifica los alumnos binarios lineales o de kernel sin especificar opciones de validación cruzada, devuelve un objeto en su lugar.fitcecocCompactClassificationECOC

Propiedades

expandir todo

Después de crear un objeto de modelo, puede utilizar la notación de puntos para acceder a sus propiedades.ClassificationECOC Para ver un ejemplo, vea.Entrenar modelo multiclase con estudiantes de SVM

ECOC Properties

Aprendizaje binario entrenado, especificado como un vector de celda de objetos de modelo. El número de alumnos binarios depende del número de clases y del diseño de codificación.Y

El software se entrena según el problema binario especificado por.BinaryLearner{j}CodingMatrix(:,j) Por ejemplo, para el aprendizaje multiclase con los alumnos de SVM, cada elemento de es un clasificador.BinaryLearnersCompactClassificationSVM

Tipos de datos: cell

Función de pérdida binaria del alumno, especificada como un vector de caracteres que representa el nombre de la función de pérdida.

Si entrena utilizando a los estudiantes binarios que utilizan diferentes funciones de pérdida, a continuación, el software establece en.BinaryLoss'hamming' Para aumentar potencialmente la precisión, especifique una función de pérdida binaria distinta de la predeterminada durante un cálculo de predicción o pérdida mediante el argumento de par nombre-valor de o.'BinaryLoss'Predecirloss

Tipos de datos: char

Etiquetas de clase de alumno binarias, especificadas como una matriz numérica. es un-por-matriz, donde es el número de estudiantes binarios ().BinaryYNumObservationsLLlength(Mdl.BinaryLearners)

Los elementos de son, o, y el valor corresponde a una asignación de clase dicottóloga.BinaryY–101 En esta tabla se describe cómo el alumno asigna la observación a una clase dicottóloga correspondiente al valor de.jkBinaryY(k,j)

ValorAsignación de clase dicottóloga
–1El alumno asigna la observación a una clase negativa.jk
0Antes del entrenamiento, el alumno elimina la observación del conjunto de datos.jk
1El alumno asigna observación a una clase positiva.jk

Tipos de datos: double

Aristas de ubicación para los predictores numéricos, especificados como una matriz de celdas de vectores numéricos, donde es el número de predictores.pp Cada vector incluye los bordes de la papelera para un predictor numérico. El elemento en la matriz de celdas para un predictor categórico está vacío porque el software no bin predictores categóricos.

Los predictores numéricos de bins de software solo si especifica el argumento de par nombre-valor como un escalar entero positivo al entrenar un modelo con alumnos de árbol.'NumBins' La propiedad está vacía si el valor está vacío (valor predeterminado).BinEdges'NumBins'

Puede reproducir los datos de predictor en binned utilizando la propiedad del modelo entrenado.XbinnedBinEdgesmdl

X = mdl.X; % Predictor data
Xbinned = zeros(size(X));
edges = mdl.BinEdges;
% Find indices of binned predictors.
idxNumeric = find(~cellfun(@isempty,edges));
if iscolumn(idxNumeric)
    idxNumeric = idxNumeric';
end
for j = idxNumeric 
    x = X(:,j);
    % Convert x to array if x is a table.
    if istable(x) 
        x = table2array(x);
    end
    % Group x into bins by using the discretize function.
    xbinned = discretize(x,[-inf; edges{j}; inf]); 
    Xbinned(:,j) = xbinned;
end
contiene los índices de ubicación, que van desde 1 hasta el número de bins, para los predictores numéricos. valores son 0 para los predictores categóricos.XbinnedXbinned Si contiene s, los valores correspondientes son s.XNaNXbinnedNaN

Tipos de datos: cell

Códigos de asignación de clases para los alumnos binarios, especificados como una matriz numérica. es un-por-matriz, donde es el número de clases y es el número de estudiantes binarios.CodingMatrixKLKL

Los elementos de are,, o, y los valores corresponden a asignaciones de clase dicottomosas.CodingMatrix–101 En esta tabla se describe cómo el alumno asigna observaciones en clase a una clase dicottóloga correspondiente al valor de.jiCodingMatrix(i,j)

ValorAsignación de clase dicottóloga
–1El alumno asigna observaciones en clase a una clase negativa.ji
0Antes del entrenamiento, el alumno elimina las observaciones de la clase del conjunto de datos.ji
1El alumno asigna observaciones en clase a una clase positiva.ji

Tipos de datos: double | single | int8 | int16 | int32 | int64

Nombre del diseño de codificación, especificado como vector de caracteres. Para obtener más información, consulte.Diseño de codificación

Tipos de datos: char

Pesos de aprendizaje binarios, especificados como un vector de fila numérico. La longitud de es igual al número de estudiantes binarios ().LeanerWeightslength(Mdl.BinaryLearners)

es la suma de los pesos de observación que utiliza el alumno binario para entrenar a su clasificador.LearnerWeights(j)j

El software se utiliza para ajustarse a las probabilidades posteriores minimizando la divergencia Kullback-Leibler.LearnerWeights El software ignora cuando utiliza el método de programación cuadrática para estimar las probabilidades posteriores.LearnerWeights

Tipos de datos: double | single

Otras propiedades de clasificación

Índices predictores categóricos, especificados como un vector de enteros positivos. contiene valores de índice correspondientes a las columnas de los datos del predictor que contienen predictores categóricos.CategoricalPredictors Si ninguno de los predictores es categórico, entonces esta propiedad está vacía ().[]

Tipos de datos: single | double

Etiquetas de clase únicas utilizadas en el entrenamiento, especificadas como una matriz categórica o de caracteres, Vector lógico o numérico, o matriz de celdas de vectores de caracteres. tiene el mismo tipo de datos que las etiquetas de clase.ClassNamesY (The software treats string arrays as cell arrays of character vectors.) también determina el orden de la clase.ClassNames

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

Esta propiedad es de solo lectura.

Costos de clasificación errónea, especificados como una matriz numérica cuadrada. tiene filas y columnas, donde está el número de clases.CostoKK

es el costo de clasificar un punto en la clase si su clase verdadera es.Cost(i,j)ji El orden de las filas y columnas corresponde al orden de las clases en.CostoClassNames

incorpora los costos de clasificación errónea de manera diferente entre los diferentes tipos de estudiantes binarios.fitcecoc

Tipos de datos: double

Nombres de predictores ampliados, especificados como una matriz de vectores de caracteres de celda.

Si el modelo utiliza codificación para variables categóricas, incluye los nombres que describen las variables expandidas.ExpandedPredictorNames De lo contrario, es el mismo que.ExpandedPredictorNamesPredictorNames

Tipos de datos: cell

Valores de parámetro, como los valores de los argumentos de par nombre-valor, que se utilizan para entrenar el clasificador ECOC, especificado como un objeto. no contiene parámetros estimados.ModelParameters

Acceda a las propiedades del uso de notación de puntos.ModelParameters Por ejemplo, enumere las plantillas que contienen parámetros de los alumnos binarios mediante.Mdl.ModelParameters.BinaryLearner

Número de observaciones en los datos de entrenamiento, especificado como un escalar numérico positivo.

Tipos de datos: double

Los nombres predictores en orden de su aparición en los Datos predictores, especificados como una matriz de celdas de vectores de caracteres.X La longitud de es igual al número de columnas en.PredictorNamesX

Tipos de datos: cell

Esta propiedad es de solo lectura.

Probabilidades de clase anteriores, especificadas como un vector numérico. tiene tantos elementos como el número de clases en, y el orden de los elementos corresponde al orden de las clases en.PriorClassNamesClassNames

incorpora los costos de clasificación errónea de manera diferente entre los diferentes tipos de estudiantes binarios.fitcecoc

Tipos de datos: double

Nombre de variable de respuesta, especificado como un vector de caracteres.

Tipos de datos: char

Filas de los datos originales utilizados para ajustar elX ClassificationECOC modelo, especificado como vector lógico. Esta propiedad está vacía si se utilizan todas las filas.

Tipos de datos: logical

Función de transformación de puntuación para aplicar a las puntuaciones previstas, especificadas como un nombre de función o un identificador de función.

Para cambiar la función de transformación de puntuación a function, por ejemplo, utilice la notación de puntos.

  • Para una función incorporada, ingrese este código y reemplace function con un valor en la tabla.

    Mdl.ScoreTransform = 'function';

    ValorDescripción
    'doublelogit'1/(1 +e–2x)
    'invlogit'log (/(1 –))xx
    'ismax'Establece la puntuación de la clase con la puntuación más grande y establece las puntuaciones de todas las demás clases para10
    'logit'1/(1 +ex)
    O'none''identity'(sin transformación)x
    'sign'– 1 para < 0 0 para = 0 1 para > 0x
    x
    x
    'symmetric'2 – 1x
    'symmetricismax'Establece la puntuación de la clase con la puntuación más grande y establece las puntuaciones de todas las demás clases para1–1
    'symmetriclogit'2/(1 +ex) – 1

  • Para una función o una función que defina, introduzca su manejador de funciones.MATLAB®

    Mdl.ScoreTransform = @function;

    function debe aceptar una matriz (las puntuaciones originales) y devolver una matriz del mismo tamaño (las puntuaciones transformadas).

Tipos de datos: char | function_handle

Ponderaciones de observación utilizadas para entrenar el clasificador ECOC, especificado como vector numérico. tiene elementos.WNumObservations

El software normaliza las ponderaciones utilizadas para la formación.nansum(W)1

Tipos de datos: single | double

Datos predictores no estandarizados utilizados para entrenar el clasificador ECOC, especificado como una matriz o tabla numérica.

Cada fila de corresponde a una observación, y cada columna corresponde a una variable.X

Tipos de datos: single | double | table

Etiquetas de clase observadas utilizadas para entrenar el clasificador ECOC, especificado como una matriz categórica o de caracteres, Vector lógico o numérico, o matriz de celdas de vectores de caracteres. tiene elementos y tiene el mismo tipo de datos que el argumento de entrada de.YNumObservationsYfitcecoc (The software treats string arrays as cell arrays of character vectors.)

Cada fila de representa la clasificación observada de la fila correspondiente de.YX

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

Propiedades de optimización de hiperparámetros

Descripción de la optimización de validación cruzada de los hiperparámetros, especificada como un objeto o una tabla de hiperparámetros y valores asociados.BayesianOptimization Esta propiedad no está vacía si el argumento de par nombre-valor no está vacío al crear el modelo.'OptimizeHyperparameters' El valor de depende de la configuración del campo en la estructura cuando se crea el modelo, como se describe en esta tabla.HyperparameterOptimizationResultsOptimizerHyperparameterOptimizationOptions

Valor de campoOptimizerValor deHyperparameterOptimizationResults
predeterminado'bayesopt'Objeto de claseBayesianOptimization
O'gridsearch''randomsearch'Tabla de hiperparámetros utilizados, valores de función objetiva observados (pérdida de validación cruzada) y rango de observaciones de menor (mejor) a mayor (peor)

Funciones del objeto

compareHoldoutCompare las precisiones de dos modelos de clasificación utilizando nuevos datos
compactReduzca el tamaño del modelo de códigos de salida de corrección de errores multiclase (ECOC)
crossvalValidación cruzada del modelo de códigos de salida de corrección de errores multiclase (ECOC)
discardSupportVectorsDeseche los vectores de soporte de los estudiantes binarios de SVM lineales en el modelo ECOC
BordeBorde de clasificación para el modelo de códigos de salida de corrección de errores multiclase (ECOC)
lossPérdida de clasificación para el modelo de códigos de salida de corrección de errores multiclase (ECOC)
MargenLos márgenes de clasificación para el modelo de códigos de salida de corrección de errores multiclase (ECOC)
PredecirClasifique las observaciones utilizando el modelo de códigos de salida de corrección de errores multiclase (ECOC)
resubEdgeBorde de la clasificación de reenvío para el modelo de códigos de salida de corrección de errores multiclase (ECOC)
resubLossPérdida de la clasificación de reenvío para el modelo de códigos de salida de corrección de errores multiclase (ECOC)
resubMarginLos márgenes de clasificación de reenvío para el modelo de códigos de salida de corrección de errores multiclase (ECOC)
resubPredictClasifique las observaciones en el modelo de códigos de salida de corrección de errores multiclase (ECOC)

Ejemplos

contraer todo

Entrenar un modelo de códigos de salida de corrección de errores multiclase (ECOC) utilizando estudiantes binarios de la máquina de vectores de soporte (SVM).

Cargue el conjunto de datos de iris de Fisher. Especifique los datos del predictor y los datos de respuesta.XY

load fisheriris X = meas; Y = species;

Entrenar un modelo ECOC multiclase utilizando las opciones predeterminadas.

Mdl = fitcecoc(X,Y)
Mdl =    ClassificationECOC              ResponseName: 'Y'     CategoricalPredictors: []                ClassNames: {'setosa'  'versicolor'  'virginica'}            ScoreTransform: 'none'            BinaryLearners: {3x1 cell}                CodingName: 'onevsone'     Properties, Methods  

es un modelo.MdlClassificationECOC De forma predeterminada, usa los alumnos binarios de SVM y un diseño de codificación uno contra uno.fitcecoc Puede acceder a las propiedades mediante la notación de puntos.Mdl

Mostrar los nombres de clase y la matriz de diseño de codificación.

Mdl.ClassNames
ans = 3x1 cell array
    {'setosa'    }
    {'versicolor'}
    {'virginica' }

CodingMat = Mdl.CodingMatrix
CodingMat = 3×3

     1     1     0
    -1     0     1
     0    -1    -1

Un diseño de codificación uno contra uno para tres clases rinde tres estudiantes binarios. Las columnas de corresponden a los alumnos y las filas corresponden a las clases.CodingMat El orden de la clase es el mismo que el orden en.Mdl.ClassNames Por ejemplo, es e indica que el software entrena al primer aprendiz binario de SVM utilizando todas las observaciones clasificadas como y.CodingMat(:,1)[1; –1; 0]'setosa''versicolor' Porque corresponde a, es la clase positiva; corresponde, por lo que es la clase negativa.'setosa'1'versicolor'–1

Puede acceder a cada alumno binario mediante la indexación de celdas y la notación de puntos.

Mdl.BinaryLearners{1}   % The first binary learner
ans =    classreg.learning.classif.CompactClassificationSVM              ResponseName: 'Y'     CategoricalPredictors: []                ClassNames: [-1 1]            ScoreTransform: 'none'                      Beta: [4x1 double]                      Bias: 1.4505          KernelParameters: [1x1 struct]     Properties, Methods  

Calcule el error de clasificación de reenvío.

error = resubLoss(Mdl)
error = 0.0067 

El error de clasificación en los datos de entrenamiento es pequeño, pero el clasificador podría ser un modelo sobreajustado. Puede validar en cruz el clasificador mediante y calcular el error de clasificación de validación cruzada en su lugar.crossval

Entrenar un clasificador ECOC utilizando los estudiantes binarios SVM. A continuación, acceda a las propiedades de los alumnos binarios, como los parámetros estimados, mediante la notación de puntos.

Cargue el conjunto de datos de iris de Fisher. Especifique las cotas del pétalo como los predictores y los nombres de las especies como respuesta.

load fisheriris X = meas(:,3:4); Y = species;

Entrena un clasificador ECOC usando los estudiantes binarios de SVM y el diseño de codificación predeterminado (uno contra uno). Estandarice los predictores y guarde los vectores de soporte.

t = templateSVM('Standardize',true,'SaveSupportVectors',true); predictorNames = {'petalLength','petalWidth'}; responseName = 'irisSpecies'; classNames = {'setosa','versicolor','virginica'}; % Specify class order Mdl = fitcecoc(X,Y,'Learners',t,'ResponseName',responseName,...     'PredictorNames',predictorNames,'ClassNames',classNames)
Mdl =    ClassificationECOC            PredictorNames: {'petalLength'  'petalWidth'}              ResponseName: 'irisSpecies'     CategoricalPredictors: []                ClassNames: {'setosa'  'versicolor'  'virginica'}            ScoreTransform: 'none'            BinaryLearners: {3x1 cell}                CodingName: 'onevsone'     Properties, Methods  

es un objeto de plantilla que contiene opciones para la clasificación de SVM.t La función utiliza valores predeterminados para las propiedades Empty (). es un clasificador.fitcecoc[]MdlClassificationECOC Puede acceder a las propiedades del uso de notación de puntos.Mdl

Mostrar los nombres de clase y la matriz de diseño de codificación.

Mdl.ClassNames
ans = 3x1 cell array
    {'setosa'    }
    {'versicolor'}
    {'virginica' }

Mdl.CodingMatrix
ans = 3×3

     1     1     0
    -1     0     1
     0    -1    -1

Las columnas corresponden a los alumnos binarios de SVM y las filas corresponden a las clases distintas. El orden de las filas es el mismo que el orden en la propiedad de.ClassNamesMdl Para cada columna:

  • indica que entrena el SVM utilizando observaciones en la clase correspondiente como miembros del grupo positivo.1fitcecoc

  • indica que entrena el SVM utilizando observaciones en la clase correspondiente como miembros del grupo negativo.–1fitcecoc

  • indica que la SVM no utiliza observaciones en la clase correspondiente.0

En la primera SVM, por ejemplo, asigna todas las observaciones a o, pero no.fitcecoc'setosa''versicolor''virginica'

Acceda a las propiedades de los SVC mediante subsubscripción de celdas y notación de puntos. Almacene los vectores de soporte estandarizados de cada SVM. Desestandarice los vectores de soporte.

L = size(Mdl.CodingMatrix,2); % Number of SVMs sv = cell(L,1); % Preallocate for support vector indices for j = 1:L     SVM = Mdl.BinaryLearners{j};     sv{j} = SVM.SupportVectors;     sv{j} = sv{j}.*SVM.Sigma + SVM.Mu; end

es un array de celdas de matrices que contiene los vectores de soporte no estandarizados para los SVMs.sv

Trace los datos e identifique los vectores de soporte.

figure gscatter(X(:,1),X(:,2),Y); hold on markers = {'ko','ro','bo'}; % Should be of length L for j = 1:L     svs = sv{j};     plot(svs(:,1),svs(:,2),markers{j},...         'MarkerSize',10 + (j - 1)*3); end title('Fisher''s Iris -- ECOC Support Vectors') xlabel(predictorNames{1}) ylabel(predictorNames{2}) legend([classNames,{'Support vectors - SVM 1',...     'Support vectors - SVM 2','Support vectors - SVM 3'}],...     'Location','Best') hold off

Puede pasar a estas funciones:Mdl

  • , para clasificar nuevas observacionesPredecir

  • , para estimar el error de clasificación en los datos de entrenamientoresubLoss

  • , para realizar una validación cruzada de 10 vecescrossval

Valide de forma cruzada un clasificador ECOC con los alumnos binarios de SVM y estime el error de clasificación generalizado.

Cargue el conjunto de datos de iris de Fisher. Especifique los datos del predictor y los datos de respuesta.XY

load fisheriris X = meas; Y = species; rng(1); % For reproducibility

Cree una plantilla SVM y estandarice los predictores.

t = templateSVM('Standardize',true)
t =  Fit template for classification SVM.                       Alpha: [0x1 double]              BoxConstraint: []                  CacheSize: []              CachingMethod: ''                 ClipAlphas: []     DeltaGradientTolerance: []                    Epsilon: []               GapTolerance: []               KKTTolerance: []             IterationLimit: []             KernelFunction: ''                KernelScale: []               KernelOffset: []      KernelPolynomialOrder: []                   NumPrint: []                         Nu: []            OutlierFraction: []           RemoveDuplicates: []            ShrinkagePeriod: []                     Solver: ''            StandardizeData: 1         SaveSupportVectors: []             VerbosityLevel: []                    Version: 2                     Method: 'SVM'                       Type: 'classification'  

es una plantilla de SVM.t La mayoría de las propiedades del objeto de plantilla están vacías. Al entrenar el clasificador ECOC, el software establece las propiedades aplicables a sus valores predeterminados.

Entrenar el clasificador ECOC y especificar el orden de la clase.

Mdl = fitcecoc(X,Y,'Learners',t,...     'ClassNames',{'setosa','versicolor','virginica'});

es un clasificador.MdlClassificationECOC Puede acceder a sus propiedades utilizando la notación de puntos.

Valide mediante validación cruzada con 10 veces.Mdl

CVMdl = crossval(Mdl);

es un clasificador ECOC con validación cruzada.CVMdlClassificationPartitionedECOC

Calcule el error de clasificación generalizada.

genError = kfoldLoss(CVMdl)
genError = 0.0400 

El error de clasificación generalizada es del 4%, lo que indica que el clasificador ECOC generaliza bastante bien.

Más acerca de

expandir todo

Algoritmos

expandir todo

Funcionalidad alternativa

Puede utilizar estos algoritmos alternativos para entrenar un modelo multiclase:

Referencias

[1] Fürnkranz, Johannes. “Round Robin Classification.” Journal of Machine Learning Research, Vol. 2, 2002, pp. 721–747.

[2] Escalera, S., O. Pujol, and P. Radeva. “Separability of ternary codes for sparse designs of error-correcting output codes.” Pattern Recognition Letters, Vol. 30, Issue 3, 2009, pp. 285–297.

Capacidades ampliadas

Introducido en R2014b