Main Content

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ística de funcionamiento 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 y de una curva ROC para un vector de predicciones de clasificadores, , 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 del 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 funcionamiento ó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 arranque, especificar el costo de clasificación incorrecta o calcular los límites de confianza en paralelo.XYlímites de confianza puntuales

Ejemplos

contraer todo

Cargue los datos de ejemplo.

load fisheriris

Utilice solo las dos primeras entidades como variables predictoras. Defina un problema de clasificación binaria utilizando sólo las medidas 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');

Calcular 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 bajo la curva es 0.7918. El AUC máximo es 1, que corresponde a un clasificador perfecto. Los valores AUC más grandes indican un mejor rendimiento del clasificador.

Trazar 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 de valor real de 351x34. es una matriz de caracteres de etiquetas de clase: para los retornos de radar incorrectos y para los buenos retornos de radar.XY'b''g'

Vuelva a formatear 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 radar vuelva a ser malo.

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

Calcular la curva ROC estándar utilizando las probabilidades de puntuaciones.

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

Entrene un clasificador SVM en los mismos datos de ejemplo. Estandarizar los datos.

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

Calcular las probabilidades posteriores (puntuaciones).

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

La segunda columna de contiene las probabilidades posteriores de mala trayectoria del radar.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');

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

mdlNB = fitcnb(pred,resp);

Calcular 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');

Trazar 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 ROC para umbrales más altos, la regresión logística suele ser mejor para distinguir los retornos de radar defectuosos de los buenos. La curva ROC para Bayes ingenuos 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 clasificadores.

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 AUC más alta para la clasificación y Bayes ingenuos 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.

En este ejemplo se 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. Etiquetar puntos en el primer y tercer cuadrante como pertenecientes a la clase positiva, y los del segundo y cuarto cuadrantes de 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 sigmoid.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  

Entrene a un clasificador SVM utilizando la función de kernel sigmoid. Es una buena práctica estandarizar los datos.

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

Establecer ; dentro y guardar como .gamma = 0.5mysigmoid.mmysigmoid2.m Y, entrenar un clasificador SVM utilizando el kernel sigmoid 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); 

Trazar 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 núcleo con el parámetro gamma establecido en 0.5 proporciona mejores resultados en la muestra.

Compare las medidas de las 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 ver la comparación visual del rendimiento de clasificación con estos dos valores de parámetros gamma, véase .Train SVM Classifier Using Custom Kernel

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 matriz doble consta de cuatro tipos de medidas en las flores: longitud del sépalo, ancho del sépalo, longitud del pétalo y ancho del pétalo.meas Todas las medidas son en centímetros.

Entrene un árbol de clasificación utilizando la longitud y anchura del sépalo como 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 las especies basadas en el árbol.Model

[~,score] = resubPredict(Model);

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

Calcular la curva ROC para las predicciones de que una observación pertenece a versicolor, dadas las etiquetas de clase verdaderas.species También calcule el punto de funcionamiento y los valores óptimos para las subclases negativas.y Devuelve los nombres de las clases negativas.

Dado que se trata de un problema multiclase, no puede simplemente suministrar como entrada a .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 de 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 proporcionar una función que tenga en cuenta las puntuaciones de las dos clases negativas.perfcurve Una de esas 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');

, por defecto, es la tasa de falsos positivos (fallout o 1-especificidad) y, por defecto, es la tasa positiva verdadera (recuperación o sensibilidad).XY La etiqueta de clase positiva es .versicolor Dado que no se define una clase negativa, se supone que las observaciones que no pertenecen a la clase positiva están en una clase.perfcurve La función lo acepta como la 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'}

Trazar 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

Busque el umbral que corresponde al punto de funcionamiento ó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 proporcionar una función que tenga en cuenta 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 matriz doble consta de cuatro tipos de medidas en las flores: longitud del sépalo, ancho del sépalo, longitud del pétalo y ancho del pétalo.meas Todas las medidas son en centímetros.

Utilice solo las dos primeras entidades como variables predictoras. Defina un problema binario utilizando sólo las medidas 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');

Calcular los intervalos de confianza puntuales en la tasa positiva verdadera (TPR) mediante el promedio vertical (VA) y el muestreo mediante 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. solicita que se devuelvan , , y los valores de todas las puntuaciones y promedian los valores (tasa positiva verdadera) en todos los valores (tasa de falso positivo) utilizando el promedio vertical.'NBoot',1000'XVals','All'perfcurveXYTYX Si no especifica , calcula los límites de confianza mediante el promedio de umbral de forma predeterminada.XValsperfcurve

Trazar los intervalos de confianza puntuales.

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')

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

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

Si establece en , o si no especifica o , , devuelve , , y valores para todas las puntuaciones y calcula los límites de confianza puntuales para y mediante el promedio de umbral.'TVals''All''TVals''Xvals'perfcurveXYTXY

