机器学习笔记:高斯过程
1 高斯分布回顧
一維高斯分布?
????????當(dāng)維度上升到多維的時(shí)候(比如有限的p維),我們稱之為高維高斯分布,記作:
????????其中 μ是p維向量,表示每個(gè)維度的均值,Σ的第(i,j)項(xiàng)表示第i個(gè)維度和第j個(gè)維度之間的協(xié)方差
2 高斯過(guò)程
高斯過(guò)程可以看成是定義在連續(xù)域上的無(wú)限維高斯分布
用符號(hào)表示,有:
?2.1 高斯過(guò)程舉例
以下圖為例,假設(shè)橫軸表示時(shí)間,縱軸表示體能值。
假設(shè)對(duì)于某一個(gè)物種而言,在任何時(shí)刻,體能值都滿足正態(tài)分布(只不過(guò)不同的時(shí)間點(diǎn),分布的均值和方差可能不同)
?
????????我們?cè)趫D中選取了5個(gè)點(diǎn),對(duì)應(yīng)5個(gè)時(shí)刻的體能值,分別滿足高斯分布
? ? ? ? 不失一般性,我們有:任取一個(gè)時(shí)刻t,
? ? ? ? 而圖中的兩條虛線是兩個(gè)高斯過(guò)程的樣本。也即我們?nèi)”樗袝r(shí)刻的t,獲得的連成的一條虛線?
?2.2 形式化語(yǔ)言描述高斯過(guò)程
我們和p維的高斯分布進(jìn)行類比:
| p維高斯分布 | 高斯過(guò)程(無(wú)限維高斯分布) | |
| 均值 | 關(guān)于時(shí)刻t的函數(shù),m(t) | |
| 方差 | 核函數(shù)(協(xié)方差函數(shù))k(s,t),其中s和t分別代表任意兩個(gè)時(shí)刻 | |
| 表示 |
?2.3 徑向基函數(shù)(RBF)
這是一種較為常見(jiàn)的核函數(shù)
?
- ?這里的σ和l是徑向基函數(shù)的超參數(shù),是可以提前設(shè)置好的
- s和t表示高斯過(guò)程連續(xù)域上的兩個(gè)不同的時(shí)間點(diǎn),兩個(gè)點(diǎn)距離越大,兩個(gè)分布之間的協(xié)方差值越小,相關(guān)性越小
2.3.1RBF代碼
import numpy as np def rbf(x):sigma=1l=1#設(shè)置兩個(gè)rbf的超參數(shù)m=x.shape[0]k=np.zeros((m,m)) #初始化這個(gè)數(shù)據(jù)的徑向基矩陣for i in range(m):for j in range(m):k[i][j]=np.exp(-np.sum((x[i]-x[j])**2)/2) #這里為什么要sum呢?因?yàn)槲夷骋粋€(gè)時(shí)刻,特征可能不止一個(gè)維度(就像這里我們每個(gè)時(shí)刻是兩個(gè)維度)return(k)a=np.array([[1,2],[3,4],[5,6]])#三個(gè)時(shí)刻的數(shù)據(jù),每個(gè)時(shí)刻有兩維特征rbf(a) ''' array([[1.00000000e+00, 1.83156389e-02, 1.12535175e-07],[1.83156389e-02, 1.00000000e+00, 1.83156389e-02],[1.12535175e-07, 1.83156389e-02, 1.00000000e+00]]) ''' #這相當(dāng)于一個(gè)3*3的協(xié)方差矩陣3 高斯過(guò)程回歸
這個(gè)過(guò)程可以看成先驗(yàn)概率+觀測(cè)值——>后驗(yàn)概率的過(guò)程
先驗(yàn)概率:通過(guò)μ(t)和k(s,t)定義一個(gè)高斯過(guò)程
3.1 高維高斯分布的條件概率
高斯分布的聯(lián)合概率,邊緣概率和條件概率都仍然滿足高斯分布
假設(shè)n維隨機(jī)變量滿足:
如果我們把這n維的隨機(jī)變量分成兩部分:p維的xa和q維的xb,(q+p=n),那么我們有:
?其中?,
同時(shí),條件概率也是高維高斯分布
?3.2 類比到高斯過(guò)程回歸
????????我們將均值向量換成均值函數(shù),把協(xié)方差矩陣換成核函數(shù),把高維高斯分布看成高斯過(guò)程(無(wú)限維高斯分布)
假設(shè)我們有觀測(cè)值(X,Y),于是我們記其他的非觀測(cè)點(diǎn)是
首先,聯(lián)合分布是滿足無(wú)限維高斯分布的
?與此同時(shí),條件概率也滿足無(wú)限維高斯分布(高斯過(guò)程)
類比前面的,我們現(xiàn)在有:
?
?
?3.3高斯過(guò)程實(shí)例
?下面我們來(lái)實(shí)際的進(jìn)行代碼演示
令:
【注:這里的μ(X)是Y的分布的均值,不是X的分布均值 】
中的?
?取四個(gè)觀測(cè)值 X=[1,3,7,9] ,Y為
?我們?cè)谒膫€(gè)觀測(cè)點(diǎn)的基礎(chǔ)上,來(lái)求高斯過(guò)程的后驗(yàn)。
?在下面的具體程序?qū)崿F(xiàn)中,由于繪圖是離散化處理的,因此連續(xù)域上的均值函數(shù)以及核函數(shù),我們使用一個(gè)?很大的 n?維均值向量以及n×n??協(xié)方差矩陣進(jìn)行表示
?3.3.1 代碼部分
import numpy as np import matplotlib.pyplot as plt def rbf(x,y,l=0.5,simga=0.2):sigma=1l=1#設(shè)置兩個(gè)rbf的超參數(shù)m=x.shape[0]n=y.shape[0]k=np.zeros((m,n), dtype=float)#初始化這個(gè)數(shù)據(jù)的徑向基矩陣for i in range(m):for j in range(n):k[i][j]=np.exp(-np.sum((x[i]-y[j])**2)/(2*l**2))*simga**2#這里為什么要sum呢?因?yàn)槲夷骋粋€(gè)時(shí)刻,特征可能不止一個(gè)維度(就像這里我們每個(gè)時(shí)刻是兩個(gè)維度)return(k)def getY(x):#生成觀測(cè)值對(duì)應(yīng)的YY=np.sin(x)*0.4+np.random.normal(0,0.05,size=x.shape)return(Y)def guassian_process(X,X_star):K_XX=rbf(X,X)#f(X,X)K_XX_=rbf(X,X_star)#f(X,X*)K_X_X=rbf(X_star,X)#f(X*,X)K_X_X_=rbf(X_star,X_star)#f(X*,X*)K_XX_inv=np.linalg.inv(K_XX+ 1e-8 * np.eye(len(X)))#f(X,X)的逆,加后一項(xiàng)是為了防止不可逆mu_star=K_X_X.dot(K_XX_inv).dot(Y-0)+0#μ* 后面的μ(X*)也是0,是因?yàn)檎w的μ(X)是0,去掉那幾個(gè)點(diǎn)之后的μ(X*)也是0cov_star=K_X_X_-K_X_X.dot(K_XX_inv).dot(K_XX_)#Σ*return(mu_star,cov_star)#根據(jù)觀察點(diǎn)X,修正生成高斯過(guò)程新的均值和協(xié)方差f,ax=plt.subplots(2, 1,figsize=(10,10), sharex=True,sharey=True) #繪制高斯過(guò)程的先驗(yàn) (μ(x)=0) X_pre = np.arange(0, 10, 0.1) Y_pre = np.array([0]*len(X_pre))conv_pre=rbf(X_pre,X_pre)uncertainty=1.96*np.sqrt(np.diag(conv_pre)) #1.96是高斯分布的95%置信區(qū)間,這里表示每個(gè)點(diǎn)對(duì)應(yīng)的95%置信區(qū)間ax[0].fill_between(X_pre,Y_pre+uncertainty,Y_pre-uncertainty,alpha=0.2)ax[0].plot(X_pre,Y_pre,label="pre_expectation") ax[0].legend() #ax[0]繪制的是完全沒(méi)有任何觀測(cè)點(diǎn)的時(shí)候的先驗(yàn)概率分布,我們只知道μ(X)=0X=np.array([1,3,7,9]) Y=getY(X) #我們觀測(cè)到了這四個(gè)點(diǎn),其他的點(diǎn)μ(x)依舊為0 X_star=np.arange(0,10,0.1) Y_star,conv_star=guassian_process(X,X_star)#得到 f(x*)|Y的均值和方差 uncertainty_star=1.96*np.sqrt(np.diag(conv_star)) ax[1].fill_between(X_star,Y_star+uncertainty_star,Y_star-uncertainty_star,alpha=0.2) ax[1].plot(X_star,Y_star,label="after_expectation") ax[1].scatter(X,Y,c='green') ax[1].legend() #ax[1]繪制的是有四個(gè)觀測(cè)點(diǎn)之后的后驗(yàn)概率分布?3.3.2 結(jié)論部分
?????????ax[0]繪制的是完全沒(méi)有任何觀測(cè)點(diǎn)的時(shí)候的先驗(yàn)概率分布,我們只知道μ(X)=0;ax[1]繪制的是有四個(gè)觀測(cè)點(diǎn)之后的后驗(yàn)概率分布。
????????明顯可以看出,由于觀測(cè)點(diǎn)信息的帶入,連續(xù)域上各個(gè)點(diǎn)的均值發(fā)生了變化。同時(shí)大部分取值點(diǎn)的??置信空間也收窄,證明確定性得到了增強(qiáng)。
?參考內(nèi)容:如何通俗易懂地介紹 Gaussian Process? - 知乎 (zhihu.com)
4 sklearn?
sklearn 筆記:高斯過(guò)程_UQI-LIUWJ的博客-CSDN博客
總結(jié)
以上是生活随笔為你收集整理的机器学习笔记:高斯过程的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: matplotlib 知识点整理:ax与
- 下一篇: numpy笔记:random.permu