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.

perfcurve

Curva de características operativas del receptor (ROC) u otra curva de rendimiento para la salida del clasificador

Descripción

ejemplo

[X,Y] = perfcurve(labels,scores,posclass) Devuelve las coordenadas de una curva ROC para un vector de predicciones de clasificador, dadas las etiquetas de clase verdaderas y la etiqueta de clase positiva,.XYscoreslabelsposclass Puede visualizar la curva de rendimiento utilizando.plot(X,Y)

[X,Y,T] = perfcurve(labels,scores,posclass) Devuelve una matriz de umbrales en las puntuaciones de clasificador para los valores calculados de y.XY

ejemplo

[X,Y,T,AUC] = perfcurve(labels,scores,posclass) Devuelve el área debajo de la curva para los valores calculados de y.XY

ejemplo

[X,Y,T,AUC,OPTROCPT] = perfcurve(labels,scores,posclass) Devuelve el punto de operación óptimo de la curva ROC.

[X,Y,T,AUC,OPTROCPT,SUBY] = perfcurve(labels,scores,posclass) Devuelve los valores de las subclases negativas.Y

ejemplo

[X,Y,T,AUC,OPTROCPT,SUBY,SUBYNAMES] = perfcurve(labels,scores,posclass) Devuelve los nombres de clase negativos.

[___] = perfcurve(labels,scores,posclass,Name,Value) Devuelve las coordenadas de una curva ROC y cualquier otro argumento de salida de las sintaxis anteriores, con opciones adicionales especificadas por uno o más argumentos de par.Name,Value

Por ejemplo, puede proporcionar una lista de clases negativas, cambiar el criterio o, calcular mediante validación cruzada o Bootstrap, especificar el costo de clasificación errónea o calcular los límites de confianza en paralelo.XYlímites de confianza pointwise

Ejemplos

contraer todo

Cargue los datos de ejemplo.

load fisheriris

Utilice solo las dos primeras entidades como variables predictoras. Definir un problema de clasificación binaria utilizando sólo las mediciones que corresponden a la especie versicolor y virginica.

pred = meas(51:end,1:2);

Defina la variable de respuesta binaria.

resp = (1:100)'>50;  % Versicolor = 0, virginica = 1

Ajuste un modelo de regresión logística.

mdl = fitglm(pred,resp,'Distribution','binomial','Link','logit');

Calcule la curva ROC. Utilice las estimaciones de probabilidad del modelo de regresión logística como puntuaciones.

scores = mdl.Fitted.Probability; [X,Y,T,AUC] = perfcurve(species(51:end,:),scores,'virginica');

almacena los valores de umbral en la matriz.perfcurveT

Visualice el área debajo de la curva.

AUC
AUC = 0.7918 

El área debajo de la curva es 0,7918. El AUC máxima es 1, que corresponde a un clasificador perfecto. Los valores de AUC más grandes indican un mejor rendimiento del clasificador.

Trace la curva ROC.

plot(X,Y) xlabel('False positive rate')  ylabel('True positive rate') title('ROC for Classification by Logistic Regression')

Cargue los datos de ejemplo.

load ionosphere

es una matriz de predictores con valores reales de 351x34. es una matriz de caracteres de etiquetas de clase: para los retornos de radar malos y para las buenas devoluciones de radar.XY'b''g'

Reformatee la respuesta para que se ajuste a una regresión logística. Utilice las variables predictoras 3 a 34.

resp = strcmp(Y,'b'); % resp = 1, if Y = 'b', or 0 if Y = 'g'  pred = X(:,3:34);

Ajuste un modelo de regresión logística para estimar las probabilidades posteriores de que un retorno por radar sea uno malo.

mdl = fitglm(pred,resp,'Distribution','binomial','Link','logit'); score_log = mdl.Fitted.Probability; % Probability estimates

Calcule la curva ROC estándar utilizando las probabilidades para las puntuaciones.

[Xlog,Ylog,Tlog,AUClog] = perfcurve(resp,score_log,'true');

Entrenar un clasificador SVM en los mismos datos de muestra. Estandarizar los datos.

mdlSVM = fitcsvm(pred,resp,'Standardize',true);

Calcule las probabilidades posteriores (puntuaciones).

mdlSVM = fitPosterior(mdlSVM); [~,score_svm] = resubPredict(mdlSVM);

La segunda columna contiene las probabilidades posteriores de que se devuelva un radar erróneo.score_svm

Calcule la curva ROC estándar utilizando las puntuaciones del modelo SVM.

[Xsvm,Ysvm,Tsvm,AUCsvm] = perfcurve(resp,score_svm(:,mdlSVM.ClassNames),'true');

Ajuste un clasificador Bayes ingenuo en los mismos datos de muestra.

mdlNB = fitcnb(pred,resp);

Calcule las probabilidades posteriores (puntuaciones).

[~,score_nb] = resubPredict(mdlNB);

Calcule la curva ROC estándar utilizando las puntuaciones de la clasificación Bayes ingenua.

[Xnb,Ynb,Tnb,AUCnb] = perfcurve(resp,score_nb(:,mdlNB.ClassNames),'true');

Trace las curvas ROC en el mismo gráfico.

plot(Xlog,Ylog) hold on plot(Xsvm,Ysvm) plot(Xnb,Ynb) legend('Logistic Regression','Support Vector Machines','Naive Bayes','Location','Best') xlabel('False positive rate'); ylabel('True positive rate'); title('ROC Curves for Logistic Regression, SVM, and Naive Bayes Classification') hold off

