Une introduction douce à l’estimation de la densité de probabilité

Tweet Partager Partager

Dernière mise à jour le 24 juillet 2020

La densité de probabilité est la relation entre les observations et leur probabilité.

Certains résultats d’une variable aléatoire auront une faible densité de probabilité et d’autres résultats auront une densité de probabilité élevée.

La forme générale de la densité de probabilité est appelée probabilité distribution, et le calcul des probabilités pour des résultats spécifiques d’une variable aléatoire est effectué par une fonction de densité de probabilité, ou PDF en abrégé.

Il est utile de connaître la fonction de densité de probabilité pour un échantillon de données dans l’ordre pour savoir si une observation donnée est peu probable, ou si peu probable qu’elle soit considérée comme une valeur aberrante ou une anomalie et si elle doit être supprimée. Il est également utile de choisir des méthodes d’apprentissage appropriées qui nécessitent que les données d’entrée aient une distribution de probabilité spécifique.

Il est peu probable que la fonction de densité de probabilité pour un échantillon aléatoire de données soit connue. En tant que telle, la densité de probabilité doit être approximée en utilisant un processus connu sous le nom d’estimation de densité de probabilité.

Dans ce didacticiel, vous découvrirez une introduction douce à l’estimation de la densité de probabilité.

Après avoir terminé ceci tutoriel, vous le saurez:

  • Les graphiques histogrammes fournissent un moyen rapide et fiable de visualiser la densité de probabilité d’un échantillon de données.
  • L’estimation de la densité de probabilité paramétrique implique la sélection d’une distribution commune et l’estimation des paramètres de la fonction de densité à partir d’un échantillon de données.
  • L’estimation de densité de probabilité non paramétrique implique l’utilisation d’une technique pour ajuster un modèle à la distribution arbitraire des données, comme l’estimation de densité par noyau.

Lancez votre projet avec mon nouveau livre Probability for Machine Learning, comprenant des didacticiels étape par étape et les fichiers de code source Python pour tous les exemples.

Commençons.

Une introduction douce n à l’estimation de la densité de probabilité
Photo par Alistair Paterson, certains droits réservés.

Présentation du didacticiel

Ce didacticiel est divisé en quatre parties; ce sont:

  1. Densité de probabilité
  2. Résumer la densité avec un histogramme
  3. Estimation de densité paramétrique
  4. Estimation de densité non paramétrique

Densité de probabilité

Une variable aléatoire x a une distribution de probabilité p (x).

La relation entre les résultats d’une variable aléatoire et sa probabilité est dénommée densité de probabilité, ou simplement «densité».

Si une variable aléatoire est continue, la probabilité peut être calculée via la fonction de densité de probabilité, ou PDF en abrégé. La forme de la densité de probabilité La fonction à travers le domaine pour une variable aléatoire est appelée distribution de probabilité et les distributions de probabilité communes ont des noms, tels que uniforme, normal, exponentiel, etc.

Étant donné une variable aléatoire, nous nous intéressons à la densité de ses probabilités.

Par exemple, étant donné un échantillon aléatoire d’une variable, nous pourrions vouloir connaître des choses comme la forme de la distri bution, la valeur la plus probable, la répartition des valeurs et d’autres propriétés.

Connaître la distribution de probabilité pour une variable aléatoire peut aider à calculer les moments de la distribution, comme la moyenne et la variance, mais peut également être utile pour d’autres considérations plus générales, comme déterminer si une observation est peu probable ou très improbable et pourrait être une valeur aberrante ou une anomalie.

Le problème est que nous pouvons ne pas connaître la distribution de probabilité pour une variable aléatoire. Nous connaissons rarement la distribution car nous n’avons pas accès à tous les résultats possibles pour une variable aléatoire. En fait, nous n’avons accès qu’à un échantillon d’observations. En tant que tel, nous devons sélectionner une distribution de probabilité.

Ce problème est appelé estimation de densité de probabilité, ou simplement «estimation de densité», car nous utilisons les observations dans un échantillon aléatoire pour estimer la densité générale de probabilités au-delà de l’échantillon de données dont nous disposons.

