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.

designecoc

Matriz de codificación para reducir el código de salida de corrección de errores a binarios

Descripción

ejemplo

M = designecoc(K,name) Devuelve la matriz de codificación que reduce el diseño de código de salida de corrección de errores (ECOC) especificado por y las clases a un problema binario. tiene filas y columnas, con cada fila correspondiente a una clase y cada columna correspondiente a un aprendizaje binario. y determinar el valor de.MnameKMKLnameKL

Puede ver o personalizar y, a continuación, especificarlo como la matriz de codificación para entrenar un clasificador multiclase ECOC utilizando.Mfitcecoc

ejemplo

M = designecoc(K,name,Name,Value) Devuelve la matriz de codificación con opciones adicionales especificadas por uno o más argumentos de par.Name,Value

Por ejemplo, puede especificar el número de ensayos al generar una matriz de codificación aleatoria densa o dispersa.

Ejemplos

contraer todo

Considere el conjunto de datos.arrhythmia Hay 16 clases en el estudio, 13 de las cuales están representadas en los datos. La primera clase indica que el sujeto no tenía arritmia, y la última clase indica que no se registró el estado de arritmia del sujeto. Supongamos que las otras clases son niveles ordinales que indican la gravedad de la arritmia. Entrenar un clasificador ECOC utilizando un diseño de codificación personalizado especificado por la descripción de las clases.

Cargue el conjunto de datos.arrhythmia

load arrhythmia K = 13; % Number of distinct classes

Construya una matriz de codificación que describa la naturaleza de las clases.

OrdMat = designecoc(11,'ordinal'); nOM = size(OrdMat); class1VSOrd = [1; -ones(11,1); 0]; class1VSClass16 = [1; zeros(11,1); -1]; OrdVSClass16 = [0; ones(11,1); -1]; Coding = [class1VSOrd class1VSClass16 OrdVSClass16,...     [zeros(1,nOM(2)); OrdMat; zeros(1,nOM(2))]]
Coding = 13×13

     1     1     0     0     0     0     0     0     0     0     0     0     0
    -1     0     1    -1    -1    -1    -1    -1    -1    -1    -1    -1    -1
    -1     0     1     1    -1    -1    -1    -1    -1    -1    -1    -1    -1
    -1     0     1     1     1    -1    -1    -1    -1    -1    -1    -1    -1
    -1     0     1     1     1     1    -1    -1    -1    -1    -1    -1    -1
    -1     0     1     1     1     1     1    -1    -1    -1    -1    -1    -1
    -1     0     1     1     1     1     1     1    -1    -1    -1    -1    -1
    -1     0     1     1     1     1     1     1     1    -1    -1    -1    -1
    -1     0     1     1     1     1     1     1     1     1    -1    -1    -1
    -1     0     1     1     1     1     1     1     1     1     1    -1    -1
      ⋮

Entrenar un clasificador ECOC utilizando el diseño de codificación personalizado y especificar que los estudiantes binarios son árboles de decisión.Coding

Mdl = fitcecoc(X,Y,'Coding',Coding,'Learner','Tree');

Calcule el error de clasificación en la muestra.

genErr = resubLoss(Mdl)
genErr = 0.1460 

Si solicita una matriz de codificación aleatoria especificando o, a continuación, de forma predeterminada, genera 10.000 matrices aleatorias.sparserandomdenserandomdesignecoc A continuación, elige la matriz con las distancias de fila más grandes, mínimas y de par-sabio basadas en la medida de Hamming. Puede especificar que genere más matrices para aumentar la probabilidad de obtener una mejor, o puede generar varias matrices de codificación y, a continuación, ver cuál funciona mejor.

Cargue el conjunto de datos.arrhythmia Reservar las observaciones clasificadas en la clase 16 (es decir, aquellas que no tienen una clasificación de arritmias) como nuevos datos.

load arrhythmia oosIdx = Y == 16; isIdx = ~oosIdx; Y = categorical(Y(isIdx)); tabulate(Y)
  Value    Count   Percent       1      245     56.98%       2       44     10.23%       3       15      3.49%       4       15      3.49%       5       13      3.02%       6       25      5.81%       7        3      0.70%       8        2      0.47%       9        9      2.09%      10       50     11.63%      14        4      0.93%      15        5      1.16% 
K = numel(unique(Y));

Genere cuatro matrices de diseño de codificación aleatorias de forma que los dos primeros sean densos y los segundos dos sean escasos. Especifique para encontrar el mejor de 20.000 variates.

rng(1); % For reproducibility   Coding = cell(4,1); % Preallocate for coding matrices CodingTypes = {'denserandom','denserandom','sparserandom','sparserandom'}; for j = 1:4;     Coding{j} = designecoc(K,CodingTypes{j},'NumTrials',2e4); end

es una matriz de celdas de 4 por 1, donde cada celda es una matriz de diseño de codificación.Coding Las matrices tienen filas, pero el número de columnas (es decir, los alumnos binarios) puede variar.K

El tren y la Cruz validan los clasificadores ECOC utilizando la validación cruzada de 15 veces. Especifique que cada clasificador de ECOC se capacite utilizando un árbol de clasificación y la matriz de codificación aleatoria almacenada.Coding

Mdl = cell(4,1); % Preallocate for the ECOC classifiers for j = 1:4;     Mdl{j} = fitcecoc(X(isIdx,:),Y,'Learners','tree',...         'Coding',Coding{j},'KFold',15); end
Warning: One or more folds do not contain points from all the groups. 
Warning: One or more folds do not contain points from all the groups. 
Warning: One or more folds do not contain points from all the groups. 
Warning: One or more folds do not contain points from all the groups. 

es una matriz de 4 a 1 celdas de modelos.MdlClassificationPartitionedECOC Varias clases tienen baja frecuencia relativa en los datos, por lo que existe la posibilidad de que, durante la validación cruzada, algunos pliegues en la muestra no se entrenen mediante observaciones de esas clases.

Calcule el error de clasificación de 15 veces para cada clasificador.

genErr = nan(4,1); for j = 1:4;     genErr(j) = kfoldLoss(Mdl{j}); end  genErr
genErr = 4×1

    0.2302
    0.2209
    0.2279
    0.2233

Aunque el error de generalización sigue siendo alto, el modelo de mejor rendimiento, basado únicamente en el error de clasificación fuera de la muestra, es el modelo que usó el diseño de codificación.Coding{3}

Puede intentar mejorar el error de generalización ajustando algunos parámetros de los alumnos binarios. Por ejemplo, puede especificar que se utilice la regla o desviación del twoing para el criterio de división, en lugar del índice de diversidad de Gini predeterminado. También puede especificar la utilización de divisiones sustitutas, ya que faltan valores en los datos.

Argumentos de entrada

contraer todo

Número de clases, especificadas como un entero positivo.

especifica el número de filas de la matriz de codificación.KM

Tipos de datos: single | double

Nombre de diseño de codificación, especificado como un valor en la tabla siguiente. La tabla resume los esquemas de codificación.

ValorNúmero de estudiantes binariosDescripción
Y'allpairs''onevsone'(– 1)/2KKPara cada alumno binario, una clase es positiva, otra es negativa y el software ignora el resto. Este diseño agota todas las combinaciones de asignaciones de pares de clases.
'binarycomplete'2(K1)1Este diseño divide las clases en todas las combinaciones binarias y no ignora ninguna clase. Para cada alumno binario, todas las asignaciones de clase son y con al menos una clase positiva y negativa en la asignación.-11
'denserandom'Aleatorio, pero aproximadamente 10 log2KPara cada alumno binario, el software asigna aleatoriamente clases en clases positivas o negativas, con al menos uno de cada tipo. Para obtener más información, consulte.Matrices de diseño de codificación aleatoria
'onevsall'KPara cada alumno binario, una clase es positiva y el resto es negativo. Este diseño agota todas las combinaciones de asignaciones de clase positivas.
'ordinal'– 1KPara el primer aprendizaje binario, la primera clase es negativa y el resto es positivo. Para el segundo aprendizaje binario, las dos primeras clases son negativas, el resto es positivo, y así sucesivamente.
'sparserandom'Aleatorio, pero aproximadamente 15 log2KPara cada alumno binario, el software asigna aleatoriamente clases como positivas o negativas con la probabilidad 0,25 para cada uno, y omite las clases con la probabilidad 0,5. Para obtener más información, consulte.Matrices de diseño de codificación aleatoria
'ternarycomplete'(3K2(K+1)+1)/2Este diseño divide las clases en todas las combinaciones ternarias. Todas las asignaciones de clase son, y con al menos una clase positiva y una negativa en la asignación.0-11

Argumentos de par nombre-valor

Especifique pares de argumentos separados por comas opcionales. es el nombre del argumento y es el valor correspondiente. deben aparecer dentro de las cotizaciones.Name,ValueNameValueName Puede especificar varios argumentos de par de nombre y valor en cualquier orden como.Name1,Value1,...,NameN,ValueN

Ejemplo: especifica para generar matrices aleatorias.'NumTrials',10001000

Número de matrices de codificación aleatorias que se generarán, especificadas como el par separado por comas y que consta de un entero positivo.'NumTrials'