Aunque SVM produce mejores valores de ROC para umbrales más elevados, la regresión logística suele ser mejor para distinguir los retornos de radar defectuosos de los buenos. La curva ROC para Bayes ingenua es generalmente más baja que las otras dos curvas ROC, lo que indica un peor rendimiento en la muestra que los otros dos métodos de clasificador.

Compare el área debajo de la curva para los tres clasificadores.

AUClog
AUClog = 0.9659 
AUCsvm
AUCsvm = 0.9489 
AUCnb
AUCnb = 0.9393 

La regresión logística tiene la medida de AUC más alta para la clasificación y Bayes ingenua tiene la más baja. Este resultado sugiere que la regresión logística tiene un mejor rendimiento promedio en la muestra para estos datos de ejemplo.

Este ejemplo muestra cómo determinar el mejor valor de parámetro para una función de kernel personalizada en un clasificador utilizando las curvas ROC.

Genere un conjunto aleatorio de puntos dentro del círculo de la unidad.

rng(1);  % For reproducibility n = 100; % Number of points per quadrant  r1 = sqrt(rand(2*n,1));                     % Random radii t1 = [pi/2*rand(n,1); (pi/2*rand(n,1)+pi)]; % Random angles for Q1 and Q3 X1 = [r1.*cos(t1) r1.*sin(t1)];             % Polar-to-Cartesian conversion  r2 = sqrt(rand(2*n,1)); t2 = [pi/2*rand(n,1)+pi/2; (pi/2*rand(n,1)-pi/2)]; % Random angles for Q2 and Q4 X2 = [r2.*cos(t2) r2.*sin(t2)]; 

Defina las variables predictoras. Los puntos de etiqueta en el primer y tercer cuadrantes como pertenecientes a la clase positiva, y los del segundo y cuarto cuadrantes en la clase negativa.

pred = [X1; X2]; resp = ones(4*n,1); resp(2*n + 1:end) = -1; % Labels 

