np.random.multivariate_normal()

周小董發表於2019-01-30

np.random.multivariate_normal方法用於根據實際情況生成一個多元正態分佈矩陣(正態分佈基本概念),其在Python3中的定義如下:


---------------------------正態分佈基本概念-------------------------------
正態分佈,又稱高斯分佈。其特徵為中間高兩邊低左右對稱。它有以下幾個性質:

  • 集中性:曲線的最高峰位於正中央,且位置為均數所在的位置。
  • 對稱性:正態分佈曲線以均數所在的位置為中心左右對稱且曲線兩段無線趨近於橫軸。
  • 均勻變動性:正態分佈曲線以均數所在的位置為中心均勻向左右兩側下降。
  • 面積恆等:曲線與橫軸間的面積總等於1。

正態分佈函式公式如下:
image.png

其中μ為均數,σ為標準差。μ決定了正態分佈的位置,與μ越近,被取到的概率就越大,反之越小。σ描述的是正態分佈的離散程度。σ越大,資料分佈越分散曲線越扁平;σ越小,資料分佈越集中曲線越陡峭。


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

其中mean和cov為必要的傳參而size,check_valid以及tol為可選引數。

  • mean:mean是多維分佈的均值維度為1;
  • cov:協方差矩陣(協方差基本概念),注意:協方差矩陣必須是對稱的且需為半正定矩陣;

------------------------協方差基本概念-----------------------------------
協方差用於表示變數間的相互關係,變數間的相互關係一般有三種:正相關,負相關和不相關。

  • 正相關:假設有兩個變數x和y,若x越大y越大;x越小y越小則x和y為正相關。
  • 負相關:假設有兩個變數x和y,若x越大y越小;x越小y越大則x和y為負相關。
  • 不相關:假設有兩個變數x和y,若x和y變化無關聯則x和y為負相關。

協方差的公式如下(2個變數的情況下):
image.png
當維度多的時候可以用協方差矩陣來表示,公式如下:
image.png

注意:協方差矩陣為對稱矩陣並且對角線上的元素為各維度的方差。

-------------------------------end--------------------------------

  • size:指定生成的正態分佈矩陣的維度(例:若size=(1, 1, 2),則輸出的矩陣的shape即形狀為 1X1X2XN(N為mean的長度))。
  • check_valid:這個引數用於決定當cov即協方差矩陣不是半正定矩陣時程式的處理方式,它一共有三個值:warn,raise以及ignore。當使用warn作為傳入的引數時,如果cov不是半正定的程式會輸出警告但仍舊會得到結果;當使用raise作為傳入的引數時,如果cov不是半正定的程式會報錯且不會計算出結果;當使用ignore時忽略這個問題即無論cov是否為半正定的都會計算出結果。

3種情況的console列印結果如下:

=使用warn時=====
image.png
=使用raise時=====
image.png
=使用ignore時=====
image.png

  • tol:檢查協方差矩陣奇異值時的公差,float型別。

最後放一個示例這裡生成一個形狀為2X2X2的正態分佈矩陣,程式碼及結果如下:

import numpy as np;
mean = (1, 2)
cov = [[1, 0], [0, 1]]
x = np.random.multivariate_normal(mean, cov, (2, 2), 'raise')
print(x)

結果如下:
image.png

來源:https://blog.csdn.net/zch1990s/article/details/80005940