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.

kfoldLoss

Pérdida de clasificación para observaciones no utilizadas en la formación

Descripción

ejemplo

L = kfoldLoss(CVMdl) Devuelve las tasas de validación cruzada estimadas por el modelo de códigos de salida de corrección de errores (ECOC) validado mediante validación cruzada compuesto de modelos de clasificación lineal.error de clasificaciónCVMdl Es decir, para cada pliegue, se estima la tasa de error de clasificación para las observaciones que se mantiene cuando se entrena utilizando todas las demás observaciones. aplica los mismos datos que se utilizan para crear (véase).kfoldLosskfoldLossCVMdlfitcecoc

contiene una pérdida de clasificación para cada fuerza de regularización en los modelos de clasificación lineal que componen.LCVMdl

ejemplo

L = kfoldLoss(CVMdl,Name,Value) utiliza opciones adicionales especificadas por uno o más argumentos de par.Name,Value Por ejemplo, especifique un esquema de decodificación, que se pliega para utilizarlo para el cálculo de pérdidas o el nivel de verbosidad.

Argumentos de entrada

expandir todo

Modelo ECOC validado con validación cruzada compuesto por modelos de clasificación lineal, especificados como objeto de modelo.ClassificationPartitionedLinearECOC Puede crear un modelo utilizando y por:ClassificationPartitionedLinearECOCfitcecoc

  1. Especificando cualquiera de los argumentos de la validación cruzada, nombre-valor par, por ejemplo,CrossVal

  2. Establecer el argumento de par nombre-valor o una plantilla de modelo de clasificación lineal devuelta porLearners'linear'templateLinear

Para obtener estimaciones, se aplican los mismos datos utilizados para validar el modelo ECOC (y).kfoldLossXY

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

Función de pérdida binaria de aprendizaje, especificada como el par separado por comas que consta de y un identificador de función o nombre de función de pérdida integrado.'BinaryLoss'

  • Esta tabla contiene nombres y descripciones de las funciones incorporadas, donde yj es una etiqueta de clase para un alumno binario determinado (en el conjunto {-1, 1, 0}), sj es la partitura para la observación, y (jgyj,sj) es la fórmula de pérdida binaria.

    ValorDescripciónPuntuación de dominio(gyj,sj)
    'binodeviance'Desviación binomial(– ∞, ∞)log [1 + exp (– 2yjsj)]/[2log (2)]
    'exponential'Exponencial(– ∞, ∞)exp (–yjsj)/2
    'hamming'Hamming[0, 1] o (– ∞, ∞)[1 – signo (yjsj)]/2
    'hinge'Bisagra(– ∞, ∞)Max (0,1 – yjsj)/2
    'linear'Lineal(– ∞, ∞)1 yjsj)/2
    'logit'Logística(– ∞, ∞)log [1 + exp (–yjsj)]/[2log (2)]
    'quadratic'Cuadrática[0,1]1 yj(2sj – 1)]2/2

    El software normaliza las pérdidas binarias de tal forma que la pérdida es de 0,5 cuando yj = 0. Además, el software calcula la pérdida binaria media para cada clase.

  • Para una función de pérdida binaria personalizada, por ejemplo,, especifique su identificador de función.customFunction'BinaryLoss',@customFunction

    debe tener este formulario donde:customFunction

    bLoss = customFunction(M,s)

    • es la matriz-por-codificación almacenada en.MKLMdl.CodingMatrix

    • es el vector 1 por fila de las puntuaciones de clasificación.sL

    • es la pérdida de clasificación.bLoss Este escalar agrega las pérdidas binarias para cada alumno en una clase determinada. Por ejemplo, puede usar la pérdida binaria media para agregar la pérdida sobre los alumnos de cada clase.

    • es el número de clases.K

    • es el número de estudiantes binarios.L

    Para obtener un ejemplo de cómo pasar una función de pérdida binaria personalizada, consulte.Predecir etiquetas de muestra de prueba de modelo ECOC utilizando la función de pérdida binaria personalizada

De forma predeterminada, si todos los alumnos binarios son modelos de clasificación lineal utilizando:

  • SVM, entonces esBinaryLoss'hinge'

  • La regresión logística, a continuación, esBinaryLoss'quadratic'

Ejemplo: 'BinaryLoss','binodeviance'

