SciPy scipy.stats.multivariate_normal

Suraj Joshi 2022年1月30日
SciPy scipy.stats.multivariate_normal

Python Scipy scipy.stats.multivariate_normal オブジェクトは、多変量正規分布を分析し、利用可能なさまざまな方法を使用して、分布に関連するさまざまなパラメーターを計算するために使用されます。

scipy.stats.multivariate_normal オブジェクトを使用して確率密度関数を生成する構文

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

パラメーター:

x pdf が決定される値。この変数の 2 番目の次元は、データセットのコンポーネントを表します。
mean 分布の平均を表す配列のような要素。配列の各値は、データセット内の各コンポーネントの値を表します。デフォルト値は 0 です。
cov データの共分散行列。デフォルト値は 1 です。
allow_singular True に設定すると、単数の cov を許可できます。デフォルト値は False です

戻り値:

x の各要素の確率値を含む配列のような構造。

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

出力:

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

上記の例では、xpdf が検出される値の配列を表します。行は、pdf が検出される x の各値を表し、列は、各値を表すために使用されるコンポーネントの数を表します。

ここで、x の各値は 2つのコンポーネントで構成されているため、長さ 2 のベクトルになります。平均は、コンポーネントの数に等しい長さのベクトルになります。同様に、d がデータセット内のコンポーネントの数である場合、cov はサイズ d*d の対称正方行列になります。

scipy.stats.multivariate_normal.pdf メソッドは、入力 xmean および共分散行列 cov を取り、x の行数に等しい長さのベクトルを出力します。ここで、出力の各値はベクトルは、x の各行の pdf 値を表します。

例: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()

出力:

多変量正規分布から抽出されたランダムサンプルの散布図

上記のプロットは、2つの特徴を持つ多変量正規分布からランダムに抽出された 20 ランダムサンプルの散布図を表しています。分布の平均値は [0.4,0.8] です。ここで、0.4 は最初の特徴の平均値を表し、0.8 は 2 番目の特徴の平均を表します。最後に、X 軸に沿った最初の特徴と Y 軸に沿った 2 番目の特徴を使用して、ランダムサンプルの散布図を描画します。

プロットから、ほとんどのサンプルポイントが [0.4,0.8] を中心としていることが明らかであり、多変量分布の平均を表しています。

例:scipy.stats.multivariate_normal.cdf メソッドを使用して累積分布関数を取得する

累積分布関数(CDF)pdf の積分です。CDF は、母集団から取得された値が、ある値以下の確率値を持つことを示しています。scipy.stats.multivariate_normal.cdf メソッドを使用して、多変量分布のポイントの 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")

出力:

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

上記の例では、xcdf が見つかるポイントの配列を表します。行は、cdf が検出される x の各値を表し、列は、各値を表すために使用されるコンポーネントの数を表します。

ここで、x の各値は 2つのコンポーネントで構成されているため、長さ 2 のベクトルになります。平均は、コンポーネントの数に等しい長さのベクトルになります。同様に、d がデータセット内のコンポーネントの数である場合、cov はサイズ d*d の対称正方行列になります。

scipy.stats.multivariate_normal.cdf メソッドは、入力 xmean および共分散行列 cov を取り、x の行数に等しい長さのベクトルを出力します。ここで、出力の各値はベクトルは、x の各行の cdf 値を表します。

著者: Suraj Joshi
Suraj Joshi avatar Suraj Joshi avatar

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

LinkedIn