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)