SciPy scipy.stats.multivariate_normal

Suraj Joshi 30 Januar 2022
SciPy scipy.stats.multivariate_normal

Das Python-Scipy-Objekt scipy.stats.multivariate_normal wird verwendet, um die multivariate Normalverteilung zu analysieren und verschiedene Parameter in Bezug auf die Verteilung mit den verschiedenen verfügbaren Methoden zu berechnen.

Syntax zur Berechnung der Wahrscheinlichkeitsdichtefunktion mit dem Objekt scipy.stats.multivariate_normal

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

Parameter:

x Werte, deren pdf ermittelt werden soll. Die zweite Dimension dieser Variablen repräsentiert die Komponenten des Datensatzes.
mean Array-ähnliches Element, das den Mittelwert der Verteilung darstellt. Jeder Wert des Arrays repräsentiert den Wert für jede Komponente im Datensatz. Der Standardwert ist 0.
cov Kovarianzmatrix der Daten. Der Standardwert ist 1.
allow_singular Wenn auf True gesetzt, kann Singular cov erlaubt werden. Der Standardwert ist False

Zurückkehren:

Eine Array-ähnliche Struktur, die Wahrscheinlichkeitswerte für jedes Element in x enthält.

Beispiel: Erstellen Sie eine Wahrscheinlichkeitsdichtefunktion mit der Methode 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")

Ausgabe:

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

Im obigen Beispiel stellt x das Array von Werten dar, dessen pdf gefunden werden soll. Die Zeilen stellen jeden Wert von x dar, dessen pdf gefunden werden soll, und die Spalten stellen die Anzahl der Komponenten dar, die verwendet werden, um jeden Wert darzustellen.

Hier besteht jeder Wert von x aus zwei Komponenten und ist somit ein Vektor der Länge 2. Der Mittelwert ist ein Vektor mit einer Länge gleich der Anzahl der Komponenten. Wenn d die Anzahl der Komponenten im Datensatz ist, ist cov eine symmetrische quadratische Matrix der Größe d*d.

Die Methode scipy.stats.multivariate_normal.pdf nimmt die Eingabe x, mean und die Kovarianzmatrix cov und gibt einen Vektor mit einer Länge gleich der Anzahl der Zeilen in x aus, wobei jeder Wert in der Ausgabe ist Der Vektor repräsentiert den pdf-Wert für jede Zeile in x.

Beispiel: Ziehen Sie Zufallsstichproben aus einer multivariaten Normalverteilung mit der Methode 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()

Ausgabe:

Streudiagramm von Zufallsstichproben, die aus der multivariaten Normalverteilung gezogen wurden

Das obige Diagramm stellt das Streudiagramm von 20 Zufallsstichproben dar, die zufällig aus einer multivariaten Normalverteilung mit zwei Merkmalen gezogen wurden. Die Verteilung hat einen Mittelwert von [0.4,0.8], wobei 0.4 den Mittelwert des ersten Merkmals und 0.8 den Mittelwert des zweiten Merkmals darstellt. Wir zeichnen schließlich das Streudiagramm der Stichproben mit dem ersten Merkmal entlang der X-Achse und dem zweiten Merkmal entlang der Y-Achse.

Aus dem Diagramm geht hervor, dass die meisten Stichprobenpunkte um [0.4,0.8] zentriert sind, was den Mittelwert der multivariaten Verteilung darstellt.

Beispiel: Holen Sie sich die kumulative Verteilungsfunktion mit der Methode scipy.stats.multivariate_normal.cdf

Cumulative distribution function (CDF) ist das Integral von pdf. CDF zeigt uns, dass jeder aus der Grundgesamtheit entnommene Wert einen Wahrscheinlichkeitswert kleiner oder gleich einem bestimmten Wert haben wird. Wir können cdf von Punkten der multivariaten Verteilung mit der Methode scipy.stats.multivariate_normal.cdf berechnen.

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")

Ausgabe:

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

Im obigen Beispiel stellt x das Array von Punkten dar, an denen cdf zu finden ist. Die Zeilen stellen jeden Wert von x dar, bei dem cdf zu finden ist, und die Spalten stellen die Anzahl der Komponenten dar, die verwendet werden, um jeden Wert darzustellen.

Hier besteht jeder Wert von x aus zwei Komponenten und ist somit ein Vektor der Länge 2. Der Mittelwert ist ein Vektor mit einer Länge gleich der Anzahl der Komponenten. Wenn d die Anzahl der Komponenten im Datensatz ist, ist cov eine symmetrische quadratische Matrix der Größe d*d.

Die Methode scipy.stats.multivariate_normal.cdf nimmt die Eingabe x, mean und die Kovarianzmatrix cov und gibt einen Vektor mit einer Länge gleich der Anzahl der Zeilen in x aus, wobei jeder Wert in der Ausgabe ist Der Vektor repräsentiert den cdf-Wert für jede Zeile in x.

Suraj Joshi avatar Suraj Joshi avatar

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

LinkedIn