sklearn.metrics
.roc_auc_score¶
- sklearn.metrics.roc_auc_score()¶
Calcula el Área Bajo la Curva Característica Operativa del Receptor (ROC AUC) a partir de las puntuaciones de predicción.
Nota: esta implementación puede utilizarse con la clasificación binaria, multiclase y multietiqueta, pero se aplican algunas restricciones (ver Parámetros).
Lee más en el Manual de Usuario.
- Parámetros
- y_truearray-like de forma (n_samples,) o (n_samples, n_classes)
Etiquetas verdaderas o indicadores de etiqueta binarios. Los casos binarios y multiclase esperan etiquetas con forma (n_samples,) mientras que el caso multietiqueta espera indicadores de etiqueta binarios con forma (n_samples, n_classes).
- y_scorearray-like de forma (n_samples,) o (n_samples, n_classes)
Puntuaciones objetivo.
En el caso binario, corresponde a un arreglo de forma
(n_samples,)
. Se puede proporcionar tanto estimaciones de probabilidad como valores de decisión sin umbral. Las estimaciones de probabilidad corresponden a la probabilidad de la clase con la etiqueta mayor, es decir,estimator.classes_[1]
y por tantoestimator.predict_proba(X, y)[:, 1]
. Los valores de decisión corresponden a la salida deestimator.decision_function(X, y)
. Ver más información en el Manual de Usuario;En el caso multiclase, corresponde a un arreglo de forma
(n_samples, n_classes)
de estimaciones de probabilidad proporcionadas por el métodopredic_proba
. Las estimaciones de probabilidad deben sumar 1 en todas las clases posibles. Además, el orden de las puntuaciones de las clases debe corresponder al orden delabels
, si se proporcionan, o bien al orden numérico o lexicográfico de las etiquetas eny_true
. Ver más información en el Manual de Usuario;En el caso multietiqueta, corresponde a un arreglo de forma
(n_samples, n_classes)
. Las estimaciones de probabilidad son proporcionadas por el métodopredict_proba
y los valores de decisión sin umbral por el métododecision_function
. Las estimaciones de probabilidad corresponden a la probabilidad de la clase con la etiqueta mayor para cada salida del clasificador. Ver más información en el Manual de Usuario.
- average{“micro”, “macro”, “samples”, “weighted”} o None, default=”macro”
Si es
None
, se devuelven las puntuaciones de cada clase. De lo contrario, esto determina el tipo de promedio realizado en los datos: Nota: el ROC AUC multiclase actualmente sólo maneja los promedios “macro” y “weighted”.'micro'
:Calcula las métricas globalmente considerando cada elemento de la matriz indicatriz de etiquetas como una etiqueta.
'macro'
:Calcula las métricas para cada etiqueta y encuentra su media no ponderada. Esto no tiene en cuenta el desequilibrio de la etiqueta.
'weighted'
:Calcula las métricas para cada etiqueta y encuentra su promedio, ponderado por el soporte (el número de instancias verdaderas para cada etiqueta).
'samples'
:Calcula las métricas para cada instancia, y encuentra su promedio.
Será ignorado cuando
y_true
sea binario (binary).- sample_weightarray-like de forma (n_samples,), default=None
Ponderaciones de la muestra.
- max_fprfloat > 0 and <= 1, default=None
Si no es
None
, se devuelve el AUC parcial estandarizado [2] sobre el rango [0, max_fpr]. Para el caso multiclase,max_fpr
, debe ser igual aNone
o1.0
ya que el cálculo parcial de AUC ROC actualmente no es compatible con multiclase.- multi_class{“raise”, “ovr”, “ovo”}, default=”raise”
Sólo se utiliza para objetivos multiclase. Determina el tipo de configuración a utilizar. El valor predeterminado genera un error, por lo que se debe pasar explícitamente
'ovr'
u'ovo'
.'ovr'
:Significa Uno-vs-resto. Calcula el AUC de cada clase frente al resto [3] [4]. Esto trata el caso multiclase de la misma manera que el caso multietiqueta. Es sensible al desequilibrio de clases incluso cuando
average == 'macro'
, porque el desequilibrio de clases afecta a la composición de cada una de las agrupaciones de “rest”.'ovo'
:Significa Uno-vs-uno. Calcula el promedio de AUC de todas las posibles combinaciones de clases por pares [5]. Insensible al desequilibrio de clases cuando
average == 'macro'
.
- labelsarray-like de forma (n_classes,), default=None
Sólo se utiliza para objetivos multiclase. Lista de etiquetas que indexan las clases en
y_score
. Si esNone
, se utiliza el orden numérico o lexicográfico de las etiquetas eny_true
.
- Devuelve
- aucfloat
Ver también
average_precision_score
Área bajo la curva de precisión-exhaustividad.
roc_curve
Calcula la curva Características Operativa del Receptor (ROC).
plot_roc_curve
Traza la curva Característica Operativa del Receptor (ROC).
Referencias
- 1
Entrada de Wikipedia para el receptor que opera la característica
- 2
- 3
Provost, F., Domingos, P. (2000). Well-trained PETs: Improving probability estimation trees (Section 6.2), CeDER Working Paper #IS-00-04, Stern School of Business, New York University.
- 4
Fawcett, T. (2006). An introduction to ROC analysis. Pattern Recognition Letters, 27(8), 861-874.
- 5
Ejemplos
Caso binario:
>>> from sklearn.datasets import load_breast_cancer >>> from sklearn.linear_model import LogisticRegression >>> from sklearn.metrics import roc_auc_score >>> X, y = load_breast_cancer(return_X_y=True) >>> clf = LogisticRegression(solver="liblinear", random_state=0).fit(X, y) >>> roc_auc_score(y, clf.predict_proba(X)[:, 1]) 0.99... >>> roc_auc_score(y, clf.decision_function(X)) 0.99...
Caso multiclase:
>>> from sklearn.datasets import load_iris >>> X, y = load_iris(return_X_y=True) >>> clf = LogisticRegression(solver="liblinear").fit(X, y) >>> roc_auc_score(y, clf.predict_proba(X), multi_class='ovr') 0.99...
Caso multietiqueta:
>>> from sklearn.datasets import make_multilabel_classification >>> from sklearn.multioutput import MultiOutputClassifier >>> X, y = make_multilabel_classification(random_state=0) >>> clf = MultiOutputClassifier(clf).fit(X, y) >>> # get a list of n_output containing probability arrays of shape >>> # (n_samples, n_classes) >>> y_pred = clf.predict_proba(X) >>> # extract the positive columns for each output >>> y_pred = np.transpose([pred[:, 1] for pred in y_pred]) >>> roc_auc_score(y, y_pred, average=None) array([0.82..., 0.86..., 0.94..., 0.85... , 0.94...]) >>> from sklearn.linear_model import RidgeClassifierCV >>> clf = RidgeClassifierCV().fit(X, y) >>> roc_auc_score(y, clf.decision_function(X), average=None) array([0.81..., 0.84... , 0.93..., 0.87..., 0.94...])