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
上記の例では、x
は pdf
が検出される値の配列を表します。行は、pdf
が検出される x
の各値を表し、列は、各値を表すために使用されるコンポーネントの数を表します。
ここで、x
の各値は 2つのコンポーネントで構成されているため、長さ 2
のベクトルになります。平均
は、コンポーネントの数に等しい長さのベクトルになります。同様に、d
がデータセット内のコンポーネントの数である場合、cov
はサイズ d*d
の対称正方行列になります。
scipy.stats.multivariate_normal.pdf
メソッドは、入力 x
、mean
および共分散行列 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
上記の例では、x
は cdf
が見つかるポイントの配列を表します。行は、cdf
が検出される x
の各値を表し、列は、各値を表すために使用されるコンポーネントの数を表します。
ここで、x
の各値は 2つのコンポーネントで構成されているため、長さ 2
のベクトルになります。平均
は、コンポーネントの数に等しい長さのベクトルになります。同様に、d
がデータセット内のコンポーネントの数である場合、cov
はサイズ d*d
の対称正方行列になります。
scipy.stats.multivariate_normal.cdf
メソッドは、入力 x
、mean
および共分散行列 cov
を取り、x
の行数に等しい長さのベクトルを出力します。ここで、出力の各値はベクトルは、x
の各行の cdf
値を表します。
Suraj Joshi is a backend software engineer at Matrice.ai.
LinkedIn