Il y a quelques étapes dans le processus d’estimation de la densité pour une variable aléatoire.

La première étape consiste à examiner la densité de observations dans l’échantillon aléatoire avec un histogramme simple. À partir de l’histogramme, nous pourrions être en mesure d’identifier une distribution de probabilité commune et bien comprise qui peut être utilisée, telle qu’une distribution normale. Sinon, nous devrons peut-être ajuster un modèle pour estimer la distribution.

Dans les sections suivantes, nous examinerons de plus près chacune de ces étapes à tour de rôle.

Nous nous concentrerons sur des données univariées, par exemple une variable aléatoire, dans cet article pour plus de simplicité. Bien que les étapes soient applicables aux données à plusieurs variables, elles peuvent devenir plus difficiles ng à mesure que le nombre de variables augmente.

Vous voulez apprendre les probabilités pour l’apprentissage automatique

Suivez maintenant mon cours intensif gratuit de 7 jours sur les e-mails (avec un exemple de code).

Cliquez pour vous inscrire et obtenir une version PDF gratuite du cours en format PDF.

Téléchargez votre mini-cours GRATUIT

Résumer la densité avec un histogramme

La première étape de l’estimation de la densité consiste à créer un histogramme des observations dans l’échantillon aléatoire.

Un histogramme est un graphique qui consiste d’abord à regrouper les observations dans des bacs et à compter le nombre d’événements qui tombent dans chaque bac. Les dénombrements, ou fréquences d’observations, dans chaque case sont ensuite tracés sous forme de graphique à barres avec les cases sur l’axe x et la fréquence sur l’axe y.

Le choix du nombre de cases est important car il contrôle la grossièreté de la distribution (nombre de barres) et, par conséquent, la façon dont la densité des observations est tracée. C’est une bonne idée d’expérimenter différentes tailles de bac pour un échantillon de données donné afin d’obtenir plusieurs perspectives ou vues sur les mêmes données.

Un histogramme peut être créé en utilisant la bibliothèque Matplotlib et la fonction hist (). Les données sont fournies comme premier argument, et le nombre de casiers est spécifié via l’argument « bins » soit comme un entier (par exemple 10) ou comme une séquence des limites de chaque casier (par exemple).

L’extrait ci-dessous crée un histogramme avec 10 groupes pour un échantillon de données.

1
2
3
4

# trace un histogramme de l’échantillon
pyplot.hist (sample, bins = 10)
pyplot.show ()

Nous pouvons créer un échantillon aléatoire tiré d’une distribution normale et p retend que nous ne connaissons pas la distribution, puis créez un histogramme des données. La fonction normale () NumPy y parviendra et nous générerons 1000 échantillons avec une moyenne de 0 et un écart type de 1, par ex. un gaussien standard.

L’exemple complet est listé ci-dessous.

1
2
3
4
5
6
7
8

# exemple de tracé d’un histogramme d’un échantillon aléatoire
depuis matplotlib import pyplot
depuis numpy.random import normal
# générer un échantillon
sample = normal (size = 1000)
# trace un histogramme de l’échantillon
pyplot.hist (sample, bins = 10)
pyplot.show ()

Exécution de L’exemple dessine un échantillon d’observations aléatoires et crée l’histogramme avec 10 cases. Nous pouvons clairement voir la forme de la distribution normale.

Notez que vos résultats seront différents étant donné la nature aléatoire de l’échantillon de données. Essayez d’exécuter l’exemple plusieurs fois.

Diagramme d’histogramme avec 10 groupes d’un échantillon de données aléatoires

L’exécution de l’exemple avec bins mis à 3 rend la distribution normale moins évidente.

Diagramme d’histogramme avec 3 bacs d’un échantillon de données aléatoires

L’examen d’un histogramme d’un échantillon de données avec une plage de nombres différents de bacs aidera à déterminer si la densité semble comme une distribution de probabilité commune ou non.

