multivariate_normal 多元正態分布


多元正態分布

正態分布大家都非常熟悉了,多元正態分布就是多維數據的正態分布,其概率密度函數為

上式為 x 服從 k 元正態分布,x 為 k 維向量;|Σ| 代表協方差矩陣的行列式

 

二維正態分布概率密度函數為鍾形曲面,等高線是橢圓線族,並且二維正態分布的兩個邊緣分布都是一維正態分布,如圖

 

np.random.multivariate_normal

生成一個服從多元正態分布的數組      【適用於 python3,但在 python2 中也能用】

multivariate_normal(mean, cov, size=None, check_valid=None, tol=None) 

mean:均值,維度為1,必選參數;

cov:協方差矩陣,必選參數;

size: 指定生成矩陣的維度,若size=(1, 1, 2),則輸出的矩陣的 shape 即形狀為 1X1X2XN(N為mean的長度);

check_valid:可取值 warn,raise以及ignore;

tol:檢查協方差矩陣奇異值時的公差,float類型;

 

示例

mean = (1, 2)
cov = [[1, 0], [0, 1]]
x = np.random.multivariate_normal(mean, cov, (2, 2), 'raise')   # 2x2x2
print(x)   

直接生成數組

 

scipy.stats.multivariate_normal

生成一個多元正態分布

def __call__(self, mean=None, cov=1, allow_singular=False, seed=None)

 

示例-生成多元正態分布

import numpy as np
import scipy.stats as st
import matplotlib.pylab as plt

x, y = np.mgrid[-1:1:.01, -1:1:.01]
pos = np.empty(x.shape + (2,))
pos[:, :, 0] = x; pos[:, :, 1] = y
rv = st.multivariate_normal([0, 0], [[1, 0], [0, 1]])   # 生成多元正態分布
print(rv)       # <scipy.stats._multivariate.multivariate_normal_frozen object at 0x08EDDDB0> 只是生成了一個對象,並沒有生成數組
plt.contourf(x, y, rv.pdf(pos))
plt.show()

 

示例-概率密度函數

x = np.linspace(0, 5, 10, endpoint=False)       # 樣本
y = st.multivariate_normal.pdf(x, mean=2.5, cov=.5)        # 樣本的概率密度函數

plt.plot(x, y)
plt.show()

生成了概率密度曲線

 

可用方法

pdf(x, mean=None, cov=1) :概率密度函數

logpdf(x, mean=None, cov=1) :概率密度函數日志

rvs(mean=None, cov=1) :從多元正態分布中隨機抽取樣本

entropy() :計算多元法線的微分熵

 

 

參考資料:

https://www.cnblogs.com/21207-iHome/p/8039741.html  多元正態分布

https://blog.csdn.net/zch1990s/article/details/80005940  np.random.multivariate_normal方法淺析

https://www.cnblogs.com/wanghui-garcia/p/10763418.html   scipy.stats.multivariate_normal的使用


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM