GPflow解讀—GPMC

問題

將GP與不同的似然函數(shù)結合可以構建非常靈活的模型惯疙,然而這會使得模型的推理變得不可解(intractable)土砂,因為似然函數(shù)不再是高斯過程的共軛祝谚。所以我們需要變分推理來近似f的后驗分布或者MCMC方法從f后驗分布來采樣,從而預測在新的點的函數(shù)值们豌。

GPflow.models.GPMCgpflow.train.HMC的結合使用就實現(xiàn)了MCMC方法涯捻。

模型

從完全的貝葉斯角度看,一般GP模型的數(shù)據(jù)生成過程可以表示為:
\theta \sim p(\theta)
f \sim \mathcal {GP}\Big(m(x; \theta), k(x, x'; \theta)\Big)
y_i \sim p\Big(y | g(f(x_i)\Big)

首先從\theta的先驗分布采樣一個\theta望迎,然后從高斯分布得到一組隱函數(shù)f障癌,然后再由一個連接函數(shù)g(\cdot)映射到觀測函數(shù)y

模型推理

首先明確我們要求的是f_\ast的后驗分布

p(f_\ast | \bm{x}_\ast, \bm{X}, \bm{y}) = \int p(f_\ast | \bm{x}_\ast, \bm{X}, \bm{f}) p(\bm{f} | \bm{X}, \bm{y}) ~d{\bm{f}} (1)

如果我們將隱函數(shù)f和模型超參數(shù)\theta都考慮乘模型參數(shù)辩尊,(1)可以改寫為

p(f_\ast | \bm{x}_\ast, \bm{X}, \bm{y}) = \int p(f_\ast | \bm{x}_\ast, \bm{X}, \bm{f}, \theta) p(\bm{f}, \theta | \bm{X}, \bm{y}) ~d{\bm{f}} ~d \theta (2)

我們只需使用Hamiltonian Monte Carlo (HMC) 從p(\bm{f}, \theta | \bm{X}, \bm{y})聯(lián)合采樣f\theta即可涛浙。利用貝葉斯法則,上式改寫為p(\bm{f}, \theta | \bm{X}, \bm{y}) = \frac {p(\bm{y} | \bm{X}, \bm{f}, \theta) p(\bm{f}) p(\theta)} {p(\bm{y}|\bm{X})}摄欲。分子部分對于f\theta是常數(shù)轿亮,只需要從分子部分采樣即可。

例子1

準備數(shù)據(jù)

import gpflow
from gpflow.test_util import notebook_niter
import numpy as np
import matplotlib
%matplotlib inline
matplotlib.rcParams['figure.figsize'] = (12, 6)
plt = matplotlib.pyplot

X = np.linspace(-3,3,20)
Y = np.random.exponential(np.sin(X)**2)
with gpflow.defer_build():
    k = gpflow.kernels.Matern32(1, ARD=False) + gpflow.kernels.Bias(1)
    l = gpflow.likelihoods.Exponential()
    m = gpflow.models.GPMC(X[:,None], Y[:,None], k, l)

m.kern.kernels[0].lengthscales.prior = gpflow.priors.Gamma(1., 1.)
m.kern.kernels[0].variance.prior = gpflow.priors.Gamma(1., 1.)
m.kern.kernels[1].variance.prior = gpflow.priors.Gamma(1., 1.)

用AdamOptimizer先找一個較好的初始點

m.compile()
o = gpflow.train.AdamOptimizer(0.01)
o.minimize(m, maxiter=notebook_niter(15)) # start near MAP

采樣

s = gpflow.train.HMC()
samples = s.sample(m, notebook_niter(500), epsilon=0.12, lmax=20, lmin=5, thin=5, logprobs=False)#, verbose=True)

求平均

xtest = np.linspace(-4,4,100)[:,None]
f_samples = []
for i, s in samples.iterrows():
    f = m.predict_f_samples(xtest, 5, initialize=False, feed_dict=m.sample_feed_dict(s))
    f_samples.append(f)
f_samples = np.vstack(f_samples)

畫圖

rate_samples = np.exp(f_samples[:, :, 0])

line, = plt.plot(xtest, np.mean(rate_samples, 0), lw=2)
plt.fill_between(xtest[:,0],
                 np.percentile(rate_samples, 5, axis=0),
                 np.percentile(rate_samples, 95, axis=0),
                 color=line.get_color(), alpha = 0.2)

plt.plot(X, Y, 'kx', mew=2)
plt.ylim(-0.1, np.max(np.percentile(rate_samples, 95, axis=0)))

結果如下圖蒿涎,黑色散點為要擬合的點哀托,藍色線為預測函數(shù),淺藍色帶為5%和95%分位數(shù)位置劳秋。


MCMC得到擬合函數(shù)(藍色曲線)

下圖是由采樣的variance值所畫的直方圖仓手,代表variance的后驗分布。


variance 后驗分布

代碼解讀

p(\bm{y} | \bm{X}, \bm{f}, \theta)對應GPMC._build_likelihood()玻淑。
p(\bm{f})對應GPMC.__init__()中的self.V.prior = Gaussian(0., 1.)嗽冒。
p(\theta)對應kernellikelihood中的其他參數(shù)的先驗分布。

至此补履,GPMC模塊也講完了添坊。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市箫锤,隨后出現(xiàn)的幾起案子贬蛙,更是在濱河造成了極大的恐慌,老刑警劉巖谚攒,帶你破解...
    沈念sama閱讀 218,204評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件阳准,死亡現(xiàn)場離奇詭異,居然都是意外死亡馏臭,警方通過查閱死者的電腦和手機野蝇,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來括儒,“玉大人绕沈,你說我怎么就攤上這事“镅埃” “怎么了乍狐?”我有些...
    開封第一講書人閱讀 164,548評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長规婆。 經常有香客問我澜躺,道長蝉稳,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,657評論 1 293
  • 正文 為了忘掉前任掘鄙,我火速辦了婚禮耘戚,結果婚禮上,老公的妹妹穿的比我還像新娘操漠。我一直安慰自己收津,他們只是感情好,可當我...
    茶點故事閱讀 67,689評論 6 392
  • 文/花漫 我一把揭開白布浊伙。 她就那樣靜靜地躺著撞秋,像睡著了一般。 火紅的嫁衣襯著肌膚如雪嚣鄙。 梳的紋絲不亂的頭發(fā)上吻贿,一...
    開封第一講書人閱讀 51,554評論 1 305
  • 那天,我揣著相機與錄音哑子,去河邊找鬼舅列。 笑死,一個胖子當著我的面吹牛卧蜓,可吹牛的內容都是我干的帐要。 我是一名探鬼主播,決...
    沈念sama閱讀 40,302評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼弥奸,長吁一口氣:“原來是場噩夢啊……” “哼榨惠!你這毒婦竟也來了?” 一聲冷哼從身側響起盛霎,我...
    開封第一講書人閱讀 39,216評論 0 276
  • 序言:老撾萬榮一對情侶失蹤赠橙,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后愤炸,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體简烤,經...
    沈念sama閱讀 45,661評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,851評論 3 336
  • 正文 我和宋清朗相戀三年摇幻,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片挥萌。...
    茶點故事閱讀 39,977評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡绰姻,死狀恐怖,靈堂內的尸體忽然破棺而出引瀑,到底是詐尸還是另有隱情狂芋,我是刑警寧澤,帶...
    沈念sama閱讀 35,697評論 5 347
  • 正文 年R本政府宣布憨栽,位于F島的核電站帜矾,受9級特大地震影響翼虫,放射性物質發(fā)生泄漏。R本人自食惡果不足惜屡萤,卻給世界環(huán)境...
    茶點故事閱讀 41,306評論 3 330
  • 文/蒙蒙 一珍剑、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧死陆,春花似錦招拙、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至领虹,卻和暖如春规哪,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背塌衰。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評論 1 270
  • 我被黑心中介騙來泰國打工诉稍, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人猾蒂。 一個月前我還...
    沈念sama閱讀 48,138評論 3 370
  • 正文 我出身青樓均唉,卻偏偏與公主長得像,于是被迫代替她去往敵國和親肚菠。 傳聞我的和親對象是個殘疾皇子舔箭,可洞房花燭夜當晚...
    茶點故事閱讀 44,927評論 2 355

推薦閱讀更多精彩內容