Dans la plupart des cas, vous verrez une distribution unimodale, comme la forme en cloche familière de la normale, la forme plate de l’uniforme ou la forme descendante ou ascendante de une distribution exponentielle ou de Pareto.

Vous pouvez également voir des distributions complexes, telles que des pics multiples qui ne disparaissent pas avec différents nombres de segments, appelés distribution bimodale, ou plusieurs pics, appelés distribution multimodale. Vous pouvez également voir un grand pic de densité pour une valeur donnée ou une petite plage de valeurs indiquant des valeurs aberrantes, se produisant souvent à la queue d’une distribution loin du reste de la densité.

Estimation de la densité paramétrique

La forme d’un histogramme de la plupart des échantillons aléatoires correspondra à une distribution de probabilité bien connue.

Les distributions courantes sont courantes car elles se produisent encore et encore dans des domaines différents et parfois inattendus.

Familiarisez-vous avec les distributions de probabilité communes car elles vous aideront à identifier une distribution donnée à partir de un histogramme.

Une fois identifié, vous pouvez tenter d’estimer la densité de la variable aléatoire avec une distribution de probabilité choisie. Ceci peut être réalisé en estimant les paramètres de la distribution à partir d’un échantillon aléatoire de données.

Par exemple, la distribution normale a deux paramètres: la moyenne et l’écart type. Compte tenu de ces deux paramètres, nous connaissons maintenant la fonction de distribution de probabilité. Ces paramètres peuvent être estimés à partir des données en calculant la moyenne de l’échantillon et l’écart-type de l’échantillon.

Nous appelons ce processus une estimation de densité paramétrique.

La raison en est que nous utilisons des fonctions prédéfinies pour résumer la relation entre les observations et leur probabilité qui peut être contrôlée ou configurée avec des paramètres, donc « paramétrique ».

Une fois que nous avons estimé la densité, nous pouvons vérifier si elle est bien ajustée. Cela peut être fait de plusieurs manières, telles que:

  • Tracer la fonction de densité et comparer la forme à l’histogramme.
  • Échantillonner la fonction de densité et comparer l’échantillon généré à l’échantillon réel.
  • Utilisation d’un test statistique pour confirmer que les données correspondent à la distribution.

Nous pouvons le démontrer avec un exemple.

Nous peut générer un échantillon aléatoire de 1 000 observations à partir d’une distribution normale avec une moyenne de 50 et un écart type de 5.

1
2
3

# générer un échantillon
sample = normal (loc = 50, scale = 5, size = 1000)

On peut alors faire semblant de ne pas connaître la distribution de probabilité et peut-être regarder un histogramme et deviner que c’est normal. En supposant que ce soit normal, nous pouvons alors calculer les paramètres de la distribution, en particulier la moyenne et l’écart type.

Nous ne nous attendrions pas à ce que la moyenne et l’écart type soient exactement de 50 et 5 étant donné la petite taille de l’échantillon et le bruit dans le processus d’échantillonnage.

Ensuite, ajustez la distribution avec ces paramètres, ce que l’on appelle l’estimation de la densité paramétrique de notre échantillon de données.

Dans ce cas, nous pouvons utiliser la norme ( ) Fonction SciPy.

1
2
3

# définir la distribution
dist = norm (sample_mean, sam ple_std)

Nous pouvons ensuite échantillonner les probabilités de cette distribution pour une plage de valeurs dans notre domaine, dans ce cas entre 30 et 70.

Enfin, nous pouvons tracer un histogramme de l’échantillon de données et superposer un graphique linéaire des probabilités calculées pour la plage de valeurs de le PDF.

Surtout, nous pouvons convertir les nombres ou les fréquences dans chaque case de l’histogramme en une probabilité normalisée pour garantir que l’axe y de l’histogramme correspond à l’axe y du graphique linéaire. Ceci peut être réalisé en définissant l’argument « densité » sur « True » dans l’appel à hist ().

1
2
3
4

# trace l’histogramme et le pdf
pyplot.hist (échantillon, bins = 10, densité = True)
pyplot.plot (valeurs, probabilités)

En associant ces extraits ensemble, l’exemple complet d’estimation de densité paramétrique est listé ci-dessous.

L’exécution de l’exemple génère d’abord l’échantillon de données , puis estime les paramètres de la probabilité normale Distribution.

Notez que vos résultats seront différents compte tenu de la nature aléatoire de l’échantillon de données. Essayez d’exécuter l’exemple à quelques reprises.

Dans ce cas, nous pouvons voir que la moyenne et l’écart type ont du bruit et sont légèrement différents des valeurs attendues de 50 et 5 respectivement. Le bruit est mineur et la distribution devrait toujours être adaptée.

1

Mean = 49,852 , Écart type = 5,023

Ensuite, le PDF est en forme en utilisant les paramètres estimés et l’histogramme des données avec 10 cases est comparé à des probabilités pour une plage de valeurs échantillonnées à partir du PDF.

Nous pouvons voir que le PDF correspond bien à nos données.

Exemple d’histogramme de données avec superposition de fonction de densité de probabilité pour la distribution normale

Il est possible que les données correspondent à une distribution de probabilité commune, mais nécessitent une transformation avant l’estimation de densité paramétrique.

Par exemple, vous pouvez avoir des valeurs aberrantes qui sont loin d’être la moyenne ou le centre de masse de la distribution. Cela peut avoir pour effet de donner des estimations incorrectes des paramètres de distribution et, à son tour, d’entraîner un mauvais ajustement des données. Ces valeurs aberrantes doivent être supprimées avant d’estimer les paramètres de distribution.

Un autre exemple est que les données peuvent avoir un biais ou être décalées vers la gauche ou la droite. Dans ce cas, vous devrez peut-être transformer les données avant d’estimer les paramètres, comme prendre le log ou la racine carrée, ou plus généralement, utiliser une transformation de puissance comme la transformée Box-Cox.

Ces types des modifications des données peuvent ne pas être évidentes et une estimation paramétrique efficace de la densité peut nécessiter un processus itératif de:

  • Boucle jusqu’à ce que l’ajustement de la distribution aux données soit suffisamment bon:
    • 1. Estimation des paramètres de distribution
    • 2. Examen du PDF résultant par rapport aux données
    • 3. Transformer les données pour mieux s’adapter à la distribution

Estimation de la densité non paramétrique

Dans certains cas, un échantillon de données peut ne pas ressembler à une probabilité commune distribution ou ne peut pas être facilement adaptée à la distribution.

C’est souvent le cas lorsque les données ont deux pics (distribution bimodale) ou plusieurs pics (distribution multimodale).

Dans ce Dans ce cas, l’estimation paramétrique de la densité n’est pas faisable et des méthodes alternatives peuvent être utilisées qui n’utilisent pas une distribution commune. Au lieu de cela, un algorithme est utilisé pour approximer la distribution de probabilité des données sans distribution prédéfinie, appelée méthode non paramétrique.

Les distributions auront toujours des paramètres mais ne sont pas directement contrôlables de la même manière sous forme de distributions de probabilité simples. Par exemple, une méthode non paramétrique peut estimer la densité en utilisant toutes les observations dans un échantillon aléatoire, en effectuant en fait toutes les observations dans les « paramètres » de l’échantillon.

Peut-être l’approche non paramétrique la plus courante pour estimer la fonction de densité de probabilité de une variable aléatoire continue est appelée lissage du noyau, ou estimation de la densité du noyau, KDE en abrégé.

  • Estimation de la densité du noyau: méthode non paramétrique pour utiliser un ensemble de données pour estimer les probabilités de nouveaux points.

Dans ce cas, un noyau est une fonction mathématique qui renvoie une probabilité pour une valeur donnée d’une variable aléatoire. Le noyau lisse ou interpole efficacement les probabilités sur toute la plage de résultats pour une variable aléatoire telle que la somme des probabilités égale un, une exigence de probabilités bien comportées.

La fonction noyau pondère la contribution des observations d’un échantillon de données en fonction de leur relation ou de leur distance à un échantillon de requête donné pour lequel t La probabilité est demandée.

