Quelle est la distribution normale lorsque lécart type est égal à zéro?

Je comprends que la distribution normale nest pas définie si lécart type est nul, mais je dois gérer le cas où toutes les valeurs sont égales dans un algorithme informatique. La méthode suivante doit renvoyer une valeur valide, même si lécart type est égal à zéro. Comment puis-je corriger cette méthode pour quelle ne divise pas par zéro?

public static double NormalDist(double x, double mean, double standard_dev) { double fact = standard_dev * Math.Sqrt(2.0 * Math.PI); double expo = (x - mean) * (x - mean) / (2.0 * standard_dev * standard_dev); return Math.Exp(-expo) / fact; } 

Mon idée était dinsérer ceci au début de la méthode:

 if (standard_dev == 0.0) { return x == mean ? 1.0 : 0.0; } 

Est-ce que ce serait correct?

Commentaires

  • Vous navez pas ' t " fix " le PDF de distribution normale est indéfini pour $ \ sigma = 0 $, il ' nest pas 1 comme dans votre " fix "
  • @Aksakal signale un problème important: comment comptez-vous utiliser NormalDist dans votre algorithme?
  • Ceci est utilisé dans un na ï cinq bayes classifer. Il ' tente de sélectionner une classe en fonction des données dun ensemble dapprentissage. Pour moi, sil semble que si toutes les valeurs dun ensemble de paramètres sont identiques, elles ne devraient avoir aucune influence sur le résultat. Ainsi, par exemple, si nous examinons comment la pointure entre dans une distribution pour déterminer si une personne (la classe) est un homme ou une femme, mais sil se trouve que toutes les personnes de la distribution ont exactement la même pointure, alors la taille de chaussure ne peut pas être utilisée pour différencier et devrait être retirée de la considération. Je cherche à gérer ce cas.
  • Peut-être que la réponse nest pas de changer la sortie de cette méthode, mais plutôt de simplement rejeter complètement cette valeur.

Réponse

Lorsque lécart type est égal à zéro, votre PDF gaussien (normal) se transforme en fonction delta de Dirac . Vous ne pouvez pas simplement brancher un écart type de zéro dans lexpression conventionnelle. Par exemple, si le PDF est connecté à une sorte dintégration numérique, cela ne fonctionnera pas. Vous devez modifier les intégrales. Dans lexemple ci-dessous, nous calculons la valeur moyenne de la fonction $ g (x) $ en utilisant la densité gaussienne $ f (x | \ mu, \ sigma ^ 2) $:

$$ \ int g (x ) f (x | \ mu, \ sigma ^ 2) dx $$

lorsque vous branchez une variance nulle, cela devient delta-fonctionnel: $$ \ int g (x) f (x | \ mu, 0) dx = \ int g (x) \ delta (x- \ mu) dx = g (\ mu) $$

Votre code doit pouvoir le reconnaître, sinon il échouera.

Une façon de résoudre ce problème est étonnamment simple: branchez une très petite valeur de $ \ sigma $ en gaussien au lieu de zéro. Vous devrez choisir le bon $ \ sigma $ pour votre situation. Sil est trop petit, il fera exploser votre exposant, et les intégrales ne fonctionneront pas ou la précision sera faible. Cela va vers une approximation gaussienne connue de la fonction delta: $$ \ delta (x) = \ lim _ {\ sigma \ to 0} \ mathcal N (0, \ sigma) $$

Commentaires

  • Échec de " " doit dépendre de sa spécification fonctionnelle. Si lintention est simplement de renvoyer une version continue de la densité de probabilité, alors la fonction qui renvoie toujours zéro est correcte, car le delta de Dirac a une densité définie partout sauf à la moyenne. Si, dun autre côté, cette fonction est appelée dans le cadre dun calcul de vraisemblance pour calculer une estimation de ML, alors il ny a aucune implémentation qui la fera réussir: tout ce quelle peut faire est de lever une condition derreur.
  • @whuber, le format flottant point prend en charge linfini positif. Ainsi, il pouvait définir le PDF sur linfini. Le problème ' est que même alors sa routine doptimisation de vraisemblance ne fonctionnera pas, à cause de la discontinuité. Par conséquent, je ' m disant quil doit modifier le code qui utilise le PDF. Il ne peut ' t sen tirer en jouant uniquement avec le PDF
  • Jai posté un commentaire supplémentaire ci-dessus avec plus dinformations. Je ' je pense quAksakal a raison. Je dois modifier le code qui utilise la méthode.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *