高斯分佈和卡方分佈
高斯分佈和卡方分佈
高斯分佈
1 單元高斯分佈
1.1 一維隨機變量
定義:若連續型隨機變量的概率密度爲
其中爲常數,則稱服從參數爲的正太/高斯分佈,記爲.
性質:
下圖爲均值爲的高斯分佈圖,峯值最大值爲
特點:
- 如果固定方差, 改變參數,則正太曲線沿着軸平行移動,而圖形的形狀不改變。
這個問題很容易想明白,因爲均值是跟一起的,因此, 即對做了平移處理。
import numpy as np
import matplotlib.pyplot as plt
import mpl_toolkits.axisartist as axisartist
#定義座標軸函數
def setup_axes(fig, rect):
ax = axisartist.Subplot(fig, rect)
fig.add_axes(ax)
ax.set_ylim(-.2, 1.2)
#自定義刻度
# ax.set_yticks([-10, 0,9])
ax.set_xlim(-10,10)
ax.axis[:].set_visible(False)
#第2條線,即y軸,經過x=0的點
ax.axis["y"] = ax.new_floating_axis(1, 0)
ax.axis["y"].set_axisline_style("-|>", size=1.5)
# 第一條線,x軸,經過y=0的點
ax.axis["x"] = ax.new_floating_axis(0, 0)
ax.axis["x"].set_axisline_style("-|>", size=1.5)
return(ax)
def gaussian(x,mu,sigma):
f_x = np.exp(-np.power(x-mu, 2.)/(2*np.power(sigma,2.)))
return(f_x)
#設置畫布
fig = plt.figure(figsize=(8, 8)) #建議可以直接plt.figure()不定義大小
ax1 = setup_axes(fig, 111)
ax1.axis["x"].set_axis_direction("bottom")
ax1.axis['y'].set_axis_direction('right')
#在已經定義好的畫布上加入高斯函數
x_values = np.linspace(-20,20,2000)
for mu,sigma in [(2,3),(3,3),(4,3)]:
plt.plot(x_values,gaussian(x_values,mu,sigma),label=r'$\mu=$'+str(mu)+',$\sigma^2=3$')
plt.show()
- 如果固定, 改變參數,由於峯值最大值爲,所以變小則圖形“尖瘦”,反之“矮胖”
for mu,sigma in [(2,0.5),(2,2),(2,3)]:
plt.plot(x_values,gaussian(x_values,mu,sigma),label=r'$\mu=2$'+',$\sigma^2=$'+str(sigma**2))
1.2 標準正太分佈
特別的, 當時隨機變量服從標準正太分佈,記爲,分佈密度和分佈函數爲:
注意分佈密度函數是的函數而不是的函數,因爲被積分掉了,而纔是變化的量。
一般的,對於的分佈函數,可通過線性變換化成標準正太分佈形式。
令,可得
(上面利用,因爲後者是常數爲零;當,這是上限)
所以由上式可以看到,即y服從標準正太分佈
(P276,高數三)
1.3 numpy中使用正太分佈
可以參考這篇博客:numpy random --mr.cat博文
2 多元高斯分佈
可以參考這篇博文多元高斯分佈,用google瀏覽器打開,否則會有些公式不能顯示
2.1 獨立多元/維高斯分佈
這一部分將以圖片形式引用這篇博文多元高斯分佈,感謝博主,建議大家查看原文,因爲寫的很好。
這裏之所以可以寫成的形式,即進行奇異值分解,是因爲是二次型。強烈建議看一下這個博文如何理解二次型,簡單說,二次型就是變量中每一項的的冪次相加等於2.如下圖
(注意:在上面的圖片中,不相關的二維正太分佈每個截面都是圓形,表示不相關)
即,在一元標準正太分佈中,分佈密度爲
而在元標準正太分佈中,分佈密度爲
所以,需要記住的是,最一般的維高斯分佈密度函數爲
以2維矩陣爲例,的表達式爲
2.2 舉例-畫2維獨立不相關高斯圖
即上面的的情況
import numpy as np
import matplotlib.pyplot as plt
import mpl_toolkits.axisartist as axisartist
from mpl_toolkits.mplot3d import Axes3D #畫三維圖不可少
from matplotlib import cm #cm 是colormap的簡寫
#定義座標軸函數
def setup_axes(fig, rect):
ax = axisartist.Subplot(fig, rect)
fig.add_axes(ax)
ax.set_ylim(-.2, 1.2)
#自定義刻度
# ax.set_yticks([-10, 0,9])
ax.set_xlim(-10,10)
ax.axis[:].set_visible(False)
#第2條線,即y軸,經過x=0的點
ax.axis["y"] = ax.new_floating_axis(1, 0)
ax.axis["y"].set_axisline_style("-|>", size=1.5)
# 第一條線,x軸,經過y=0的點
ax.axis["x"] = ax.new_floating_axis(0, 0)
ax.axis["x"].set_axisline_style("-|>", size=1.5)
return(ax)
# 1_dimension gaussian function
def gaussian(x,mu,sigma):
f_x = 1/(sigma*np.sqrt(2*np.pi))*np.exp(-np.power(x-mu, 2.)/(2*np.power(sigma,2.)))
return(f_x)
# 2_dimension gaussian function
def gaussian_2(x,y,mu_x,mu_y,sigma_x,sigma_y):
f_x_y = 1/(sigma_x*sigma_y*(np.sqrt(2*np.pi))**2)*np.exp(-np.power\
(x-mu_x, 2.)/(2*np.power(sigma_x,2.))-np.power(y-mu_y, 2.)/\
(2*np.power(sigma_y,2.)))
return(f_x_y)
#設置2維表格
x_values = np.linspace(-5,5,2000)
y_values = np.linspace(-5,5,2000)
X,Y = np.meshgrid(x_values,y_values)
#高斯函數
mu_x,mu_y,sigma_x,sigma_y = 0,0,0.8,0.8
F_x_y = gaussian_2(X,Y,mu_x,mu_y,sigma_x,sigma_y)
#顯示三維圖
fig = plt.figure()
ax = plt.gca(projection='3d')
ax.plot_surface(X,Y,F_x_y,cmap='jet')
# 顯示等高線圖
#ax.contour3D(X,Y,F_x_y,50,cmap='jet')
# 顯示2d等高線圖,畫8條線
# plt.contour(X,Y,F_x_y,8)
如果畫成平面上的等高線圖會更好理解,如下圖,是一個個圓,也就是無相關
ax.set_ylim(-4, 4)
#自定義刻度
# ax.set_yticks([-10, 0,9])
ax.set_xlim(-4,4)
#設置畫布
fig = plt.figure(figsize=(8, 8)) #建議可以直接plt.figure()不定義大小
ax1 = setup_axes(fig, 111)
ax1.axis["x"].set_axis_direction("bottom")
ax1.axis['y'].set_axis_direction('right')
# 顯示2d等高線圖,畫8條線
plt.contour(X,Y,F_x_y,8)
2.3 相關係數
這裏參考高數三P342.
定義:設二維隨機向量的方差,協方差都存在,則稱
爲隨機變量的相關係數
性質:
- 是可以爲負數的
- 表明相關程度越大,表明隨機點在線上;表示不相關,此時協方差=0
2.3 舉例-畫2維不獨立相關高斯圖
協方差矩陣的形式爲
對角線上是方差,其他是協方差,當隨機變量之間不獨立的時候,協方差是不爲零的。上面的協方差矩陣可以寫成
公式考慮相關時,不等於0,此時協方差矩陣是的形式,因此分佈密度函數爲
過程如下:
現在,畫出2維高斯分佈相關圖
現在畫出幾種相關圖,首先看一下三維圖