numpy.random.multivariate_normal()函數解析


NumPy(Numerical Python) 是 Python 語言的一個擴展程序庫,支持大量的維度數組與矩陣運算,此外也針對數組運算提供大量的數學函數庫。簡單的來水numpy在處理多維數組時會特別的方便,是深度學習的得力助手。

numpy.random.multivariate_normal()函數官方解釋是從多元正態分布中隨機抽取樣本的函數。多元正態分布、多重正態分布或高斯分布它是一維正態分布向更高維度的推廣。這種分布由其均值和協方差矩陣來表示。這些參數類似於一維正態分布的平均值(平均值或“中心”)和方差(標准差或“寬度”,平方)。啥啥啥?對於數學不好的我完全看不懂說的是什么。其實就是這個函數可以滿足你的需求,生成一個指定維度的數組,而且生成的這個數組服從正態分布。

函數的原型為:numpy.random.multivariate_normal(mean, cov[, size, check_valid, tol]).接下來對參數進行解釋。

mean:均值,n維分布的平均值,是一個一維數組長度為N.在標准正態分布里對應的就是圖形的峰值。

cov:分布的協方差矩陣,它的形狀必須是(n,n),也就是必須是一個行數和列數相等的類似正方形矩陣,它必須是對稱的和正半定的,才能進行適當的采樣。

size:指定生成樣本的大小,是一個int類型或者int類型的元組。可選。例如,給定(m,n,k)的形狀,則會生成m*n*k樣本,並按m-x-n-x-k排列打包。因為每個樣本都是N維的,所以輸出形狀是(m,n,k,N)。如果未指定形狀,則返回單個(N-d)樣本。

在這里需要說明的是mean和cov必須有相同的長度,否則編譯的時候會報錯。比如mean=[0,0],cov=[[1,0,0],[0,1,0],[0,0,1]],這樣是不可以的因為mean的長度為2,而cov的形狀是(3,3),這樣在編譯的時候會產生一個ValueError: mean and cov must have same length錯誤。再結合size中的例子,如果size指定(3,3)的元組,mean=[1,2],cov=[[1,0],[0,100]],那么輸出的形狀就是(3,3,2).

check_valid:可以為{'warn'、'raise'、'ignore'},可選,來指定協方差矩陣非正半定時的行為。

tol:浮點型,可選。檢查協方差矩陣中的奇異值時的公差。

返回值:一個n維數組。如果指出了形狀尺寸也就是前邊的size,則生成的樣本為指定的形狀,如果沒有提供size,則生成的樣本形狀為(n,)

補充知識點Note:

mean:平均值是N維空間中的一個坐標,它表示最有可能生成樣本的位置。這類似於一維或單變量正態分布的鍾形曲線的峰值。

cov:也就是Covariance,協方差表示兩個變量在一起變化的程度。從多元正態分布中,我們得到了n維樣本,x=[x_1,x_2,……xnn]。協方差矩陣元素c_i j_是x_i和x_j的協方差。元素c_ii_是x_i的方差(即其“排列”)。

在指定cov的時候,我們經常需要對角矩陣,這時我們可以使用numpy.eye()來直接生成一個對角矩陣,比如numpy.eye(2)就會生成對角矩陣[[1,0],[0,1]]

有兩種情況可以不指定協方差矩陣:

球面協方差(cov是單位矩陣的倍數)

對角線協方差(COV具有非負元素,並且僅在對角線上)。

注意協方差矩陣必須是半正定的(也就是非負定的)。否則,該方法的行為是未定義的,不能保證向后兼容性。

1 import numpy as np
2 mean = (1, 2)
3 cov = [[1, 0], [0, 1]]
4 x = np.random.multivariate_normal(mean, cov, (3, 3))
5 print(x.shape)

可以看到輸出結果為(3,3,2)。

 


免責聲明!

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



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