Tengo un problema de clasificación binaria donde utilizo el siguiente código para obtener mi weighted avarege precision
, weighted avarege recall
, weighted avarege f-measure
y roc_auc
.
df = pd.read_csv(input_path+input_file)
X = df[features]
y = df[["gold_standard"]]
clf = RandomForestClassifier(random_state = 42, class_weight="balanced")
k_fold = StratifiedKFold(n_splits=10, shuffle=True, random_state=0)
scores = cross_validate(clf, X, y, cv=k_fold, scoring = ('accuracy', 'precision_weighted', 'recall_weighted', 'f1_weighted', 'roc_auc'))
print("accuracy")
print(np.mean(scores['test_accuracy'].tolist()))
print("precision_weighted")
print(np.mean(scores['test_precision_weighted'].tolist()))
print("recall_weighted")
print(np.mean(scores['test_recall_weighted'].tolist()))
print("f1_weighted")
print(np.mean(scores['test_f1_weighted'].tolist()))
print("roc_auc")
print(np.mean(scores['test_roc_auc'].tolist()))
Me dieron los siguientes resultados para el mismo conjunto de datos con 2 configuraciones de funciones diferentes.
Feature setting 1 ('accuracy', 'precision_weighted', 'recall_weighted', 'f1_weighted', 'roc_auc'):
0.6920, 0.6888, 0.6920, 0.6752, 0.7120
Feature setting 2 ('accuracy', 'precision_weighted', 'recall_weighted', 'f1_weighted', 'roc_auc'):
0.6806 0.6754 0.6806 0.6643 0.7233
Así, podemos ver que en feature setting 1
obtenemos buenos resultados para 'exactitud', 'precision_weighted', 'recall_weighted', 'f1_weighted' en comparación con feature setting 2
.
Sin embargo, cuando se trata de 'roc_auc' feature setting 2
es mejor que feature setting 1
. He encontrado este extraño becuase cada otra métrica fue mejor con feature setting 1
.
Por un lado, sospecho que esto sucede desde que estoy usando weighted
anota para precision, recall and f-measure
y no con roc_auc
. ¿Es posible hacerlo weighted roc_auc
para la clasificación binaria en sklearn?
¿Cuál es el problema real de estos resultados roc_auc extraños?
Estoy feliz de proporcionar más detalles si es necesario.
No es raro, porque la comparación de todas estas otras métricas con las AUC es como comparar manzanas con naranjas.
He aquí una descripción de alto nivel de todo el proceso:
- Clasificadores probabilísticos (como RF aquí) salidas de probabilidad productos
p
en[0, 1]
. - Para obtener predicciones de clase duros (
0/1
), se aplica un umbral a estas probabilidades; si no se establece de manera explícita (como aquí), este umbral se toma implícitamente a ser de 0,5, es decir, sip>0.5
a continuaciónclass=1
, de lo contrarioclass=0
. - Métricas como la exactitud, precisión, recordar, y f1-score se calculan sobre las predicciones de clase duros
0/1
, es decir, después del umbral se ha aplicado. - En cambio, las medidas de AUC El rendimiento de un clasificador binario promediadas en el rango de todos los umbrales posibles , y no para un determinado umbral.
Así que, sin duda puede suceder, y que de hecho puede dar lugar a confusión entre los nuevos practicantes.
La segunda parte de mi respuesta en esta pregunta similar podría ser útil para más detalles. citando:
De acuerdo con mi experiencia, al menos, la mayoría de los practicantes de LD piensan que las AUC medidas de puntuación algo diferente de lo que realmente lo hace: la común (y lamentable) el uso es igual que cualquier otro el de mayor-la-métrica mejor, al igual que la precisión, lo que puede conducirá naturalmente a los rompecabezas como el que te expresas.