Tous les défis
Facile 0 résolus 0 % de réussite

Fonctions de perte : MSE, MAE et entropie croisée

Mesurez l'erreur des prédictions d'un modèle avec l'erreur quadratique moyenne, l'erreur absolue moyenne ou l'entropie croisée binaire.

Ce que vous allez apprendre

  • Mesurer l'erreur de prédiction de trois façons
  • Borner les probabilités pour éviter log(0)
  • Choisir une perte pour la régression ou la classification

Problème

Une fonction de perte transforme les erreurs d'un modèle en un seul nombre à minimiser. Implémentez compute_loss(kind, predictions, targets) pour trois pertes courantes, où n est le nombre de prédictions :

  • "mse" (erreur quadratique moyenne) : moyenne de (p - t)²
  • "mae" (erreur absolue moyenne) : moyenne de |p - t|
  • "binary_cross_entropy" : -moyenne de [t × ln(p) + (1 - t) × ln(1 - p)]. Limitez d'abord chaque prédiction p à l'intervalle [0.0000001, 0.9999999] pour ne jamais calculer ln(0).

Entrée

kind : "mse", "mae" ou "binary_cross_entropy".

predictions : les prédictions du modèle.

targets : les valeurs correctes (même longueur). Pour l'entropie croisée, elles valent 0 ou 1 et les prédictions sont entre 0 et 1.

Sortie

Renvoyez la perte sous forme de nombre décimal.

Contraintes

1 ≤ longueur ≤ 1 000

-1 000 ≤ chaque valeur ≤ 1 000 (0 ≤ p ≤ 1 et t ∈ {0, 1} pour l'entropie croisée)

Exemples

Exemple 1
Entrée :
kind = "mse"
targets = [3.0, -0.5, 2.0]
predictions = [2.5, 0.0, 2.0]

Sortie attendue :
expected = 0.166667
Entrée :
std::string kind = "mse";
std::vector<double> targets = {3.0, -0.5, 2.0};
std::vector<double> predictions = {2.5, 0.0, 2.0};

Sortie attendue :
double expected = 0.166667;
Entrée :
string kind = "mse";
double[] targets = new double[] {3.0, -0.5, 2.0};
double[] predictions = new double[] {2.5, 0.0, 2.0};

Sortie attendue :
double expected = 0.166667;

Explication

Erreurs au carré : 0.5² = 0.25, 0.5² = 0.25 et 0² = 0. Leur moyenne est 0.5 / 3 ≈ 0.166667.

Exemple 2
Entrée :
kind = "binary_cross_entropy"
targets = [1.0, 0.0]
predictions = [0.9, 0.2]

Sortie attendue :
expected = 0.164252
Entrée :
std::string kind = "binary_cross_entropy";
std::vector<double> targets = {1.0, 0.0};
std::vector<double> predictions = {0.9, 0.2};

Sortie attendue :
double expected = 0.164252;
Entrée :
string kind = "binary_cross_entropy";
double[] targets = new double[] {1.0, 0.0};
double[] predictions = new double[] {0.9, 0.2};

Sortie attendue :
double expected = 0.164252;

Explication

-(ln(0.9) + ln(1 - 0.2)) / 2 = -(-0.105361 - 0.223144) / 2 ≈ 0.164252. Des prédictions correctes et confiantes donnent une perte faible.

Références

Ce défi a été adapté pour CodeUtility. Suivez l'énoncé et les contraintes ci-dessus.

Apprenez des autres

Solutions de la communauté

Aucune solution publiée pour l'instant. Résolvez ce défi pour partager la première.