Un paramètre, appelé paramètre de lissage ou bande passante, contrôle la portée, ou fenêtre d’observations, à partir de l’échantillon de données qui contribue à estimer la probabilité pour un échantillon donné. En tant que telle, l’estimation de la densité du noyau est parfois appelée fenêtre Parzen-Rosenblatt, ou simplement fenêtre Parzen, d’après les développeurs de la méthode.

  • Paramètre de lissage (bande passante): paramètre qui contrôle le nombre d’échantillons ou fenêtre d’échantillons utilisée pour estimer la probabilité d’un nouveau point.

Une grande fenêtre peut donner une densité grossière avec peu de détails, alors qu’une petite fenêtre peut avoir trop de détails et ne pas être suffisamment lisse ou générale pour couvrir correctement des exemples nouveaux ou invisibles.La contribution des échantillons dans la fenêtre peut être façonnée à l’aide de différentes fonctions, parfois appelées fonctions de base, par ex. normale uniforme, etc., avec des effets différents sur la régularité de la fonction de densité résultante.

  • Fonction de base (noyau): La fonction choisie permet de contrôler la contribution des échantillons de l’ensemble de données à l’estimation de la probabilité d’un nouveau point.

En tant que tel, il peut être utile d’expérimenter différentes tailles de fenêtre et différentes fonctions de contribution et d’évaluer les résultats par rapport aux histogrammes des données.

Nous pouvons le démontrer avec un exemple.

Premièrement, nous pouvons construire une distribution bimodale en combinant des échantillons de deux distributions normales différentes. Plus précisément, 300 exemples avec une moyenne de 20 et un écart type de 5 (le plus petit pic), et 700 exemples avec une moyenne de 40 et un écart type de 5 (le plus grand pic). Les moyennes ont été choisies de manière rapprochée pour s’assurer que les distributions se chevauchent dans l’échantillon combiné.

L’exemple complet de création de cet échantillon avec une distribution de probabilité bimodale et de tracé de l’histogramme est présenté ci-dessous.

L’exécution de l’exemple crée l’échantillon de données et trace l’histogramme.

Notez que vos résultats seront différents étant donné la nature aléatoire de l’échantillon de données. Essayez d’exécuter l’exemple plusieurs fois.

Nous avons moins d’échantillons avec une moyenne de 20 que d’échantillons avec une moyenne de 40, ce que nous pouvons voir reflété dans l’histogramme avec une plus grande densité d’échantillons autour de 40 qu’environ 20.

Les données avec cette distribution ne rentrent pas très bien dans une distribution de probabilité commune, par conception. C’est un bon cas pour utiliser une méthode d’estimation non paramétrique de la densité du noyau.

Histogramme de l’échantillon de données Avec une distribution de probabilité bimodale

La bibliothèque d’apprentissage automatique scikit-learn fournit la classe KernelDensity qui implémente l’estimation de la densité du noyau.

Tout d’abord, la classe est construite avec la bande passante souhaitée (taille de la fenêtre) et les arguments du noyau (fonction de base). C’est une bonne idée de tester différentes configurations sur vos données. Dans ce cas, nous allons essayer une bande passante de 2 et un noyau gaussien.

La classe est alors ajustée sur un échantillon de données via la fonction fit (). La fonction s’attend à ce que les données aient une forme 2D avec le formulaire, donc nous pouvons remodeler notre échantillon de données pour avoir 1000 lignes et 1 colonne.

1
2
3
4
5

# fit densité
model = KernelDensity (bandwidth = 2, kernel = « gaussian »)
sample = sample.reshape ((len (sample), 1))
model.fit (échantillon)

Nous pouvons ensuite évaluer dans quelle mesure l’estimation de la densité correspond à nos données en calculant les probabilités pour une plage d’obs et comparer la forme à l’histogramme, comme nous l’avons fait pour le cas paramétrique dans la section précédente.