El software:

  • Genera matrices y selecciona la que tiene la distancia de fila máxima, par-sabio.NumTrials

  • Omite todos los valores de Except y.NumTrialsname'denserandom''sparserandom'

Ejemplo: 'NumTrials',1000

Tipos de datos: single | double

Argumentos de salida

contraer todo

Matriz de codificación que reduce un esquema ECOC a binario, devuelto como una matriz numérica. tiene filas y columnas, donde es el número de estudiantes binarios.MKLL Cada fila corresponde a una clase y cada columna corresponde a un alumno binario.

Los elementos de son, o, y el valor corresponde a una asignación de clase dicottóloga.M-101 Esta tabla describe el significado de, es decir, la clase que el alumno asigna a las observaciones de la clase.M(i,j)ji

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

Los aprendientes binarios para los diseños, y no asignan a las observaciones en ninguna clase.denserandombinarycompleteonevsall0

Sugerencias

  • El número de alumnos binarios crece con el número de clases. Para un problema con muchas clases, los diseños de codificación y no son eficientes.binarycompleteternarycomplete Sin embargo:

    • Si ≤ 4, a continuación, utilizar el diseño de codificación en lugar de.Kternarycompletesparserandom

    • Si ≤ 5, a continuación, utilizar el diseño de codificación en lugar de.Kbinarycompletedenserandom

    Puede visualizar la matriz de diseño de codificación de un clasificador ECOC entrenado entrando en la ventana de comandos.Mdl.CodingMatrix

  • Debe formar una matriz de codificación utilizando un conocimiento íntimo de la aplicación y teniendo en cuenta las restricciones computacionales. Si tiene suficiente potencia computacional y tiempo, pruebe varias matrices de codificación y elija la que tenga el mejor rendimiento (p. ej., compruebe las matrices de confusión para cada modelo usando).confusionchart

  • La validación cruzada de salida única () no es eficaz para conjuntos de datos con muchas observaciones.Leaveout En su lugar, use-Fold Cross-Validation ().kKFold

Algoritmos

contraer todo

Matrices de diseño de codificación personalizada

Las matrices de codificación personalizadas deben tener una forma determinada. El software valida matrices de codificación personalizadas asegurando:

  • Cada elemento es-1, 0 o 1.

  • Cada columna contiene como mínimo uno-1 y un 1.

  • Para todos los vectores de columna distintos y, ≠ y ≠-.uvuvuv

  • Todos los vectores de filas son únicos.

  • La matriz puede separar dos clases. Es decir, puede viajar desde cualquier fila a cualquier otra fila siguiendo estas reglas:

    • Puede desplazarse verticalmente de 1 a-1 o-1 a 1.

    • Puede desplazarse horizontalmente desde un elemento distinto de cero a otro elemento distinto de cero.

    • Puede utilizar una columna de la matriz para un movimiento vertical una sola vez.

    Si no es posible pasar de una fila a la fila usando estas reglas, entonces las clases y no pueden ser separadas por el diseño.ijij Por ejemplo, en el diseño de codificación

    [10100101]

    las clases 1 y 2 no se pueden separar de las clases 3 y 4 (es decir, no se puede desplazar horizontalmente de la-1 en la fila 2 a la columna 2, ya que hay un 0 en esa posición). Por lo tanto, el software rechaza este diseño de codificación.

Matrices de diseño de codificación aleatoria

Para un número dado de clases, el software genera matrices de diseño de codificación aleatoria de la siguiente manera.K

  1. El software genera una de estas matrices:

    1. Aleatorio denso: el software asigna 1 o – 1 con la misma probabilidad a cada elemento de-por-KLd matriz de diseño de codificación, donde Ld10log2K.

    2. Aleatorio disperso: el software asigna 1 a cada elemento de-por-KLs matriz de diseño de codificación con probabilidad 0,25, – 1 con probabilidad 0,25, y 0 con probabilidad 0,5, donde Ls15log2K.

  2. Si una columna no contiene al menos un 1 y al menos uno – 1, entonces el software elimina esa columna.

  3. Para las columnas distintas y, si = o = –, el software elimina de la matriz de diseño de codificación.uvuvuvv

El software genera aleatoriamente 10.000 matrices por defecto, y retiene la matriz con la mayor, mínima, distancia de fila en pares basada en la medida de Hamming () dada por[4]

Δ(k1,k2)=0.5l=1L|mk1l||mk2l||mk1lmk2l|,

Dónde Mkjl es un elemento de codificación de matriz de diseño.j

Referencias

[1] Fürnkranz, Johannes. “Round Robin Classification.” J. Mach. Learn. Res., 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 Recog. Lett., Vol. 30, Issue 3, 2009, pp. 285–297.

Consulte también

|

Introducido en R2014b