Comment utiliser une fonction de distribution empirique en Python
Une fonction de distribution empirique permet de modéliser et d'échantillonner les probabilités cumulées pour un échantillon de données qui ne correspond pas à une distribution de probabilité standard.
En tant que telle, elle est parfois appelée fonction de distribution cumulative empirique, ou ECDF en abrégé.
Dans ce tutoriel, vous découvrirez la fonction de distribution de probabilité empirique.
Après avoir terminé ce tutoriel, vous saurez :
- Certains échantillons de données ne peuvent pas être résumés à l'aide d'une distribution standard.
- Une fonction de distribution empirique permet de modéliser les probabilités cumulées pour un échantillon de données.
- Comment utiliser la bibliothèque statsmodels pour modéliser et échantillonner une fonction de distribution cumulative empirique.
Démarrez votre projet avec mon nouveau livre Probability for Machine Learning, comprenant des tutoriels pas à pas et les fichiers code source Python pour tous. exemples.
Commençons.
Présentation du didacticiel
Ce didacticiel est divisé en trois parties : ils sont:
- Fonction de distribution empirique
- Distribution de données bimodale
- Échantillonnage de la distribution empirique
Fonction de distribution empirique
En règle générale, la distribution des observations pour un échantillon de données correspond à une distribution de probabilité bien connue.
Par exemple, la taille des humains correspondra à la distribution de probabilité normale (gaussienne).
Ce n'est pas toujours le cas. Parfois, les observations dans un échantillon de données collectées ne correspondent à aucune distribution de probabilité connue et ne peuvent pas être facilement forcées dans une distribution existante par des transformations de données ou le paramétrage de la fonction de distribution.
Il faut plutôt utiliser une distribution de probabilité empirique.
Il existe deux principaux types de fonctions de distribution de probabilité que nous devrons peut-être échantillonner : ils sont:
- Fonction de densité de probabilité (PDF).
- Fonction de distribution cumulative (CDF).
Le PDF renvoie la probabilité attendue d'observer une valeur. Pour les données discrètes, la PDF est appelée fonction de masse de probabilité (PMF). Le CDF renvoie la probabilité attendue d'observer une valeur inférieure ou égale à une valeur donnée.
Une fonction de densité de probabilité empirique peut être ajustée et utilisée pour un échantillonnage de données à l'aide d'une méthode d'estimation de densité non paramétrique, telle que l'estimation de la densité du noyau (KDE).
Une fonction de distribution cumulative empirique est appelée fonction de distribution empirique, ou EDF en abrégé. Elle est également appelée fonction de distribution empirique cumulative, ou ECDF.
L'EDF est calculé en classant toutes les observations uniques dans l'échantillon de données et en calculant la probabilité cumulée pour chacune comme le nombre d'observations inférieur ou égal à une observation donnée divisé par le nombre total d'observations.
Comme suit:
- EDF(x)=nombre d'observations <= x/n
Comme d'autres fonctions de distribution cumulative, la somme des probabilités passera de 0,0 à 1,0 à mesure que les observations dans le domaine sont énumérées de la plus petite à la plus grande.
Pour rendre concrète la fonction de distribution empirique, regardons un exemple avec un ensemble de données qui ne correspond clairement pas à une distribution de probabilité connue.
Distribution de données bimodales
Nous pouvons définir un ensemble de données qui ne correspond clairement pas à une fonction de distribution de probabilité standard.
Un exemple courant est lorsque les données comportent deux pics (distribution bimodale) ou plusieurs pics (distribution multimodale).
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 cinq (le plus petit pic), et 700 exemples avec une moyenne de 40 et un écart type de cinq (le plus grand pic).
Les moyennes ont été choisies à proximité pour garantir 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 répertorié ci-dessous.
# example of a bimodal data sample
from matplotlib import pyplot
from numpy.random import normal
from numpy import hstack
# generate a sample
sample1 = normal(loc=20, scale=5, size=300)
sample2 = normal(loc=40, scale=5, size=700)
sample = hstack((sample1, sample2))
# plot the histogram
pyplot.hist(sample, bins=50)
pyplot.show()
L’exécution de l’exemple crée l’échantillon de données et trace l’histogramme.
Remarque : Vos résultats peuvent varier en raison de la nature stochastique de l'algorithme ou de la procédure d'évaluation, ou des différences de précision numérique. Pensez à exécuter l’exemple plusieurs fois et comparez le résultat moyen.
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'autour de 20.
Les données avec cette distribution ne s'intègrent pas parfaitement dans une distribution de probabilité commune, de par leur conception.
Vous trouverez ci-dessous un tracé de la fonction de densité de probabilité (PDF) de cet échantillon de données.
C’est un bon exemple d’utilisation d’une fonction de distribution empirique.
Calculer la fonction de distribution empirique
Une fonction de distribution empirique peut être adaptée à un échantillon de données en Python.
La bibliothèque Python statmodels fournit la classe ECDF pour ajuster une fonction de distribution cumulative empirique et calculer les probabilités cumulées pour des observations spécifiques du domaine.
La distribution est ajustée en appelant ECDF() et en transmettant l'échantillon de données brutes.
...
# fit a cdf
ecdf = ECDF(sample)
Une fois ajustée, la fonction peut être appelée pour calculer la probabilité cumulée pour une observation donnée.
...
# get cumulative probability for values
print('P(x<20): %.3f' % ecdf(20))
print('P(x<40): %.3f' % ecdf(40))
print('P(x<60): %.3f' % ecdf(60))
La classe fournit également une liste ordonnée d'observations uniques dans les données (l'attribut .x) et leurs probabilités associées (attribut .y). Nous pouvons accéder à ces attributs et tracer directement la fonction CDF.
...
# plot the cdf
pyplot.plot(ecdf.x, ecdf.y)
pyplot.show()
En reliant cela ensemble, l'exemple complet d'ajustement d'une fonction de distribution empirique pour l'échantillon de données bimodal est ci-dessous.
# fit an empirical cdf to a bimodal dataset
from matplotlib import pyplot
from numpy.random import normal
from numpy import hstack
from statsmodels.distributions.empirical_distribution import ECDF
# generate a sample
sample1 = normal(loc=20, scale=5, size=300)
sample2 = normal(loc=40, scale=5, size=700)
sample = hstack((sample1, sample2))
# fit a cdf
ecdf = ECDF(sample)
# get cumulative probability for values
print('P(x<20): %.3f' % ecdf(20))
print('P(x<40): %.3f' % ecdf(40))
print('P(x<60): %.3f' % ecdf(60))
# plot the cdf
pyplot.plot(ecdf.x, ecdf.y)
pyplot.show()
Remarque : Vos résultats peuvent varier en raison de la nature stochastique de l'algorithme ou de la procédure d'évaluation, ou des différences de précision numérique. Pensez à exécuter l’exemple plusieurs fois et comparez le résultat moyen.
L'exécution de l'exemple ajuste le CDF empirique à l'échantillon de données, puis imprime la probabilité cumulée d'observer trois valeurs.
P(x<20): 0.149
P(x<40): 0.654
P(x<60): 1.000
Ensuite, la probabilité cumulée pour l’ensemble du domaine est calculée et affichée sous forme de tracé linéaire.
Ici, nous pouvons voir la courbe familière en forme de S observée pour la plupart des fonctions de distribution cumulative, ici avec des bosses autour de la moyenne des deux pics de la distribution bimodale.
Lectures complémentaires
Cette section fournit plus de ressources sur le sujet si vous souhaitez approfondir.
Livres
- Section 2.3.4 La distribution empirique, Machine Learning: A Probabilistic Perspective, 2012.
- Section 3.9.5 La distribution de Dirac et la distribution empirique, Deep Learning, 2016.
API
- API statsmodels.distributions.empirical_distribution.ECDF
Articles
- Fonction de distribution empirique, Wikipédia.
- Fonction de distribution cumulative, Wikipédia.
- Fonction de densité de probabilité, Wikipédia.
- Estimation de la densité du noyau, Wikipédia.
Résumé
Dans ce didacticiel, vous avez découvert la fonction de distribution de probabilité empirique.
Concrètement, vous avez appris :
- Certains échantillons de données ne peuvent pas être résumés à l'aide d'une distribution standard.
- Une fonction de distribution empirique permet de modéliser les probabilités cumulées pour un échantillon de données.
- Comment utiliser la bibliothèque statsmodels pour modéliser et échantillonner une fonction de distribution cumulative empirique.
Avez-vous des questions ?
Posez vos questions dans les commentaires ci-dessous et je ferai de mon mieux pour y répondre.