La fonction score_samples () sur KernelDensity calculera la probabilité logarithmique pour un tableau d’échantillons. Nous pouvons créer une plage d’échantillons de 1 à 60, sur la plage de notre domaine, calculer les probabilités log, puis inverser l’opération log en calculant l’exposant ou exp () pour renvoyer les valeurs dans la plage 0-1 pour les probabilités normales .

Enfin, nous pouvons créer un histogramme avec des fréquences normalisées et un graphique en lignes de superposition des valeurs aux probabilités estimées.

1
2
3
4
5

# trace l’histogramme et le pdf
pyplot.hist (échantillon, bins = 50, densité = True)
pyplot.plot (valeurs, probabilités)
pyplot.show ()

En associant cela, l’exemple complet d’estimation de la densité du noyau pour un échantillon de données bimodales est listé ci-dessous.

L’exécution de l’exemple crée la distribution des données, ajuste le modèle d’estimation de la densité du noyau, puis trace l’histogramme de l’échantillon de données et le PDF du modèle KDE.

Notez que vos résultats seront différents compte tenu de la nature aléatoire de l’échantillon de données. Essayez d’exécuter l’exemple à plusieurs reprises.

Dans ce cas, nous pouvons voir que le PDF convient bien à l’histogramme. Ce n’est pas très fluide et pourrait être amélioré en définissant l’argument « bandwidth » sur 3 échantillons ou plus. Expérimentez avec différentes valeurs de bande passante et de fonction du noyau.

Histogramme et diagramme de fonction de densité de probabilité estimés via l’estimation de densité de noyau pour un échantillon de données bimodales

La classe KernelDensity est puissante et prend en charge l’estimation du PDF pour les données multidimensionnelles.

Lectures complémentaires

Cette section fournit plus de ressources sur le sujet si vous souhaitez approfondir.

Livres

  • Reconnaissance de formes et apprentissage automatique, 2006.
  • Apprentissage automatique: une perspective probabiliste, 2012.
  • Les éléments de l’apprentissage statistique: exploration de données, inférence , et Prediction, 2009.

API

  • scipy.stats.gaussian_kde API.
  • Méthodes non paramétriques non paramétriques, API Statsmodels.
  • Kernel Density Estimation Statsmodels Exa mple.
  • Estimation de la densité, API Scikit-Learn.

Articles

  • Estimation de la densité, Wikipédia.
  • Histogramme, Wikipedia.
  • Estimation de la densité du noyau, Wikipedia.
  • Estimation de la densité du noyau multivariée, Wikipédia.
  • Estimation de la densité du noyau via la méthode de la fenêtre Parzen-Rosenblatt, 2014.
  • En profondeur: Estimation de la densité du noyau.

Résumé

Dans ce didacticiel, vous avez découvert une introduction douce à l’estimation de la densité de probabilité.

Plus précisément, vous avez appris:

  • Les graphiques histogrammes fournissent un moyen rapide et fiable de visualiser la densité de probabilité d’un échantillon de données.
  • Densité de probabilité paramétrique l’estimation implique la sélection d’une distribution commune et l’estimation des paramètres de la fonction de densité à partir d’un échantillon de données.
  • L’estimation de densité de probabilité non paramétrique implique l’utilisation d’une technique pour ajuster un modèle à la distribution arbitraire des données, comme l’estimation de la densité par noyau sur.

Avez-vous des questions?
Posez vos questions dans les commentaires ci-dessous et je ferai de mon mieux pour y répondre.

Obtenez une idée de la probabilité pour l’apprentissage automatique!

Développez votre compréhension des probabilités

… avec juste quelques lignes de code python

Découvrez comment dans mon nouvel ebook:
Probability for Machine Learning

Il fournit une auto-apprentissage tutoriels et projets de bout en bout sur:
Théorème de Bayes, Optimisation Bayésienne, Distributions, Maximum de Vraisemblance, Entropie croisée, Calibrage de Modèles
et bien plus encore …

Enfin, Exploitez l’incertitude dans Vos projets

Passer les universitaires. Juste des résultats. Voir ce qu’il y a à l’intérieur

Tweet Partager Partager

Leave a Reply

Laisser un commentaire

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