2
votes

Comment calculer l'entropie croisée binaire entre un ensemble prédit et un test en python?

J'utilise une liste de tests et une liste de prédiction qui contient 4000 éléments comme dans cet exemple

log_loss(test_list,prediction_list)

Comment puis-je trouver l'entropie croisée binaire entre ces 2 listes en termes de code python ? J'ai essayé d'utiliser la fonction log_loss de sklearn:

      test_list=[1,0,0,1,0,.....]
prediction_list=[1,1,0,1,0......]

mais la sortie de la fonction de perte était comme 10.5, ce qui me semblait hors de propos. Est-ce que j'utilise la fonction de manière incorrecte ou dois-je utiliser une autre implémentation?


4 commentaires

Montrez ce que vous avez fait avec la fonction log_loss ?


@MihaiChelaru a mis à jour l'OP


La raison pour laquelle j'ai commenté cela est que vous devriez vous efforcer de créer un exemple minimal, complet et vérifiable de ce que vous avez fait, de ce que le résultat était, et en quoi il différait du résultat attendu. Si votre question est trop vague, cela peut dissuader les gens d'y répondre ou rendre trop difficile la réponse concrète à ce qui pourrait ne pas fonctionner avec votre mise en œuvre. Faites de votre mieux pour réduire le travail que les gens doivent faire lorsqu'ils répondent et vous serez récompensé en nature.


@MihaiChelaru vous avez raison monsieur, c'est juste que je suis novice en termes d'utilisation des fonctions de perte et je voulais un peu obtenir une nouvelle réponse basée sur mes 2 listes indépendamment de ce que j'ai fait par la suite, car je suis ouvert à n'importe quelle implémentation vous proposeriez!


3 Réponses :


0
votes

Vous l'utilisez correctement. Les valeurs de crossentropy binaire sont illimitées - comprises entre 0 et l'infini. Voir https://ml-cheatsheet.readthedocs.io/en/latest/loss_functions .html


1 commentaires

Merci pour la réponse ami. Donc, d'après mon résultat, mon modèle de prédiction est-il une poubelle totale? Étant donné que sur la base du graphique sur le lien ci-dessus, mon taux de prédiction se situe autour de 0,1, donc il peut correspondre à une perte de 10,5 log? Ou est-ce que je lis mal?



1
votes

Hé pour la fonction log_loss, vous êtes censé entrer les probabilités de prédire 1 ou 0 pas l'étiquette prédite. La perte d'entropie croisée n'est pas définie pour les probabilités 0 et 1. votre liste de prédiction doit donc non plus - prediction_list = [0.8,0.4,0.3 ...] Les probabilités sont supposées être pour une étiquette positive. ou ça devrait prediction_list = [[0.8,0.2], [0.4,0.6], [0.3,0.7] ...] Le résultat que vous voyez à cause de eps dans l'implémentation scikit.

Je suppose que votre prediction_list est une liste d'étiquettes, car il est rare de voir un modèle pour prédire les probabilités de 0 et 1.


2 commentaires

Merci pour la réponse ami. Ouais, c'est une liste d'étiquettes, tu as raison. Comment puis-je transformer cela en probabilités alors?


Oui, votre modèle de prédicteur devrait vous donner des probabilités de prédiction. Aussi, si la réponse est correcte, veuillez accepter comme réponse correcte.



1
votes

Je suppose que vous avez déjà les données et les laboratoires et que vous les avez divisés en données et étiquettes de train et de test et vous obtenez la liste de prédiction en utilisant la méthode suivante. Ensuite, vous devez obtenir les probabilités du modèle en appelant clf.predict_proba (data_test) comme indiqué ci-dessous.

import numpy as np
from sklearn.metrics import log_loss
from sklearn.linear_model import LogisticRegression

#test_list = [1,0,0,1,0,.....]
#prediction_list = [1,1,0,1,0......]

# Model learning and prediction
clf = LogisticRegression()
prediction_list = clf.predict(data_test)
pred_probabilities = clf.predict_proba(data_test)

# Evaluation of the prediction
print("The binary cross entropy loss is : %f" % log_loss(labels_test, pred_probabilities))

Je suis encore nouveau dans le Machine Learning, alors prenez ceci avec un grain de sel.


0 commentaires