SciPy scipy.stats.multivariate_normal

Suraj Joshi 30 janvier 2022
SciPy scipy.stats.multivariate_normal

L’objet Python Scipy scipy.stats.multivariate_normal est utilisé pour analyser la distribution normale multivariée et calculer différents paramètres liés à la distribution à l’aide des différentes méthodes disponibles.

Syntaxe pour générer la fonction de densité de probabilité à l’aide de l’objet scipy.stats.multivariate_normal

scipy.stats.multivariate_normal.pdf(x, mean=None, cov=1, allow_singular=False)

Paramètres:

x Valeurs dont pdf est à déterminer. La deuxième dimension de cette variable représente les composants de l’ensemble de données.
mean Élément de type tableau qui représente la moyenne de la distribution. Chaque valeur du tableau représente la valeur de chaque composant du jeu de données. La valeur par défaut est 0.
cov Matrice de covariance des données. La valeur par défaut est 1.
allow_singular S’il est défini sur True, le singulier cov peut être autorisé. La valeur par défaut est False

Retourner:

Une structure de type tableau qui contient la valeur de probabilité pour chaque élément de x.

Exemple : Générer une fonction de densité de probabilité à l’aide de la méthode scipy.stats.multivariate_normal.pdf

import numpy as np
from scipy.stats import multivariate_normal

mean = np.array([0.4, 0.8])
cov = np.array([[0.1, 0.3], [0.3, 1.0]])
x = np.random.uniform(size=(5, 2))
y = multivariate_normal.pdf(x, mean=mean, cov=cov)

print("Tha data and corresponding pdfs are:")
print("Data-------PDF value")
for i in range(len(x)):
    print(x[i], end=" ")
    print("------->", end=" ")
    print(y[i], end="\n")

Production :

Tha data and corresponding pdfs are:
Data-------PDF value
[0.60156002 0.53917659] -------> 0.030687330659191728
[0.60307471 0.25205368] -------> 0.0016016741361277501
[0.27254519 0.06817383] -------> 0.7968146411119688
[0.33630808 0.21039553] -------> 0.7048988855032084
[0.0009666  0.52414497] -------> 0.010307396714783708

Dans l’exemple ci-dessus, x représente le tableau de valeurs dont pdf est à trouver. Les lignes représentent chaque valeur de x dont le pdf est à trouver, et les colonnes représentent le nombre de composantes utilisées pour représenter chaque valeur.

Ici, chaque valeur de x est constituée de deux composantes, et donc c’est un vecteur de longueur 2. La moyenne sera un vecteur de longueur égale au nombre de composantes. De même, si d est le nombre de composants dans le jeu de données, cov sera une matrice carrée symétrique de taille d*d.

La méthode scipy.stats.multivariate_normal.pdf prend l’entrée x, moyenne et la matrice de covariance cov et génère un vecteur d’une longueur égale au nombre de lignes dans x où chaque valeur dans la sortie le vecteur représente la valeur pdf pour chaque ligne dans x.

Exemple : Tirer des échantillons aléatoires d’une distribution normale multivariée à l’aide de la méthode scipy.stats.multivariate_normal.rvs

import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import multivariate_normal

mean = np.array([0.4, 0.8])
cov = np.array([[0.1, 0.3], [0.3, 1.0]])
x = multivariate_normal.rvs(mean, cov, 100)
plt.scatter(x[:, 0], x[:, 1])
plt.show()

Production :

Nuage de points d’échantillons aléatoires tirés d’une distribution normale multivariée

Le graphique ci-dessus représente le nuage de points de 20 échantillons aléatoires tirés au hasard d’une distribution normale multivariée à deux caractéristiques. La distribution a une valeur mean de [0.4,0.8]0.4 représente la valeur moyenne de la première caractéristique et 0.8 la moyenne de la deuxième caractéristique. Enfin, nous dessinons le diagramme de dispersion des échantillons aléatoires avec la première caractéristique le long de l’axe des X et la deuxième caractéristique le long de l’axe des Y.

D’après le graphique, il est clair que la plupart des points d’échantillonnage sont centrés autour de [0.4,0.8], représentant la moyenne de la distribution multivariée.

Exemple : obtenir une fonction de distribution cumulative à l’aide de la méthode scipy.stats.multivariate_normal.cdf

Fonction de distribution cumulative (CDF) est l’intégrale de pdf. CDF nous montre que toute valeur tirée de la population aura une valeur de probabilité inférieure ou égale à une certaine valeur. Nous pouvons calculer cdf des points de distribution multivariée en utilisant la méthode scipy.stats.multivariate_normal.cdf.

import numpy as np
from scipy.stats import multivariate_normal

mean = np.array([0.4, 0.8])
cov = np.array([[0.1, 0.3], [0.3, 1.0]])
x = np.random.uniform(size=(5, 2))
y = multivariate_normal.cdf(x, mean=mean, cov=cov)

print("Tha data and corresponding cdfs are:")
print("Data-------CDF value")
for i in range(len(x)):
    print(x[i], end=" ")
    print("------->", end=" ")
    print(y[i], end="\n")

Production :

Tha data and corresponding cdfs are:
Data-------CDF value
[0.89027577 0.06036432] -------> 0.22976054289355996
[0.78164237 0.09611703] -------> 0.24075282906929418
[0.53051197 0.63041372] -------> 0.4309184323329717
[0.15571201 0.97173575] -------> 0.21985053519541042
[0.72988545 0.22477096] -------> 0.28256819625802715

Dans l’exemple ci-dessus, x représente le tableau de points où se trouve cdf. Les lignes représentent chaque valeur de x à laquelle cdf doit être trouvée, et les colonnes représentent le nombre de composants utilisés pour représenter chaque valeur.

Ici, chaque valeur de x est constituée de deux composantes, et donc c’est un vecteur de longueur 2. La moyenne sera un vecteur de longueur égale au nombre de composantes. De même, si d est le nombre de composants dans le jeu de données, cov sera une matrice carrée symétrique de taille d*d.

La méthode scipy.stats.multivariate_normal.cdf prend l’entrée x, mean et la matrice de covariance cov et génère un vecteur d’une longueur égale au nombre de lignes dans x où chaque valeur dans la sortie le vecteur représente la valeur cdf pour chaque ligne dans x.

Auteur: Suraj Joshi
Suraj Joshi avatar Suraj Joshi avatar

Suraj Joshi is a backend software engineer at Matrice.ai.

LinkedIn