2 votos

¿Por qué sklearn y tensorflow dan diferentes puntuaciones ROC AUC?

Mi algoritmo ML de tensorflow me da un ROC AUC de 0,81 usando la función contrib.metrics.streaming_auc(), mientras que usando los mismos logits y etiquetas en la función de sklearn me da una puntuación de 0,58. ¿Cómo puede ser esto?

Cuando reduzco el número de umbrales en la función tensorflow, tensorflow también me da un AUC significativamente más bajo, así que ¿la explicación puede estar en las dos bibliotecas diferentes formas de calcular el AUC?

Fragmentos de código relevantes, primero de la construcción del gráfico de tensorflow:

...
self.logits = tf.matmul(last_layer_outputs, weights) + bias
self.loss = tf.reduce_mean(tf.nn.sparse_softmax_cross_entropy_with_logits(
                                     self.logits,
                                     tf.argmax(self.y_placeholder,1)))
...
self.softmaxed_logits = tf.nn.softmax(self.logits)
(_, self.auc_update_op) = tf.contrib.metrics.streaming_auc(
                              predictions=self.softmaxed_logits,
                              labels=self.y_placeholder,
                              curve='ROC')

Luego de pedir sklearn.metrics y tensorflow para el AUC:

...
soft_logits = model_instance.sess.run(model_instance.softmaxed_logits,
                                      feed_dict=test_feed)
sklearn_auc = metrics.roc_auc_score(y_true=model_instance.T3SS_data.y_test,
                                    y_score=soft_logits)
tf_auc = model_instance.sess.run(model_instance.auc_update_op,
                                 feed_dict=test_feed)

2voto

Peter Puntos 91

El streaming_auc mantiene la acumulación de las puntuaciones de las repetidas llamadas a la misma, de modo que se puede utilizar, por ejemplo, para obtener el AUC de varias ejecuciones por lotes todas acumuladas. No se limita a calcular el AUC actual.

Para utilizarlo para obtener sólo el AUC actual, puede restablecer las variables locales que utiliza (por ejemplo, ejecutando tf.initialize_local_variables() ) antes de ejecutar su operación de actualización.

1voto

DeepSidhu1313 Puntos 171

NO ! es porque Scikit learn no calcula el AUC discretizando una curva con umbrales variables como se hace en tensorflow! SKlearn utiliza sus valores

esto me acaba de quemar.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X