Tipos de datos: char | string | function_handle

Esquema de decodificación que agrega las pérdidas binarias, especificadas como el par separado por comas que consta de y o.'Decoding''lossweighted''lossbased' Para obtener más información, consulte.Pérdida binaria

Ejemplo: 'Decoding','lossbased'

Dobla los índices que se usarán para la predicción de Clasificación-puntuación, especificado como el par separado por comas que consta de un vector numérico de enteros positivos.'Folds' Los elementos de debe variar de a través.Folds1CVMdl.KFold

Ejemplo: 'Folds',[1 4 10]

Tipos de datos: single | double

Función de pérdida, especificada como el par separado por comas que consta de un identificador de función o.'LossFun''classiferror'

Puedes:

  • Especifique la función incorporada, entonces la función de pérdida es la.'classiferror'error de clasificación

  • Especifique su propia función utilizando la notación de identificador de función.

    Por lo que sigue, es el número de observaciones en los datos de entrenamiento () y es el número de clases ().nCVMdl.NumObservationsKnumel(CVMdl.ClassNames) Su función necesita la firma lossvalue = lossfun(C,S,W,Cost)Dónde:

    • El argumento de salida es un escalar.lossvalue

    • Elija el nombre de la función (lossfun).

    • es una matriz lógica con filas que indican a qué clase pertenece la observación correspondiente.CnK El orden de las columnas corresponde al orden de la clase.CVMdl.ClassNames

      Construya estableciendo si la observación está en la clase, para cada fila.CC(p,q) = 1pq Establezca cada elemento de fila en.p0

    • es una matriz numérica de valores de pérdida negados para las clases.SnK Cada fila corresponde a una observación. El orden de las columnas corresponde al orden de la clase. se asemeja al argumento de salida deCVMdl.ClassNamesSNegLoss kfoldPredict.

    • es un vector numérico de pesos de observación de-por-1.Wn Si pasa, el software normaliza sus elementos para sumar.W1

    • es una matriz numérica de costes de clasificación errónea.CostoKK Por ejemplo, = especifica un coste de 0 para la clasificación correcta y 1 para la clasificación errónea.Costoones(K) -eye(K)

    Especifique la función utilizando.'LossFun',@lossfun

Tipos de datos: function_handle | char | string

Nivel de agregación de pérdidas, especificado como el par separado por comas que consta de y o.'Mode''average''individual'

ValorDescripción
'average'Devuelve las pérdidas promediadas sobre todos los pliegues
'individual'Devuelve pérdidas por cada pliegue

Ejemplo: 'Mode','individual'

Opciones de estimación, especificadas como el par separado por comas que consta de una matriz de estructura devuelta por.'Options'statset

Para invocar la computación paralela:

  • Necesitas una licencia.Parallel Computing Toolbox™

  • Especificar.'Options',statset('UseParallel',true)

Nivel de verbosidad, especificado como el par separado por comas que consta de y o. controla el número de mensajes de diagnóstico que el software muestra en la ventana de comandos.'Verbose'01Verbose

Si es, entonces el software no visualiza los mensajes de diagnóstico.Verbose0 De lo contrario, el software muestra mensajes de diagnóstico.

Ejemplo: 'Verbose',1

Tipos de datos: single | double

Argumentos de salida

expandir todo

Validado de forma cruzada, devuelto como un escalar numérico, Vector o matriz.las pérdidas de clasificación La interpretación de depende de.LLossFun

Dejar R ser el número de fortalezas de regularizaciones son los modelos con validación cruzada () yCVMdl.Trained{1}.BinaryLearners{1}.Lambda F ser el número de pliegues (almacenados en).CVMdl.KFold

  • Si es así, entonces es un 1-por-Mode'average'LR Vector. L(j) es la pérdida de clasificación promedio sobre todos los pliegues del modelo validado por la cruz que utiliza la fuerza de regularización j.

  • De lo contrario, es unL FporR Matriz. L(i,j) es la pérdida de clasificación para el pliegue i del modelo de validación cruzada que utiliza la fuerza de regularización j.

Ejemplos

expandir todo

Cargue el conjunto de datos NLP.

load nlpdata

es una matriz dispersa de Datos predictores y es un vector categórico de etiquetas de clase.XY