Trazar 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 True, especificadas como un vector numérico, un vector lógico, una matriz de caracteres, una matriz de cadenas, una matriz de celdas de vectores de caracteres o una matriz categórica. Para obtener más información, consulte .Grouping 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 miembro de las etiquetas de entrada. El valor 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 cuerdas
Matriz de celdas 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, especifique como .posclass'malignant'

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

Argumentos de par nombre-valor

Especifique pares opcionales separados por comas de argumentos. es el nombre del argumento y es el valor correspondiente. deben aparecer entre comillas.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 puntuales se calculan mediante el método percentil.

Lista de clases negativas, especificada 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 que se encuentran en la matriz de entrada de etiquetas son negativas.perfcurveNegClass'all'

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

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

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

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

CriterioDescripción
tpNúmero de instancias positivas verdaderas
fnNúmero de instancias negativas falsas.
fpNúmero de instancias de falsos positivos.
tnNúmero de instancias negativas verdaderas.
tp+fpSuma de casos verdaderos positivos y falsos positivos.
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 , otprsensrecaTasa positiva verdadera, o sensibilidad, o recuperación.
tpr= sens = reca = tp/(tp+fn)
Ofnrmiss Tasa negativa falsa, o falta.
fnr = miss = fn/(tp+fn)
OfprfallTasa de falsos positivos, o consecuencias, o 1 – especificidad.
fpr = fall = fp/(tn+fp)
OtnrspecTasa negativa real 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 a medida con los argumentos de entrada, donde es una matriz de confusión de 2 por 2, es una matriz de escalas de clases de 2 por 1 y es una matriz de coste de clasificación incorrecta de 2 por 2.(C,scale,cost)Cscalecost

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 monotono de la puntuación de clase positiva.

Ejemplo: 'YCrit','ecost'

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

  • Si especifica , calcula y for (cuando corresponda) solo para el archivo .XValsperfcurveXYlímites de confianza puntualesYXVals

  • Si no especifica , entonces , 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, especificados como el par separado por comas que consta de y una matriz numérica.'TVals''all'

  • Si se establece en o no se especifica y no se especifica, devuelve , , y valores para todas las puntuaciones y cálculos para y mediante el promedio de umbral.TVals'all'XValsperfcurveXYTlímites de confianza puntualesXY

  • Si se establece en una matriz numérica, devuelve , , y los valores de los umbrales especificados y calcula los límites de confianza puntuales 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 número especificado o , especificado como el par separado por comas que consta de y o .XValsTVals'UseNearest''on''off'

  • Si especifica numeric y se establece en , 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 numeric y se establece en , devuelve el archivo .XValsUseNearest'off'perfcurveXVals

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

Ejemplo: 'UseNearest','off'

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

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

  • Si es , agrega instancias con puntuaciones a recuentos de clasificación falsos 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 anteriores para 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 probabilidades anteriores de las frecuencias de clase.Prior'empirical'perfcurve

Si es , entonces establece todas las probabilidades anteriores para que sean iguales.Prior'uniform'perfcurve

Ejemplo: 'Prior',[0.3,0.7]

Tipos de datos: single | double | char | string

Costes de clasificación errónea, especificados como el par separado por comas que consta de 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 también permite especificar costes distintos de cero para una clasificación correcta.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 intervalo 0 a 1. calcula 100*(1 – ) por ciento para , , , y para un nivel de confianza de 1 – .'Alpha'perfcurveαlímites de confianza puntualesXYTAUCα

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

Tipos de datos: single | double

Pesos de observación, especificados 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 o hacer.scoreslabels

Si y están en matrices de celdas y necesita suministrar , las ponderaciones deben estar en una matriz de celdas también.scoreslabelsWeights En este caso, cada elemento 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 , y o confianza mediante la validación cruzada, utiliza estos pesos de observación en lugar de los recuentos de observación.perfcurveXYT

Cuando calcula los límites de confianza mediante bootstrap, toma muestras de observaciones con reemplazo, utilizando estos pesos 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 límites de confianza, especificado como el par separado por comas que consta de y un entero positivo.'NBoot' El valor predeterminado 0 significa que los límites de confianza no se calculan.

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

Ejemplo: 'NBoot',500

Tipos de datos: single | double

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

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

  • o — Intervalo aproximado normal con sesgo arrancado y error estándar'norm'normal'

  • o — Método porcentual'per''percentile'

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

  • o — Intervalo de confianza estudiantil'stud''student'

Ejemplo: 'BootType','cper'

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

Al calcular los intervalos de confianza de arranque retoje ( is ), puede especificar adicionalmente o, nombre-valor, argumentos de par de , mediante .'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, especificados como el par separado por comas que consta de y una matriz de estructura devuelta por .'Options'statset Estas opciones requieren . utiliza este argumento solo para calcular límites de confianza puntuales.Parallel Computing Toolbox™perfcurve Para calcular estos límites, debe pasar matrices de celdas para o establecer en un entero positivo.labelsscoresNBoot

Esta tabla resume las opciones disponibles.

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

  • — Cálculo paralelo.true Necesita que esta opción funcione.Parallel Computing Toolbox

'UseSubstreams'
  • — No utilice una subsecuencia independiente para cada iteración (predeterminado).false

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

'Streams'

Un objeto o una matriz de celdas de dichos objetos.RandStream Si especifica , utilice un único 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 proporcionar una única secuencia 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 es el tamaño del grupo paralelo.'Streams' Si un grupo paralelo aún no está abierto, es posible que se abra un grupo por usted, 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 .parpool (Parallel Computing Toolbox)perfcurve'Options',statset('UseParallel',true)

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

Tipos de datos: struct

Argumentos de salida

contraer todo

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

  • Si no calcula el archivo , o si los calcula mediante el promedio vertical, entonces es un vector.perfcurvelímites de confianza puntualesX

  • Si calcula los límites de confianza mediante el promedio de umbral, entonces es una matriz -by-3, donde está 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 puntuales.

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

  • Si no calcula el , entonces es un vector.perfcurvelímites de confianza puntualesY

  • Si calcula los límites de confianza, entonces es una matriz -by-3, donde está 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 puntuales.

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

  • Si no calcula el archivo , o los calcula mediante el promedio de umbral, entonces es un vector.perfcurvelímites de confianza puntualesT

  • Si calcula los límites de confianza mediante el promedio vertical, es una matriz -by-3, donde está 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 puntuales.

Para cada umbral, es el recuento de observaciones positivas verdaderas con puntuaciones mayores o iguales a este umbral, y es el recuento de observaciones falsas positivas con puntuaciones mayores o iguales a este umbral. define los recuentos negativos y , de forma 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 que se encuentran en la matriz de puntuaciones, devuelve el archivo , y matrices con + 1 filas. establece elementosmperfcurveXYTmperfcurve T(2:m+1) a los umbrales distintos y replica .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

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

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

  • Si calcula los límites de confianza mediante el promedio vertical, es un vector de 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 n.o 1. Para un clasificador que asigna aleatoriamente observaciones a las clases, AUC a 0,5.

Si establece en (valor predeterminado), se calcula mediante los valores devueltos.XVals'all'perfcurveAUCXY

Si es una matriz numérica, calcula el uso y los valores de todas las puntuaciones distintas del intervalo, que se especifican mediante los elementos más pequeños y más grandes de .XValsperfcurveAUCXYXVals Más precisamente, busca valores para todos los umbrales distintos como si estuvieran establecidos en , 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 aproximación trapezoidal para estimar el área.perfcurve Si el primer o ú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 umbrales, por ejemplo, el valor predictivo positivo (VPP) o el valor predictivo negativo (NPV).NaN'reject all''accept all'

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

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

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 los recuentos totales de instancias en la clase positiva y negativa, respectivamente.

a continuación, encuentra el punto de funcionamiento ó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 se interseca la curva ROC.perfcurveSFPR = 0TPR = 1

Valores para subclases negativas, devueltos como una matriz.

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

  • Si especifica clases negativas, es una matriz de size -by- , donde está 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 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 false positive (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, , , copia los nombres en .NegClassperfcurveSUBYNAMES

  • Si no proporciona , se 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 la clase negativa, es para la clase negativa, y así sucesivamente.SUBY(:,1)SUBYNAMES{1}SUBY(:,2)SUBYNAMES{2}

Algoritmos

contraer todo

Límites de confianza puntuales

Si proporciona matrices de celdas para y , o si establece en un entero positivo, devuelve límites de confianza puntuales para , , , y .labelsscoresNBootperfcurveXYTAUC No puede proporcionar matrices de celdas para y establecer se establece en un entero positivo al mismo tiempo.labelsscoresNBoot

remuestrea los datos para calcular los límites de confianza mediante la validación cruzada o el arranque.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 deben tener el mismo tipo. puede ser una matriz 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 cualquiera en el rango de 1 al número de elementos en .jlabelsjscoresjscores

  • Bootstrap — Si establece un entero positivo , genera réplicas de arranque para calcular límites de confianza puntuales.NBootnperfcurven Si utiliza o para establecer el criterio para o en una función anónima, puede calcular los límites de confianza solo mediante bootstrap.XCritYCritXYperfcurve

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

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

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

Cuando se calculan los límites de confianza, es una matriz -by-3, donde está 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 puntuales. 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 -by-3 y es un vector de columna.perfcurveTmX Si utiliza TA, entonces es una matriz -by-3 y es un vector de columna.perfcurveXmT

devuelve límites de confianza puntuales.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