Cree la función, que acepta dos matrices en el espacio de entidades como entradas, y las transforma en una matriz Gram utilizando el kernel sigmoide.mysigmoid.m

 function G = mysigmoid(U,V) % Sigmoid kernel function with slope gamma and intercept c gamma = 1; c = -1; G = tanh(gamma*U*V' + c); end  

Entrenar un clasificador SVM utilizando la función del kernel sigmoide. Es una buena práctica estandarizar los datos.

SVMModel1 = fitcsvm(pred,resp,'KernelFunction','mysigmoid',...     'Standardize',true); SVMModel1 = fitPosterior(SVMModel1); [~,scores1] = resubPredict(SVMModel1); 

Conjunto dentro y guardar como.gamma = 0.5mysigmoid.mmysigmoid2.m Y, entrena un clasificador SVM usando el kernel sigmoide ajustado.

 function G = mysigmoid2(U,V) % Sigmoid kernel function with slope gamma and intercept c gamma = 0.5; c = -1; G = tanh(gamma*U*V' + c); end  
SVMModel2 = fitcsvm(pred,resp,'KernelFunction','mysigmoid2',...     'Standardize',true); SVMModel2 = fitPosterior(SVMModel2); [~,scores2] = resubPredict(SVMModel2); 

Calcule las curvas ROC y el área debajo de la curva (AUC) para ambos modelos.

[x1,y1,~,auc1] = perfcurve(resp,scores1(:,2),1); [x2,y2,~,auc2] = perfcurve(resp,scores2(:,2),1); 

Trace las curvas ROC.

plot(x1,y1) hold on plot(x2,y2) hold off legend('gamma = 1','gamma = 0.5','Location','SE'); xlabel('False positive rate'); ylabel('True positive rate'); title('ROC for classification by SVM'); 

La función del kernel con el parámetro Gamma establecido en 0,5 ofrece mejores resultados en la muestra.

Compare las medidas del AUC.

auc1 auc2 
 auc1 =      0.9518   auc2 =      0.9985  

El área debajo de la curva para gamma establecida en 0,5 es mayor que la de gamma establecida en 1. Esto también confirma que el valor del parámetro gamma de 0,5 produce mejores resultados. Para la comparación visual del rendimiento de la clasificación con estos dos valores de parámetro Gamma, consulte.Entrenar clasificador SVM utilizando kernel personalizado

Cargue los datos de ejemplo.

load fisheriris

El vector de columna,, consta de flores de iris de tres especies diferentes: setosa, versicolor, virginica.species La doble matriz consta de cuatro tipos de mediciones en las flores: longitud del sépalo, ancho del sépalo, longitud del pétalo y ancho del pétalo.meas Todas las medidas están en centímetros.

Entrenar un árbol de clasificación utilizando la longitud y el ancho del sésido como las variables predictoras. Es una buena práctica especificar los nombres de clase.

Model = fitctree(meas(:,1:2),species, ...     'ClassNames',{'setosa','versicolor','virginica'});

Predecir las etiquetas de clase y las puntuaciones de la especie basada en el árbol.Model

[~,score] = resubPredict(Model);

Las puntuaciones son las probabilidades posteriores de que una observación (una fila en la matriz de datos) pertenezca a una clase. Las columnas de corresponden a las clases especificadas por.Puntuación'ClassNames' Por lo tanto, la primera columna corresponde a setosa, la segunda corresponde a versicolor, y la tercera columna corresponde a virginica.

Calcule la curva ROC para las predicciones que una observación pertenece a versicolor, dadas las verdaderas etiquetas de clase.species Calcule también el punto de operación y los valores óptimos para las subclases negativas.y Devuelva los nombres de las clases negativas.

Dado que se trata de un problema multiclase, no puede limitarse a suministrar como entrada.score(:,2)perfcurve Hacerlo no daría suficiente información sobre las puntuaciones de las dos clases negativas (setosa y virginica).perfcurve Este problema es diferente a un problema de clasificación binaria, donde conocer las puntuaciones de una clase es suficiente para determinar las puntuaciones de la otra clase. Por lo tanto, debe suministrar con una función que factores en las puntuaciones de las dos clases negativas.perfcurve Una de estas funciones es

<math display="block">
<mrow>
<mi>s</mi>
<mi>c</mi>
<mi>o</mi>
<mi>r</mi>
<mi>e</mi>
<mo stretchy="false">(</mo>
<mo>:</mo>
<mo>,</mo>
<mn>2</mn>
<mo stretchy="false">)</mo>
<mo>-</mo>
<mrow>
<mi mathvariant="normal">max</mi>
</mrow>
<mo stretchy="false">(</mo>
<mi>s</mi>
<mi>c</mi>
<mi>o</mi>
<mi>r</mi>
<mi>e</mi>
<mo stretchy="false">(</mo>
<mo>:</mo>
<mo>,</mo>
<mn>1</mn>
<mo stretchy="false">)</mo>
<mo>,</mo>
<mi>s</mi>
<mi>c</mi>
<mi>o</mi>
<mi>r</mi>
<mi>e</mi>
<mo stretchy="false">(</mo>
<mo>:</mo>
<mo>,</mo>
<mn>3</mn>
<mo stretchy="false">)</mo>
<mo stretchy="false">)</mo>
</mrow>
</math>
.

diffscore = score(:,2) - max(score(:,1),score(:,3)); [X,Y,T,~,OPTROCPT,suby,subnames] = perfcurve(species,diffscore,'versicolor');

, de forma predeterminada, es la tasa de falsos positivos (Fallout o 1-especificidad) y, por defecto, es la verdadera tasa positiva (recuperación o sensibilidad).XY La etiqueta de clase positiva es.versicolor Dado que no se define una clase negativa, se asume que las observaciones que no pertenecen a la clase positiva están en una clase.perfcurve La función la acepta como clase negativa.

OPTROCPT
OPTROCPT = 1×2

    0.1000    0.8000

suby
suby = 12×2

         0         0
    0.1800    0.1800
    0.4800    0.4800
    0.5800    0.5800
    0.6200    0.6200
    0.8000    0.8000
    0.8800    0.8800
    0.9200    0.9200
    0.9600    0.9600
    0.9800    0.9800
      ⋮

subnames
subnames = 1x2 cell array
    {'setosa'}    {'virginica'}

Trace la curva ROC y el punto de operación óptimo en la curva ROC.

plot(X,Y) hold on plot(OPTROCPT(1),OPTROCPT(2),'ro') xlabel('False positive rate')  ylabel('True positive rate') title('ROC Curve for Classification by Classification Trees') hold off

Encuentre el umbral que corresponde al punto de operación óptimo.

T((X==OPTROCPT(1))&(Y==OPTROCPT(2)))
ans = 0.2857 

Especifique como clase negativa y calcule y trace la curva ROC para.virginicaversicolor

Una vez más, debe suministrar con una función que factores en las puntuaciones de la clase negativa.perfcurve Un ejemplo de una función a utilizar es

<math display="block">
<mrow>
<mi>s</mi>
<mi>c</mi>
<mi>o</mi>
<mi>r</mi>
<mi>e</mi>
<mo stretchy="false">(</mo>
<mo>:</mo>
<mo>,</mo>
<mn>2</mn>
<mo stretchy="false">)</mo>
<mo>-</mo>
<mi>s</mi>
<mi>c</mi>
<mi>o</mi>
<mi>r</mi>
<mi>e</mi>
<mo stretchy="false">(</mo>
<mo>:</mo>
<mo>,</mo>
<mn>3</mn>
<mo stretchy="false">)</mo>
</mrow>
</math>
.

diffscore = score(:,2) - score(:,3); [X,Y,~,~,OPTROCPT] = perfcurve(species,diffscore,'versicolor', ...     'negClass','virginica'); OPTROCPT
OPTROCPT = 1×2

    0.1800    0.8200

figure, plot(X,Y) hold on plot(OPTROCPT(1),OPTROCPT(2),'ro') xlabel('False positive rate')  ylabel('True positive rate') title('ROC Curve for Classification by Classification Trees') hold off

Cargue los datos de ejemplo.

load fisheriris

El vector de columna consiste en flores de iris de tres especies diferentes: setosa, versicolor, virginica.species La doble matriz consta de cuatro tipos de mediciones en las flores: longitud del sépalo, ancho del sépalo, longitud del pétalo y ancho del pétalo.meas Todas las medidas están en centímetros.

Utilice solo las dos primeras entidades como variables predictoras. Definir un problema binario utilizando sólo las mediciones que corresponden a las especies versicolor y virginica.

pred = meas(51:end,1:2);

Defina la variable de respuesta binaria.

resp = (1:100)'>50;  % Versicolor = 0, virginica = 1

Ajuste un modelo de regresión logística.

mdl = fitglm(pred,resp,'Distribution','binomial','Link','logit');

Calcule los intervalos de confianza de pointwise sobre la tasa positiva real (TPR) mediante el promedio vertical (VA) y el muestreo utilizando bootstrap.

[X,Y,T] = perfcurve(species(51:end,:),mdl.Fitted.Probability,...        'virginica','NBoot',1000,'XVals',[0:0.05:1]);

establece el número de réplicas de arranque en 1000. solicitudes para devolver, y valores para todas las puntuaciones, y promediar los valores (tasa positiva verdadera) en todos los valores (tasa de falsos positivos) utilizando el promedio vertical.'NBoot',1000'XVals','All'perfcurveXYTYX Si no se especifica, a continuación, calcula los límites de confianza utilizando el promedio de umbral de forma predeterminada.XValsperfcurve

Trace los intervalos de confianza de pointwise.

errorbar(X,Y(:,1),Y(:,1)-Y(:,2),Y(:,3)-Y(:,1)); xlim([-0.02,1.02]); ylim([-0.02,1.02]); xlabel('False positive rate')  ylabel('True positive rate') title('ROC Curve with Pointwise Confidence Bounds') legend('PCBwVA','Location','Best')

Puede que no siempre sea posible controlar la tasa de falsos positivos (FPR, el valor en este ejemplo).X Por lo que es posible que desee calcular los intervalos de confianza de pointwise en las tasas positivas verdaderas (TPR) por el promedio de umbral.

[X1,Y1,T1] = perfcurve(species(51:end,:),mdl.Fitted.Probability,...     'virginica','NBoot',1000);

Si establece en, o si no especifica o, a continuación, devuelve, y valores para todas las puntuaciones y calcula los límites de confianza pointwise para y utilizando el promedio de umbral.'TVals''All''TVals''Xvals'perfcurveXYTXY

Trace los límites de confianza.

figure() errorbar(X1(:,1),Y1(:,1),Y1(:,1)-Y1(:,2),Y1(:,3)-Y1(:,1)); xlim([-0.02,1.02]); ylim([-0.02,1.02]); xlabel('False positive rate') ylabel('True positive rate') title('ROC Curve with Pointwise Confidence Bounds') legend('PCBwTA','Location','Best')

Especifique los valores de umbral para corregir y calcular la curva ROC. A continuación, trace la curva.

[X1,Y1,T1] = perfcurve(species(51:end,:),mdl.Fitted.Probability,...     'virginica','NBoot',1000,'TVals',0:0.05:1); figure() errorbar(X1(:,1),Y1(:,1),Y1(:,1)-Y1(:,2),Y1(:,3)-Y1(:,1)); xlim([-0.02,1.02]); ylim([-0.02,1.02]); xlabel('False positive rate') ylabel('True positive rate') title('ROC Curve with Pointwise Confidence Bounds') legend('PCBwTA','Location','Best')

Argumentos de entrada

contraer todo

Etiquetas de clase verdaderas, especificadas como un vector numérico, Vector lógico, matriz de caracteres, matriz de cadenas, matriz de celdas de vectores de caracteres o matriz categórica. Para obtener más información, consulte.Agrupar variables

Ejemplo: {'hi','mid','hi','low',...,'mid'}

Ejemplo: ['H','M','H','L',...,'M']

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

Puntuaciones devueltas por un clasificador para algunos datos de ejemplo, especificados como un vector de puntos flotantes. debe tener el mismo número de elementos que.scoreslabels

Tipos de datos: single | double

Etiqueta de clase positiva, especificada como escalar numérico, escalar lógico, Vector de caracteres, escalar de cadena, celda que contiene un vector de caracteres o escalar categórico. La clase positiva debe ser un miembro de las etiquetas de entrada. El valor de que puede especificar depende del valor de.posclasslabels

ValorlabelsValorposclass
Vector numéricoEscalar numérico
Vector lógicoEscalar lógico
Matriz de caracteresVector de caracteres
Matriz de cadenasEscalar de cadena
Matriz de vectores de caracteresVector de caracteres o celda que contiene el vector de caracteres
Vector categórico Escalar categórico

Por ejemplo, en un problema de diagnóstico de cáncer, si un tumor maligno es la clase positiva, entonces especifique como.posclass'malignant'

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

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 la especie versicolor como la clase negativa, el criterio para la coordenada X como falso negativo, el número de muestras de arranque como 1000.'NegClass','versicolor','XCrit','fn','NBoot',1000,'BootType','per' También especifica que los límites de confianza de pointwise se calculan mediante el método percentil.

Lista de clases negativas, especificadas como el par separado por comas que consta de, y una matriz numérica, una matriz categórica, una matriz de cadenas o una matriz de celdas de vectores de caracteres.'NegClass' De forma predeterminada, establece y considera que todas las clases no positivas encontradas en la matriz de entrada de etiquetas son negativas.perfcurveNegClass'all'

Si se encuentra un subconjunto de las clases encontradas en la matriz de entrada de etiquetas, descarta las instancias con etiquetas que no pertenezcan a clases positivas o negativas.NegClassperfcurve

Ejemplo: 'NegClass',{'versicolor','setosa'}

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

Criterio para calcular para, especificado como el par separado por comas que consta de y uno de los siguientes.X'XCrit'

CriterioDescripción
tpNúmero de instancias verdaderas positivas
fnNúmero de instancias negativas falsas.
fpNúmero de instancias falsas positivas.
tnNúmero de instancias negativas verdaderas.
tp+fpSuma de instancias verdaderas positivas y falsas positivas.
rppTasa de predicciones positivas.
rpp = (tp+fp)/(tp+fn+fp+tn)
rnpTasa de predicciones negativas.
rnp = (tn+fn)/(tp+fn+fp+tn)
accuPrecisión.
accu = (tp+tn)/(tp+fn+fp+tn)
, o, otprsensrecaVerdadera tasa positiva, o sensibilidad, o recuerdo.
tpr= sens = reca = tp/(tp+fn)
Ofnrmiss Falsa tasa negativa, o Miss.
fnr = miss = fn/(tp+fn)
OfprfallTasa de falsos positivos, o consecuencias, o 1 – especificidad.
fpr = fall = fp/(tn+fp)
OtnrspecVerdadera tasa negativa, o especificidad.
tnr = spec = tn/(tn+fp)
OppvprecValor predictivo positivo o precisión.
ppv = prec = tp/(tp+fp)
npvValor predictivo negativo.
npv = tn/(tn+fn)
ecostCosto esperado.
ecost = (tp*Cost(P|P)+fn*Cost(N|P)+fp* Cost(P|N)+tn*Cost(N|N))/(tp+fn+fp+tn)
Criterio personalizadoUna función definida por el usuario con los argumentos de entrada, donde es una matriz de confusión 2 por 2, es una matriz de 2 por 1 de escalas de clase, y es una matriz de costos de clasificación errónea 2 por 2.(C,scale,cost)CscaleCosto

Precaución

Algunos de estos criterios devuelven valores en uno de los dos umbrales especiales y.NaN'reject all''accept all'

Ejemplo: 'XCrit','ecost'

Criterio para calcular, especificado como el par separado por comas que consta de y una de las mismas opciones de criterios que para.Y'YCrit'X Este criterio no tiene que ser una función monótono de la puntuación positiva de la clase.

Ejemplo: 'YCrit','ecost'

Valores para el criterio, especificados como el par separado por comas que consta de una matriz numérica.X'XVals'

  • Si especifica, a continuación, calcula y el para (cuando corresponda) sólo para el especificado.XValsperfcurveXYlímites de confianza pointwiseYXVals

  • Si no especifica, a continuación, calcula y los valores de todas las puntuaciones de forma predeterminada.XValsperfcurveXY

Nota

No se puede establecer y al mismo tiempo.XValsTVals

Ejemplo: 'XVals',[0:0.05:1]

Tipos de datos: single | double | char | string

Umbrales para la puntuación de clase positiva, especificado como el par separado por comas que consta de y una matriz numérica o bien.'TVals''all'

  • Si se establece en o no se especifica, y no se especifica, a continuación, devuelve, y valores para todas las puntuaciones y calcula para y utilizando el promedio de umbral.TVals'all'XValsperfcurveXYTlímites de confianza pointwiseXY

  • Si se establece en una matriz numérica, a continuación, devuelve, y valores para los umbrales especificados y calcula los límites de confianza pointwise para y en estos umbrales mediante el promedio de umbral.TValsperfcurveXYTXY

Nota

No se puede establecer y al mismo tiempo.XValsTVals

Ejemplo: 'TVals',[0:0.05:1]

Tipos de datos: single | double | char | string

Indicador para utilizar los valores más cercanos en los datos en lugar del numérico especificado o, especificado como el par separado por comas que consta de y cualquiera o.XValsTVals'UseNearest''on''off'

  • Si especifica numérico y establece en, a continuación, devuelve los valores únicos más cercanos que se encuentran en los datos y devuelve los valores correspondientes de y.XValsUseNearest'on'perfcurveXYT

  • Si especifica numérico y se establece en, a continuación, devuelve el ordenado.XValsUseNearest'off'perfcurveXVals

  • Si calcula los límites de confianza mediante la validación cruzada o Bootstrap, este parámetro siempre es.'off'

Ejemplo: 'UseNearest','off'

método para procesar las puntuaciones, especificado como el par separado por comas que consta de y o.perfcurveNaN'ProcessNaN''ignore''addtofalse'

  • Si es así, elimina las observaciones con puntuaciones de los datos.ProcessNaN'ignore'perfcurveNaN

  • Si es, a continuación, agrega instancias con puntuaciones a la clasificación falsa cuenta en la clase respectiva.ProcessNaN'addtofalse'perfcurveNaN Es decir, siempre cuenta las instancias de la clase positiva como falso negativo (FN) y siempre cuenta las instancias de la clase negativa como falso positivo (FP).perfcurve

Ejemplo: 'ProcessNaN','addtofalse'

Probabilidades previas para las clases positivas y negativas, especificadas como el par separado por comas que consta de y, o una matriz con dos elementos.'Prior''empirical''uniform'

Si es, entonces deriva las probabilidades previas de las frecuencias de clase.Prior'empirical'perfcurve

Si es así, establece todas las probabilidades previas para que sean iguales.Prior'uniform'perfcurve

Ejemplo: 'Prior',[0.3,0.7]

Tipos de datos: single | double | char | string

Los costos de clasificación errónea, especificados como el par separado por comas que consta de y una matriz de 2 por 2, que contiene.'Cost'[Cost(P|P),Cost(N|P);Cost(P|N),Cost(N|N)]

es el costo de clasificar erróneamente una clase positiva como una clase negativa. es el costo de clasificar erróneamente una clase negativa como una clase positiva.Cost(N|P)Cost(P|N) Por lo general, = 0 y = 0, pero le permite especificar los costos distintos de cero para la clasificación correcta, así.Cost(P|P)Cost(N|N)perfcurve

Ejemplo: 'Cost',[0 0.7;0.3 0]

Tipos de datos: single | double

Nivel de significancia para los límites de confianza, especificado como el par separado por comas que consta de y un valor escalar en el rango de 0 a 1. calcula 100 * (1 –) por ciento para,, y para un nivel de confianza de 1 –.'Alpha'perfcurveαlímites de confianza pointwiseXYTAUCα

Ejemplo: especifica un 99% de límites de confianza'Alpha',0.01

Tipos de datos: single | double

Ponderaciones de observación, especificadas como el par separado por comas que consta de y un vector de valores escalares no negativos.'Weights' Este vector debe tener tantos elementos como sea posible.scoreslabels

Si y están en matrices de celdas y necesita suministrar, las ponderaciones también deben estar en una matriz de celdas.scoreslabelsWeights En este caso, cada elemento en debe ser un vector numérico con tantos elementos como el elemento correspondiente en.Weightsscores Por ejemplo,.numel(weights{1}) == numel(scores{1})

Cuando calcula los límites de confianza mediante la validación cruzada, utiliza estos pesos de observación en lugar de recuentos de observación.perfcurveXYT

Cuando calcula los límites de confianza mediante Bootstrap, muestrea las observaciones con sustitución, utilizando estas ponderaciones como probabilidades de muestreo multinomial.perfcurveNN

El valor predeterminado es un vector de 1s o una matriz de celdas en la que cada elemento es un vector de 1s.

Tipos de datos: single | double | cell

Número de réplicas de arranque para el cálculo de los límites de confianza, especificados como el par separado por comas y que consta de un entero positivo.'NBoot' El valor predeterminado 0 significa que no se calculan los límites de confianza.

Si y son matrices de celdas, este parámetro debe ser 0 porque puede usar la validación cruzada o bootstrap para calcular los límites de confianza.labelsscoresperfcurve

Ejemplo: 'NBoot',500

Tipos de datos: single | double

Tipo de intervalo de confianza para utilizar para calcular los límites de confianza, especificados como el par separado por comas que consta de uno de los siguientes:bootci'BootType'

  • — Método de percentil acelerado y corregido por sesgo'bca'

  • o — intervalo de aproximación normal con sesgo bootstrapped y error estándar'norm'normal'

  • o — método percentil'per''percentile'

  • o — método de percentil corregido de sesgo'cper''corrected percentile'

  • o — intervalo de confianza Studentized'stud''student'

Ejemplo: 'BootType','cper'

Argumentos de entrada opcionales para calcular los límites de confianza, especificados como el par separado por comas que consta de y o, argumentos de par nombre-valor de.bootci'BootArg'{'Nbootstd',nbootstd}{'Stderr',stderr}bootci

Al calcular los intervalos de confianza de arranque con estudentizado (IS), puede especificar, además, los argumentos de par nombre-valor de, mediante el uso de.'BootType''student''Nbootstd''Stderr'bootci'BootArg'

  • estima el error estándar de las estadísticas de arranque utilizando bootstrap con muestras de datos. es un entero positivo y su valor predeterminado es 100.'BootArg',{'Nbootstd',nbootstd}nbootstdnbootstd

  • evalúa el error estándar de las estadísticas de arranque mediante una función definida por el usuario que toma como argumento de entrada. es un identificador de función.'BootArg',{'Stderr',stderr}stderr[1:numel(scores)]'stderr

Ejemplo: 'BootArg',{'Nbootstd',nbootstd}

Tipos de datos: cell

Opciones para controlar el cálculo de intervalos de confianza, especificado como el par separado por comas que consta de y una matriz de estructura devuelta por.'Options'statset Estas opciones requieren. utiliza este argumento para calcular únicamente los límites de confianza de pointwise.Parallel Computing Toolbox™perfcurve Para calcular estos límites, debe pasar matrices de celdas para y o establecer en un entero positivo.labelsscoresNBoot

Esta tabla resume las opciones disponibles.

OpciónDescripción
'UseParallel'
  • — Cálculo en serie (predeterminado).false

  • — Computación paralela.true Necesitas esta opción para trabajar.Parallel Computing Toolbox

'UseSubstreams'
  • — No utilice un subflujo separado para cada iteración (valor predeterminado).false

  • : Utilice un subflujo independiente para cada iteración para calcular en paralelo de forma reproducible.true Para calcular reproduciblemente, establezca un tipo que permita subsecuencias: o.Streams'mlfg6331_64''mrg32k3a'

'Streams'

Un objeto o una matriz de celdas de dichos objetos.RandStream Si especifica, utilice un solo objeto, excepto cuando:Streams

  • Es.UseParalleltrue

  • Es.UseSubstreamsfalse

En ese caso, utilice una matriz de celdas del mismo tamaño que el grupo paralelo. Si un grupo paralelo no está abierto, debe suministrar un único flujo de números aleatorios.Streams

Si es y es, entonces la longitud de debe ser igual al número de trabajadores utilizados por.'UseParallel'true'UseSubstreams'false'Streams'perfcurve Si un grupo paralelo ya está abierto, la longitud de es el tamaño del grupo paralelo.'Streams' Si un grupo paralelo aún no está abierto, podría abrir un grupo de servidores, en función de la instalación y las preferencias.MATLAB® Para garantizar resultados más predecibles, utilice y cree explícitamente un grupo paralelo antes de invocar y establecer.parpoolperfcurve'Options',statset('UseParallel',true)

Ejemplo: 'Options',statset('UseParallel',true)

Tipos de datos: struct

Argumentos de salida

contraer todo

-las coordenadas de la curva de rendimiento, devueltas como vector o una matriz de un-por-3.xm De forma predeterminada, los valores son la tasa de falsos positivos, FPR (Fallout o 1 – especificidad).X Para cambiar, use el argumento de par nombre-valor.XXCrit

  • Si no computa el, o si los calcula utilizando el promedio vertical, entonces es un vector.perfcurvelímites de confianza pointwiseX

  • Si calcula los límites de confianza utilizando el promedio de umbral, entonces es una matriz de-por-3, donde es el número de valores de umbral fijo.perfcurveXmm La primera columna de contiene el valor medio.X La segunda y tercera columnas contienen el límite inferior y el límite superior, respectivamente, de los límites de confianza de pointwise.

-las coordenadas de la curva de rendimiento, devueltas como vector o una matriz de un-por-3.ym De forma predeterminada, los valores son la tasa positiva verdadera, TPR (recuperación o sensibilidad).Y Para cambiar, use el argumento de par nombre-valor.YYCrit

  • Si no computa el, entonces es un vector.perfcurvelímites de confianza pointwiseY

  • Si calcula los límites de confianza, entonces es una matriz de-por-3, donde es el número de valores fijos o umbrales (valores).perfcurveYmmXT La primera columna de contiene el valor medio.Y La segunda y tercera columnas contienen el límite inferior y el límite superior, respectivamente, de los límites de confianza de pointwise.

Umbrales en las puntuaciones del clasificador para los valores calculados de y, devueltos como una matriz vectorial o-por-3.XYm

  • Si no computa los, o los calcula utilizando el promedio de umbral, entonces es un vector.perfcurvelímites de confianza pointwiseT

  • Si calcula los límites de confianza mediante el promedio vertical, es una matriz de-por-3, donde es el número de valores fijos.perfcurveTmmX La primera columna de contiene el valor medio.T La segunda y tercera columnas contienen el límite inferior y el límite superior, respectivamente, de los límites de confianza de pointwise.

Para cada umbral, es el recuento de observaciones positivas verdaderas con puntuaciones mayores o iguales que este umbral, y es el recuento de observaciones de falsos positivos con puntuaciones mayores o iguales que este umbral. define los recuentos negativos y, de manera similar.TPFPperfcurveTNFN A continuación, la función ordena los umbrales en el orden descendente que corresponde al orden ascendente de los recuentos positivos.

Para los umbrales distintos encontrados en la matriz de puntuaciones, devuelve el, y matrices con + 1 filas. establece elementosmperfcurveXYTmperfcurve T(2:m+1) a los distintos umbrales y réplicas.T(1)T(2) Por Convención, representa el umbral más alto y calcula los valores correspondientes de y para y.T(1)'reject all'perfcurveXYTP = 0FP = 0 El valor es el umbral más bajo para el cual y.T(end)'accept all'TN = 0FN = 0

Área bajo la curva () para los valores calculados de y, devueltos como un valor escalar o un vector 3 por 1.AUCXY

  • Si no calcula el, es un valor escalar.perfcurvelímites de confianza pointwiseAUC

  • Si calcula los límites de confianza mediante el promedio vertical, es un vector 3 por 1.perfcurveAUC La primera columna de contiene el valor medio.AUC La segunda y tercera columnas contienen el límite inferior y el límite superior, respectivamente, del límite de confianza.

Para un clasificador perfecto, AUC = 1. Para un clasificador que asigna aleatoriamente observaciones a clases, AUC = 0,5.

Si establece en (predeterminado), a continuación, calcula utilizando los valores devueltos y.XVals'all'perfcurveAUCXY

Si es una matriz numérica, a continuación, calcula el uso y los valores de todas las puntuaciones distintas en el intervalo, que se especifican mediante los elementos más pequeños y más grandes de.XValsperfcurveAUCXYXVals Más concretamente, busca valores para todos los umbrales distintos como si estuvieran establecidos y, a continuación, utiliza un subconjunto de estos (con los valores correspondientes) entre y para calcular.perfcurveXXVals'all'Ymin(XVals)max(XVals)AUC

utiliza la aproximación trapezoidal para estimar el área.perfcurve Si el primer o el último valor de o son s, a continuación, Los elimina para permitir el cálculo de.XYNaNperfcurveAUC Esto se encarga de los criterios que producen s para el especial o los umbrales, por ejemplo, el valor predictivo positivo (PPV) o el valor predictivo negativo (NPV).NaN'reject all''accept all'

Punto de funcionamiento óptimo de la curva ROC, devuelto como una matriz de 1 por 2 con tasa de falsos positivos (FPR) y valores de tasa de positivos verdaderos (TPR) para el punto de funcionamiento óptimo de ROC.

calcula solo para la curva ROC estándar y se establece en s de lo contrario.perfcurveOPTROCPTNaN Para obtener el punto de operación óptimo para la curva ROC, primero se encuentra la pendiente, utilizandoperfcurveS

S=Cost(P|N)Cost(N|N)Cost(N|P)Cost(P|P)*NP

  • Cost (|) es el costo de clasificar erróneamente una clase positiva como una clase negativa.NP Cost (|) es el costo de clasificar erróneamente una clase negativa como una clase positiva.PN

  • Y.P = TP + FNN = TN + FP Son el número total de instancias en la clase positiva y negativa, respectivamente.

a continuación, encuentra el punto de operación óptimo moviendo la línea recta con pendiente desde la esquina superior izquierda de la gráfica ROC (,) hacia abajo y hacia la derecha, hasta que intersecta la curva ROC.perfcurveSFPR = 0TPR = 1

Valores para subclases negativas, devueltas como una matriz.

  • Si especifica solo una clase negativa, entonces es idéntica a.SUBYY

  • Si especifica clases negativas, entonces es una matriz de size-by-, donde es el número de valores devueltos para y, y es el número de clases negativas. calcula los valores sumando recuentos en todas las clases negativas.kSUBYmkmXYkperfcurveY

da los valores del criterio para cada clase negativa por separado.SUBYY Para cada clase negativa, coloca una nueva columna y la rellena con valores para true negative (TN) y falso positivo (FP) contados solo para esta clase.perfcurveSUBYY

Nombres de clase negativos, devueltos como una matriz de celdas.

  • Si proporciona una matriz de entrada de nombres de clase negativos,, y, a continuación, copia los nombres en.NegClassperfcurveSUBYNAMES

  • Si no proporciona, a continuación, extrae de las etiquetas de entrada.NegClassperfcurveSUBYNAMES El orden de es el mismo que el orden de las columnas en.SUBYNAMESSUBY Es decir, es para clase negativa, es para clase negativa, y así sucesivamente.SUBY(:,1)SUBYNAMES{1}SUBY(:,2)SUBYNAMES{2}

Algoritmos

contraer todo

Los límites de confianza de pointwise

Si proporciona matrices de celdas para y, o si establece en un entero positivo, a continuación, devuelve pointwise límites de confianza para,, y.labelsscoresNBootperfcurveXYTAUC No puede suministrar matrices de celdas para y y establecer en un entero positivo al mismo tiempo.labelsscoresNBoot

remuestrea los datos para calcular los límites de confianza mediante la validación cruzada o bootstrap.perfcurve

  • Validación cruzada: Si proporciona matrices de celdas para y, a continuación, utiliza la validación cruzada y trata los elementos de las matrices de celdas como pliegues de validación cruzada. puede ser una matriz de celdas de vectores numéricos, vectores lógicos, matrices de caracteres, matrices de celdas de vectores de caracteres o vectores categóricos.labelsscoresperfcurvelabels Todos los elementos en deben tener el mismo tipo. puede ser un array de celdas de vectores numéricos.labelsscores Las matrices de celdas para y deben tener el mismo número de elementos.labelsscores El número de etiquetas en la celda de debe ser igual al número de puntuaciones en la celda de para cualquiera en el rango de 1 a la cantidad de elementos en.jlabelsjscoresjscores

  • Bootstrap: si se establece en un entero positivo, genera réplicas de arranque para calcular los límites de confianza de pointwise.NBootnperfcurven Si utiliza o para establecer el criterio para o a una función anónima, puede calcular los límites de confianza sólo con bootstrap.XCritYCritXYperfcurve

estima los límites de confianza mediante uno de los dos métodos siguientes:perfcurve

  • Promedio vertical (VA): estima los límites de confianza en y a valores fijos de.perfcurveYTX Es decir, toma muestras de las curvas ROC para valores fijos, promedia los valores correspondientes y calcula los errores estándar.perfcurveXYT Puede usar el argumento de par nombre-valor para corregir los valores para calcular los límites de confianza.XValsX Si no se especifica, a continuación, calcula los límites de confianza en todos los valores.XValsperfcurveX

  • El promedio de umbral (TA): toma muestras de las curvas ROC en umbrales fijos para la puntuación de clase positiva, calcula los promedios de los valores y correspondientes, y estima los límites de confianza.perfcurveTXY Puede usar el argumento de par nombre-valor para usar este método para calcular los límites de confianza.TVals Si establece o no especifica o, a continuación, devuelve, y valores para todas las puntuaciones y calcula los límites de confianza pointwise para y utilizando el promedio de umbral.TVals'all'TValsXValsperfcurveXYTYX

Cuando se calculan los límites de confianza, es un array-by-3, donde es el número de valores fijos o umbrales (valores).YmmXT La primera columna de contiene el valor medio.Y La segunda y tercera columnas contienen el límite inferior y el límite superior, respectivamente, de los límites de confianza de pointwise. es un vector de fila con tres elementos, siguiendo la misma Convención.AUC Si calcula los límites de confianza mediante VA, entonces es una matriz de-por-3, y es un vector de columna.perfcurveTmX Si utiliza TA, entonces es una matriz de-por-3 y es un vector de columna.perfcurveXmT

Devuelve los límites de confianza pointwise.perfcurve No devuelve una banda de confianza simultánea para toda la curva.

Referencias

[1] T. Fawcett. “ROC Graphs: Notes and Practical Considerations for Researchers”, 2004.

[2] Zweig, M., and G. Campbell. “Receiver-Operating Characteristic (ROC) Plots: A Fundamental Evaluation Tool in Clinical Medicine.” Clin. Chem. 1993, 39/4, pp. 561–577 .

[3] Davis, J., and M. Goadrich. “The Relationship Between Precision-Recall and ROC Curves.” Proceedings of ICML ’06, 2006, pp. 233–240.

[4] Moskowitz, C., and M. Pepe. “Quantifying and comparing the predictive accuracy of continuous prognostic factors for binary outcomes.” Biostatistics, 2004, 5, pp. 113–127.

[5] Huang, Y., M. Pepe, and Z. Feng. “Evaluating the Predictiveness of a Continuous Marker.” U. Washington Biostatistics Paper Series, 2006, 250–261.

[6] Briggs, W., and R. Zaretzki. “The Skill Plot: A Graphical Technique for Evaluating Continuous Diagnostic Tests.” Biometrics, 2008, 63, pp. 250 – 261.

[7] R. Bettinger. “Cost-Sensitive Classifier Selection Using the ROC Convex Hull Method.” SAS Institute.

Capacidades ampliadas

Introducido en R2009a