Valide de forma cruzada un modelo ECOC de modelos de clasificación lineal.

rng(1); % For reproducibility  CVMdl = fitcecoc(X,Y,'Learner','linear','CrossVal','on');

es un modelo.CVMdlClassificationPartitionedLinearECOC De forma predeterminada, el software implementa la validación cruzada de 10 veces.

Calcule el promedio de las tasas de error de clasificación fuera de pliegue.

ce = kfoldLoss(CVMdl)
ce = 0.0958 

Como alternativa, puede obtener las tasas de error de clasificación por pliegue especificando el par nombre-valor en.'Mode','individual'kfoldLoss

Cargue el conjunto de datos NLP. Transponer los Datos predictores.

load nlpdata X = X';

Para simplificar, utilice la etiqueta ' otros ' para todas las observaciones que no sean, o.Y'simulink''dsp''comm'

Y(~(ismember(Y,{'simulink','dsp','comm'}))) = 'others';

Cree una plantilla de modelo de clasificación lineal que especifique la optimización de la función objetivo mediante SpaRSA.

t = templateLinear('Solver','sparsa');

Valide de forma cruzada un modelo ECOC de modelos de clasificación lineal utilizando la validación cruzada de 5 veces. Optimice la función objetivo utilizando SpaRSA. Especifique que las observaciones de predictor corresponden a columnas.

rng(1); % For reproducibility  CVMdl = fitcecoc(X,Y,'Learners',t,'KFold',5,'ObservationsIn','columns'); CMdl1 = CVMdl.Trained{1}
CMdl1 =    classreg.learning.classif.CompactClassificationECOC       ResponseName: 'Y'         ClassNames: [comm    dsp    simulink    others]     ScoreTransform: 'none'     BinaryLearners: {6x1 cell}       CodingMatrix: [4x6 double]     Properties, Methods  

es un modelo.CVMdlClassificationPartitionedLinearECOC Contiene la propiedad, que es un array de celdas de 5 por 1 sosteniendo un modelo que el software entrenado usando el conjunto de entrenamiento de cada pliegue.TrainedCompactClassificationECOC

Cree una función que tome la pérdida mínima para cada observación y, a continuación, promedia las pérdidas mínimas en todas las observaciones. Dado que la función no utiliza la matriz de identificador de clase (), ponderaciones de observación () y coste de clasificación (), utilice para ignorar sus posiciones.CWCosto~kfoldLoss

lossfun = @(~,S,~,~)mean(min(-S,[],2));

Estimar la pérdida de clasificación media validada cruzada utilizando la función de pérdida mínima por observación. Además, obtenga la pérdida por cada pliegue.

ce = kfoldLoss(CVMdl,'LossFun',lossfun)
ce = 0.0243 
ceFold = kfoldLoss(CVMdl,'LossFun',lossfun,'Mode','individual')
ceFold = 5×1

    0.0244
    0.0255
    0.0248
    0.0240
    0.0226

Para determinar una buena fuerza de penalización de lazo para un modelo ECOC compuesto por modelos de clasificación lineal que utilizan alumnos de regresión logística, implemente la validación cruzada de 5 veces.

Cargue el conjunto de datos NLP.

load nlpdata

es una matriz dispersa de Datos predictores y es un vector categórico de etiquetas de clase.XY

Para simplificar, utilice la etiqueta ' otros ' para todas las observaciones que no sean, o.Y'simulink''dsp''comm'

Y(~(ismember(Y,{'simulink','dsp','comm'}))) = 'others';

Cree un conjunto de 11 fortalezas de regularización logarmicamente espaciadas de

<math display="block">
<mrow>
<mn>1</mn>
<msup>
<mrow>
<mn>0</mn>
</mrow>
<mrow>
<mo>-</mo>
<mn>7</mn>
</mrow>
</msup>
</mrow>
</math>
a través de
<math display="block">
<mrow>
<mn>1</mn>
<msup>
<mrow>
<mn>0</mn>
</mrow>
<mrow>
<mo>-</mo>
<mn>2</mn>
</mrow>
</msup>
</mrow>
</math>
.

Lambda = logspace(-7,-2,11);

Cree una plantilla de modelo de clasificación lineal que especifique el uso de los alumnos de regresión logística, utilice las sanciones de lazo con fortalezas en, entrenar utilizando SpaRSA y reduzca la tolerancia en el degradado de la función objetivo a.Lambda1e-8

t = templateLinear('Learner','logistic','Solver','sparsa',...     'Regularization','lasso','Lambda',Lambda,'GradientTolerance',1e-8);

Valide los modelos en cruz. Para aumentar la velocidad de ejecución, transponer los Datos predictores y especificar que las observaciones se encuentran en columnas.

X = X';  rng(10); % For reproducibility CVMdl = fitcecoc(X,Y,'Learners',t,'ObservationsIn','columns','KFold',5);

es un modelo.CVMdlClassificationPartitionedLinearECOC

Diseccionar, y cada modelo dentro de ella.CVMdl

numECOCModels = numel(CVMdl.Trained)
numECOCModels = 5 
ECOCMdl1 = CVMdl.Trained{1}
ECOCMdl1 =    classreg.learning.classif.CompactClassificationECOC       ResponseName: 'Y'         ClassNames: [comm    dsp    simulink    others]     ScoreTransform: 'none'     BinaryLearners: {6×1 cell}       CodingMatrix: [4×6 double]     Properties, Methods  
numCLModels = numel(ECOCMdl1.BinaryLearners)
numCLModels = 6 
CLMdl1 = ECOCMdl1.BinaryLearners{1}
CLMdl1 =    ClassificationLinear       ResponseName: 'Y'         ClassNames: [-1 1]     ScoreTransform: 'logit'               Beta: [34023×11 double]               Bias: [-0.3125 -0.3596 -0.3596 -0.3596 -0.3596 -0.3596 -0.1593 -0.0737 -0.1759 -0.3452 -0.5174]             Lambda: [1.0000e-07 3.1623e-07 1.0000e-06 3.1623e-06 1.0000e-05 3.1623e-05 1.0000e-04 3.1623e-04 1.0000e-03 0.0032 0.0100]            Learner: 'logistic'     Properties, Methods  

Debido a que implementa la validación cruzada de 5 veces, contiene una matriz de celdas de 5 por 1 de modelos que el software entrena en cada pliegue.fitcecocCVMdlCompactClassificationECOC La propiedad de cada modelo contiene los modelos.BinaryLearnersCompactClassificationECOCClassificationLinear El número de modelos dentro de cada modelo compacto de ECOC depende del número de etiquetas distintas y del diseño de codificación.ClassificationLinear Porque es una secuencia de fortalezas de regularización, se puede pensar en como 11 modelos, uno para cada fuerza de regularización en.LambdaCLMdl1Lambda

Determine qué tan bien se generalizan los modelos trazando los promedios del error de clasificación de 5 veces para cada fuerza de regularización. Identifique la fuerza de regularización que minimiza el error de generalización sobre la cuadrícula.

ce = kfoldLoss(CVMdl); figure; plot(log10(Lambda),log10(ce)) [~,minCEIdx] = min(ce); minLambda = Lambda(minCEIdx); hold on plot(log10(minLambda),log10(ce(minCEIdx)),'ro'); ylabel('log_{10} 5-fold classification error') xlabel('log_{10} Lambda') legend('MSE','Min classification error') hold off

Entrenar un modelo ECOC compuesto de modelo de clasificación lineal utilizando todo el conjunto de datos, y especificar la fuerza de regularización mínima.

t = templateLinear('Learner','logistic','Solver','sparsa',...     'Regularization','lasso','Lambda',minLambda,'GradientTolerance',1e-8); MdlFinal = fitcecoc(X,Y,'Learners',t,'ObservationsIn','columns');

Para estimar las etiquetas de las nuevas observaciones, pasar y los nuevos datos a.MdlFinalPredecir

Más acerca de

expandir todo

Referencias

[1] Allwein, E., R. Schapire, and Y. Singer. “Reducing multiclass to binary: A unifying approach for margin classifiers.” Journal of Machine Learning Research. Vol. 1, 2000, pp. 113–141.

[2] Escalera, S., O. Pujol, and P. Radeva. “On the decoding process in ternary error-correcting output codes.” IEEE Transactions on Pattern Analysis and Machine Intelligence. Vol. 32, Issue 7, 2010, pp. 120–134.

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

Capacidades ampliadas

Introducido en R2016a