原文章為scikit-learn中"用戶(hù)指南"-->"監(jiān)督學(xué)習(xí)的第七節(jié):Gaussian Processes"######
高斯過(guò)程(GP)是一種被設(shè)計(jì)來(lái)解決** 回歸 和 概率分類(lèi) **的通用監(jiān)督學(xué)習(xí)方法。
高斯過(guò)程有以下的優(yōu)點(diǎn):
- 可以預(yù)測(cè)插值(至少對(duì)常規(guī)核而言)
- 預(yù)測(cè)是概率的(高斯分布的)結(jié)果,因此可以根據(jù)置信區(qū)間的計(jì)算以決定是否要在一些感興趣的區(qū)域重新進(jìn)行擬合(在線(xiàn)擬合,自適應(yīng)擬合)。
- 可以指定不同的 核 。默認(rèn)是提供了一個(gè)普通核,不過(guò)也可以根據(jù)自己需求來(lái)指定自定義的核。
同樣的,其缺點(diǎn)有:
- 它是非稀疏的。即它會(huì)使用所有樣本及其特征信息來(lái)進(jìn)行預(yù)測(cè)。
- 在高維空間下會(huì)失去效率(當(dāng)特征數(shù)量超過(guò)3、40左右)。
1.7.1. 高斯過(guò)程回歸(GPR)#
GaussianProcessRegressor 類(lèi)實(shí)現(xiàn)了高斯過(guò)程的回歸。所以要使用它前需要指定先驗(yàn)。先驗(yàn)均值被預(yù)設(shè)值為全為0的常數(shù)(當(dāng)** normalize=False 時(shí))或是訓(xùn)練集的均值(當(dāng) normalize=True )。先驗(yàn)的協(xié)方差是通過(guò)核對(duì)象來(lái)指定的。而核的超參數(shù)則是在擬合通過(guò)最大對(duì)數(shù)邊際似然(LML)的GPR過(guò)程中,通過(guò)傳入 optimizer 來(lái)進(jìn)行調(diào)優(yōu)。因?yàn)長(zhǎng)ML可能擁有多個(gè)局部最優(yōu)值,所以可以通過(guò)設(shè)置 n_restarts_optimizer 來(lái)反復(fù)進(jìn)行此過(guò)程以獲得"最優(yōu)值"。這個(gè)過(guò)程的第一次運(yùn)行通常是先初始化核的超參數(shù)。然后再?gòu)目赡艿闹涤蛑须S機(jī)的對(duì)超參數(shù)賦值。如果要讓初始化的超參數(shù)保持不變,那么只需要傳入 None **作為它的優(yōu)化器就可以了。
可以通過(guò)參數(shù)** alpha **指定Target(目標(biāo)結(jié)果)的噪聲等級(jí),可以當(dāng)做一個(gè)全局標(biāo)量 或 每個(gè)數(shù)據(jù)點(diǎn)的噪聲等級(jí)。因?yàn)樵O(shè)置一個(gè)中等的噪聲等級(jí)會(huì)被以Tikhonov正則化形式來(lái)實(shí)現(xiàn),這一點(diǎn)有助于解決在擬合過(guò)程中出現(xiàn)的數(shù)值問(wèn)題(即把它添加到核矩陣的對(duì)角線(xiàn)內(nèi))。另一種明確指定噪聲等級(jí)的可選的方法是:在核中包含一個(gè)白核組件,這樣就可以在數(shù)據(jù)集中估計(jì)出全局噪聲等級(jí)(可以看下面的例子)。
本類(lèi)的實(shí)現(xiàn)是基于[RW2006]的 2.1 算法。除了scikit-learn提供的標(biāo)準(zhǔn)API方法外,高斯過(guò)程回歸(GPR):
- 允許在沒(méi)有先驗(yàn)的情況下進(jìn)行擬合(基于GP先驗(yàn))。
- 提供一個(gè)額外的方法** sample_y(X) **,這個(gè)方法可以評(píng)估從GPR(之前或之后)提取的樣本。
- 提供** log_marginal_likelihood(theta) **方法,其可以作為一種在外部選擇超參數(shù)的方法,例如通過(guò)馬爾科夫鏈蒙特卡洛算法(MCMC)。
1.7.2. GPR的一些例子#
1.7.2.1. 能估計(jì)噪聲等級(jí)的GPR
這個(gè)例子展示了帶有 WhiteKernel 的sum核GPR能夠估量數(shù)據(jù)的噪聲等級(jí)。下面LML的繪圖顯示了其存在有兩個(gè)局部最大值。
這一張圖代表了一個(gè)帶有高度噪聲等級(jí)和大長(zhǎng)度標(biāo)量的模型,其解釋了噪聲對(duì)數(shù)據(jù)的影響程度。
第二張圖的模型有著一個(gè)較小的噪聲等級(jí)和小長(zhǎng)度標(biāo)量,展示了無(wú)噪聲函數(shù)的變化關(guān)系。這一張圖有著對(duì)數(shù)據(jù)集的高度似然性;但是根據(jù)超參數(shù)的初始化值來(lái)看,在使用基于梯度的優(yōu)化方法可能會(huì)生成一個(gè)具有高噪聲的結(jié)果。正因?yàn)橐苊獬霈F(xiàn)這種情況,所以才要使用多種不同的超參數(shù)初始化值來(lái)重新訓(xùn)練。
1.7.2.2. GPR與核嶺回歸的比較##
核嶺回歸(KRR)和GPR都是使用了內(nèi)置的"核技巧"來(lái)學(xué)習(xí)目標(biāo)函數(shù)。KRR通過(guò)由各種核在原始空間里對(duì)應(yīng)的非線(xiàn)性函數(shù)所形成的空間里來(lái)學(xué)習(xí)線(xiàn)性函數(shù)。這個(gè)在核空間內(nèi)的線(xiàn)性函數(shù)是由基于帶有均方誤差損失的嶺回歸來(lái)得出的。GPR使用核來(lái)定義一個(gè)在目標(biāo)函數(shù)上先驗(yàn)分布的協(xié)方差并使用經(jīng)過(guò)訓(xùn)練的數(shù)據(jù)來(lái)定義似然函數(shù)。基于貝葉斯理論,定義了一個(gè)在目標(biāo)函數(shù)上的(高斯)后驗(yàn)分布,并且使用它的平均值來(lái)作為預(yù)測(cè)結(jié)果。
GPR與KRR的一個(gè)主要的不同點(diǎn)在于,GPR能夠使用基于梯度上升的邊際似然函數(shù)來(lái)選擇核所需的超參數(shù),而KRR則需要對(duì)交叉驗(yàn)證的損失函數(shù)(均分誤差損失函數(shù))執(zhí)行網(wǎng)格搜索才可以得出超參數(shù)。另一個(gè)區(qū)別點(diǎn)在于GPR是學(xué)習(xí)目標(biāo)函數(shù)的生成性概率模型,
從而能為預(yù)測(cè)結(jié)果提供有意義的置信區(qū)間和后驗(yàn)樣本;而KRR只能提供一個(gè)預(yù)測(cè)結(jié)果。
下面的圖表比較了這兩種方法在一個(gè)由帶有強(qiáng)噪聲正弦波分布的人工數(shù)據(jù)集上的學(xué)習(xí)結(jié)果。KRR和GPR的模型都是基于正弦平方核學(xué)習(xí)出的,這種核很適合用來(lái)學(xué)習(xí)具有周期性規(guī)律分布的數(shù)據(jù)。正弦平方核的超參數(shù)控制著平滑度(也就是長(zhǎng)度標(biāo)量)和核的周期性。除此之外,當(dāng)前數(shù)據(jù)集的噪聲等級(jí)還是通過(guò)添加額外的白核組件的GPR和經(jīng)過(guò)正則化參數(shù)** α **的KRR得出的。
這個(gè)圖表展示了兩個(gè)方法各自對(duì)目標(biāo)函數(shù)的合理模型。GPR得出的模型正確地得出這個(gè)周期函數(shù)大致為** 2 * π (6.28),而KRR則得出了雙倍的結(jié)果 4 * π 。除此之外,GPR為預(yù)測(cè)值提供了一個(gè)合理的置信區(qū)間,雖然這個(gè)區(qū)間不能用到KKR上。這兩個(gè)方法的另一種主要區(qū)別是預(yù)測(cè)和擬合的時(shí)間:理論上KRR的擬合速度是很快的,因?yàn)闉槌瑓?shù)調(diào)優(yōu)的網(wǎng)格搜索速度與超參數(shù)的數(shù)量成正比(不過(guò)同樣也會(huì)受到維度災(zāi)難**的影響)。GPR中優(yōu)化參數(shù)所使用的基于梯度的優(yōu)化方法并不會(huì)受到指數(shù)縮放的影響,而在這里例子中,因?yàn)槌瑓?shù)的空間是三維的,所以處理的速度非常快。然后預(yù)測(cè)所需的時(shí)間也是類(lèi)似的,但是如果要使GPR產(chǎn)生預(yù)測(cè)分布的方差的話(huà),其所需的時(shí)間要比只預(yù)測(cè)出平均值要更久。
1.7.2.3. GPR與莫納羅亞山的二氧化碳數(shù)據(jù)##
這個(gè)例子是基于[RW2006]的5.4.3一節(jié)。它描繪了一個(gè)使用了復(fù)雜內(nèi)核工程和使用梯度上升為對(duì)數(shù)邊際似然優(yōu)化超參數(shù)。這個(gè)數(shù)據(jù)集由1958年至1997年,夏威夷的莫納羅亞山上每月平均大氣CO2濃度(百萬(wàn)分之一(ppmv))的觀察數(shù)據(jù)組成。訓(xùn)練出的模型目標(biāo)是為了獲取CO2濃度跟時(shí)間** t **的關(guān)系函數(shù)。
這個(gè)核由一些術(shù)語(yǔ)組成,這些術(shù)語(yǔ)負(fù)責(zé)解釋信號(hào)的不同屬性:
- 一個(gè)長(zhǎng)期且平滑上升的趨勢(shì)將由RBF核來(lái)進(jìn)行解釋。擁有大長(zhǎng)度標(biāo)量的RBF核會(huì)強(qiáng)制該組件變得平滑。而上升的趨勢(shì)則是留給GP自由選擇是否強(qiáng)制需要。特定長(zhǎng)度標(biāo)量和振幅屬于該核的自由超參數(shù)。
- 季節(jié)性的則由一個(gè)周期性的正弦平方核進(jìn)行解釋?zhuān)芷跒橐荒辍iL(zhǎng)度標(biāo)量也是一個(gè)周期性組件,控制著模型的平滑度,這是一項(xiàng)自由參數(shù)。為了允許遠(yuǎn)離精確周期性,采用具有RBF內(nèi)核的乘積。這個(gè)RBF核內(nèi)的長(zhǎng)度標(biāo)量控制著遠(yuǎn)離時(shí)間,并且它也是一個(gè)自由參數(shù)。
- 較小的不規(guī)則中期則由有理數(shù)核組件(擁有長(zhǎng)度標(biāo)量和alpha兩個(gè)參數(shù),后者決定長(zhǎng)度標(biāo)量的擴(kuò)散性)來(lái)進(jìn)行解釋。根據(jù)[RW2006],這些不規(guī)則的項(xiàng)用有理數(shù)核來(lái)解釋比RBF核組件更好,因?yàn)榍罢呖梢匀菁{幾個(gè)長(zhǎng)度標(biāo)量。
- 由RBF核貢獻(xiàn)的"噪聲"項(xiàng),則是應(yīng)該解釋相關(guān)的噪聲分量,例如局部天氣現(xiàn)象和白核對(duì)白噪聲的貢獻(xiàn)。它的相對(duì)幅度和RBF的長(zhǎng)度標(biāo)量也是自由參數(shù)。
在減去目標(biāo)的平均值之后,最大化對(duì)數(shù)邊際似然函數(shù)使得產(chǎn)生出一個(gè)帶有LML為-83.214的核:
34.4**2 * RBF(length_scale=41.8)
+ 3.27**2 * RBF(length_scale=180) * ExpSineSquared(length_scale=1.44,
periodicity=1)
+ 0.446**2 * RationalQuadratic(alpha=17.7, length_scale=0.957)
+ 0.197**2 * RBF(length_scale=0.138) + WhiteKernel(noise_level=0.0336)
因此大部分目標(biāo)信號(hào)(34.4ppm)的趨勢(shì)可以通過(guò)成一個(gè)長(zhǎng)期上升的趨勢(shì)(長(zhǎng)度標(biāo)量為41.8年)進(jìn)行解釋。這個(gè)周期組件擁有一個(gè)3.27ppm的振幅,衰退時(shí)間為180年且長(zhǎng)度標(biāo)量為1.44。較長(zhǎng)的衰退時(shí)間表示我們擁有一個(gè)局部非常接近周期性季節(jié)的組件。相關(guān)的噪聲擁有為0.197ppm的振幅,長(zhǎng)度標(biāo)量為0.138年,而白噪音貢獻(xiàn)為0.197ppm。因此全局 噪聲水平很低,代表著數(shù)據(jù)能夠很好地通過(guò)模型來(lái)解釋。下面的圖表還展示了該模型在2015年左右所做出的一個(gè)非常有信心的預(yù)測(cè)。
1.7.3. 高斯處理分類(lèi)(GPC)#
GaussianProcessClassifier
實(shí)現(xiàn)了用于分類(lèi)的高斯過(guò)程(GP),更具體來(lái)說(shuō)是用在概率分類(lèi),使用類(lèi)概率的形式來(lái)作為預(yù)測(cè)結(jié)果。GPC在潛在函數(shù)** f 上使用了GP先驗(yàn),然后通過(guò)壓縮這個(gè)鏈接函數(shù)去獲得概率性的分類(lèi)。潛在函數(shù) f 也被稱(chēng)為損害函數(shù),其值是不會(huì)被觀察的,并且與自身沒(méi)有關(guān)聯(lián)。這樣的目的是為了能夠方便地格式化模型,并且在預(yù)測(cè)中也去除了 f **(集成并提取出來(lái))。GPC實(shí)現(xiàn)了logistic鏈接函數(shù),雖然其積分不能被分析與計(jì)算,但是對(duì)于二元分類(lèi)問(wèn)題來(lái)說(shuō)卻很容易獲得其近似分類(lèi)。
與在上面章節(jié)的回歸設(shè)置里不同,其潛在函數(shù)** f **的后驗(yàn)對(duì)GP先驗(yàn)來(lái)說(shuō)不是高斯的,因?yàn)楦咚顾迫粺o(wú)法適用于離散型的標(biāo)簽。所以正好相反,一個(gè)非高斯似然是用到了logistic鏈接函數(shù)(logit)的。GPC使用基于拉普拉斯逼近的高斯來(lái)逼近其非高斯后驗(yàn)。如果想要知道更多的細(xì)節(jié)的話(huà)可以查看[RW2006]的第三章。
GP的先驗(yàn)均值在默認(rèn)情況下被初始化為0。然后先驗(yàn)的協(xié)方差可以通過(guò)核對(duì)象來(lái)賦值。核的超參數(shù)會(huì)在GPR擬合最大化LML的過(guò)程中,通過(guò)傳遞** optimizer 參數(shù)來(lái)調(diào)優(yōu)。不過(guò)LML可能會(huì)有多個(gè)局部最優(yōu)值,所以需要設(shè)置 n_restarts_optimizer 參數(shù)來(lái)反復(fù)執(zhí)行以獲得一個(gè)穩(wěn)定的最優(yōu)值。在第一次運(yùn)行的過(guò)程中通常會(huì)從初始化核的超參數(shù)值來(lái)開(kāi)始;然后則從可選的值域里隨機(jī)挑出超參數(shù)的值。如果要保持初始化的超參數(shù)的值,可以往參數(shù) optimizer 傳入 None **。
GaussianProcessClassifier
通過(guò)執(zhí)行基于一對(duì)多或一對(duì)一的訓(xùn)練和預(yù)測(cè)來(lái)支持多類(lèi)分類(lèi)。在一對(duì)多的情況,一元GPC會(huì)對(duì)每個(gè)類(lèi)進(jìn)行訓(xùn)練,將每一類(lèi)區(qū)分開(kāi)來(lái)。在一對(duì)一的情況下,一元GPC會(huì)對(duì)每一對(duì)類(lèi)進(jìn)行訓(xùn)練,將其分成兩類(lèi)。然后再講這些單個(gè)預(yù)測(cè)結(jié)果組合成多元分類(lèi)。要了解更多的細(xì)節(jié)的話(huà),可以查看多元分類(lèi)一節(jié)。
在GPC里,一對(duì)一或許有著更廉價(jià)的計(jì)算能力,因?yàn)樗恍枰鉀Q數(shù)據(jù)集中子集的大多數(shù)問(wèn)題(預(yù)測(cè)出子集的大部分類(lèi)),而不是解決整個(gè)數(shù)據(jù)集中的較少部分問(wèn)題(預(yù)測(cè)出整個(gè)數(shù)據(jù)集的少部分類(lèi))。因?yàn)镚PC把數(shù)據(jù)集以立方的方式縮放,這樣也許會(huì)有著更快的處理速度。但是,要注意的是一對(duì)一并不支持預(yù)測(cè)概率估計(jì),而是只支持平面預(yù)測(cè)。更進(jìn)一步的,GaussianProcessClassifier
(目前)還沒(méi)有在內(nèi)部實(shí)現(xiàn)一個(gè)多類(lèi)的拉普拉斯近似算法,而是使用了上面討論的那種方法在內(nèi)部來(lái)解決多元分類(lèi)任務(wù),其結(jié)合了一對(duì)多和一對(duì)一這兩種方式。
1.7.4. GPC的一些例子#
1.7.4.1. GPC的概率預(yù)測(cè)##
這個(gè)例子描繪了GPC在RBF有不同的超參數(shù)選擇下進(jìn)行的概率預(yù)測(cè)。第一個(gè)圖表展示了GPC在任意超參數(shù)下的概率預(yù)測(cè),并且其超參數(shù)對(duì)應(yīng)著最大邊際似然(LML)。
雖然由最優(yōu)LML選出的超參數(shù)有著較大的LML,因?yàn)樗麄兏鶕?jù)測(cè)試數(shù)據(jù)的對(duì)數(shù)誤差會(huì)有略差的表現(xiàn)。這個(gè)圖表顯示,因?yàn)樵陬?lèi)邊界有一個(gè)陡峭的類(lèi)概率變化(這一點(diǎn)是好的),但是預(yù)測(cè)出的概率卻總是接近0.5(這一點(diǎn)并不好)。這種不好的影響的成因是GPC內(nèi)部所使用的拉普拉斯近似算法。
第二個(gè)圖表展示了在不同核參數(shù)的情況下,對(duì)數(shù)邊際似然的情況。使用黑點(diǎn)來(lái)顯示在第一張圖里所使用超參數(shù)組合。
1.7.4.2. GPC在異或數(shù)據(jù)集##
這個(gè)例子展示了GPC對(duì)異或數(shù)據(jù)集的說(shuō)明情況。通過(guò)固定各向同性核(RBF)和固定核(點(diǎn)乘)。在這個(gè)特定的數(shù)據(jù)集上,點(diǎn)乘核能夠獲得更好的結(jié)果,因?yàn)轭?lèi)邊界是線(xiàn)性的,并且跟坐標(biāo)軸重合。但是這個(gè)示例中,像 RBF 這種固定核卻能夠得到更好的效果。
1.7.4.3. GPC在鳶尾花數(shù)據(jù)集##
這個(gè)示例展示了GPC在分別在各向同性和各向異性核的情況下,對(duì)二維版本的鳶尾花數(shù)據(jù)集上的概率估計(jì)。這個(gè)說(shuō)明展示了GPC適用于非二元分類(lèi)的情況(多元分類(lèi))。各向異性RBF核通過(guò)向兩個(gè)特征維度分配不同的長(zhǎng)度尺度來(lái)獲得略高的對(duì)數(shù)邊際似然。
1.7.5. 高斯過(guò)程的核#
核(在高斯過(guò)程的上下文里也被稱(chēng)為協(xié)方差函數(shù))在高斯過(guò)程中是一個(gè)關(guān)鍵的部分,其決定了高斯過(guò)程先驗(yàn)和后驗(yàn)的形狀。通過(guò)相似的數(shù)據(jù)點(diǎn)有著相似的目標(biāo)值這一假設(shè),與兩個(gè)數(shù)據(jù)點(diǎn)之間的關(guān)系進(jìn)行結(jié)合來(lái)定義出“相似度”,并以此來(lái)對(duì)已學(xué)習(xí)函數(shù)的假設(shè)進(jìn)行編碼。兩種類(lèi)型的核能夠通過(guò)這些來(lái)進(jìn)行區(qū)分:固定核只依賴(lài)兩個(gè)數(shù)據(jù)點(diǎn)直接的距離,而不是他們的絕對(duì)值** k(xi, xj) = k(d(xi, xj)) **,從而在輸入空間中的翻譯不變;而非固定核相比于固定核,其也依賴(lài)于數(shù)據(jù)點(diǎn)的值。固定核能夠更進(jìn)一步的被細(xì)分成各項(xiàng)同性核和各向異性核,其中各向異性核在輸入空間中的旋轉(zhuǎn)是不變的。如果想要了解更多細(xì)節(jié)的話(huà),可以建議查看[RW2006]的第四節(jié)。
1.7.5.1.
核 的一個(gè)主要用法是計(jì)算數(shù)據(jù)點(diǎn)之間,高斯過(guò)程的協(xié)方差。對(duì)此能夠使用核里面的call方法。這個(gè)方法能夠用來(lái)計(jì)算一個(gè)二維數(shù)組** X 內(nèi),所有數(shù)據(jù)點(diǎn)對(duì)的"自協(xié)方差",或計(jì)算二維數(shù)組 X 與二位數(shù)組 Y 中,其各自數(shù)據(jù)點(diǎn)的組合的"交叉協(xié)方差"。下面的等式對(duì)所有核 k 內(nèi)恒為真(除了白核)k(X) == K(X, Y=X)**。
如果只需要使用"自協(xié)方差"的對(duì)角線(xiàn),那么可以使用核里面的** diag() 函數(shù),這個(gè)函數(shù)比起直接調(diào)用 call 的話(huà)計(jì)算效率要更高一些:np.diag(k(X, X)) == k.diag(X)**。
核通過(guò)超參數(shù)向量** θ 來(lái)實(shí)現(xiàn)參數(shù)化。這些超參數(shù)控制著實(shí)例的長(zhǎng)度尺度,或核的周期性(下方有提到)。所有的核都支持計(jì)算其核相對(duì)于 θ 的自協(xié)方差的分析梯度,只需要在 call 方法里設(shè)置 eval_gradient=True **即可。
梯度在高斯過(guò)程(回歸器與分類(lèi)器均有)中,計(jì)算對(duì)數(shù)邊際似然的梯度中使用到,然后再反過(guò)來(lái)使用它來(lái)決定** θ 的值,即通過(guò)梯度上升來(lái)最大化對(duì)數(shù)邊際似然來(lái)得到。對(duì)于每個(gè)超參數(shù)而言,在創(chuàng)建核的實(shí)例時(shí),他們的初始值和邊界都需要被指定。而這時(shí)候的 θ 值能夠通過(guò)對(duì)核對(duì)象設(shè)置 theta 參數(shù)來(lái)設(shè)置。然后超參數(shù)的邊界則是通過(guò)核的 bounds 參數(shù)來(lái)設(shè)置。不過(guò)要注意的是,這兩個(gè)屬性(theta** 和 bounds)在更適合基于梯度的優(yōu)化時(shí),他們返回的值則是內(nèi)部的對(duì)數(shù)轉(zhuǎn)換值。每個(gè)超參數(shù)的指定值都會(huì)被存儲(chǔ)到各自對(duì)應(yīng)的核實(shí)例里的參數(shù)。不過(guò)使用名詞為** "x" **的超參數(shù)的核必須擁有參數(shù) self.x 和 self.x_bounds。
所有核類(lèi)的基本抽象類(lèi)都是 Kernel 類(lèi)。核內(nèi)有一個(gè)與** Estimator 類(lèi)似的實(shí)現(xiàn),它提供了這些方法, get_params() **, ** set_params() 和 clone() 。這允許通過(guò)類(lèi)似 管道(Pipeline) 或 網(wǎng)格搜索(GridSearch) 這些meta-估計(jì)器來(lái)設(shè)置核的值。但是由于核的嵌套結(jié)構(gòu)(通過(guò)應(yīng)用核運(yùn)算符,下方有說(shuō)明),核參數(shù)的名字也許會(huì)變的相對(duì)復(fù)雜一些。對(duì)于一般的二元核操作符,參數(shù)的左操作數(shù)的前綴是 k1__ ,而右操作數(shù)的前綴則是 k2__ 。一個(gè)額外的協(xié)方差函數(shù)是 clone_with_theta(theta) ,它返回一個(gè)參數(shù)為 theta **的克隆核。下面是一個(gè)代碼說(shuō)明的例子:
>>> from sklearn.gaussian_process.kernels import ConstantKernel, RBF
>>> kernel = ConstantKernel(constant_value=1.0, constant_value_bounds=(0.0, 10.0)) * RBF(length_scale=0.5, length_scale_bounds=(0.0, 10.0)) + RBF(length_scale=2.0, length_scale_bounds=(0.0, 10.0))
>>> for hyperparameter in kernel.hyperparameters: print(hyperparameter)
Hyperparameter(name='k1__k1__constant_value', value_type='numeric', bounds=array([[ 0., 10.]]), n_elements=1, fixed=False)
Hyperparameter(name='k1__k2__length_scale', value_type='numeric', bounds=array([[ 0., 10.]]), n_elements=1, fixed=False)
Hyperparameter(name='k2__length_scale', value_type='numeric', bounds=array([[ 0., 10.]]), n_elements=1, fixed=False)
>>> params = kernel.get_params()
>>> for key in sorted(params): print("%s : %s" % (key, params[key]))
k1 : 1**2 * RBF(length_scale=0.5)
k1__k1 : 1**2
k1__k1__constant_value : 1.0
k1__k1__constant_value_bounds : (0.0, 10.0)
k1__k2 : RBF(length_scale=0.5)
k1__k2__length_scale : 0.5
k1__k2__length_scale_bounds : (0.0, 10.0)
k2 : RBF(length_scale=2)
k2__length_scale : 2.0
k2__length_scale_bounds : (0.0, 10.0)
>>> print(kernel.theta) # Note: log-transformed
[ 0. -0.69314718 0.69314718]
>>> print(kernel.bounds) # Note: log-transformed
[[ -inf 2.30258509]
[ -inf 2.30258509]
[ -inf 2.30258509]]
所有的高斯過(guò)程的核都是能夠與 sklearn.metrics.pairwise
互操作的,反過(guò)來(lái)也一樣:Kernel
派生類(lèi)的實(shí)例能夠作為一個(gè)** 度量 通過(guò) sklearn.metrics.pairwise
傳遞到 pairwise_kernels(成對(duì)核)。更進(jìn)一步的,成對(duì)核的核函數(shù)在通過(guò)包裝器類(lèi) PairwiseKernel
后能夠作為一個(gè)GP(高斯過(guò)程)核來(lái)使用。不過(guò)要注意的是,超參數(shù)的梯度不是分析型的,而是數(shù)值型,并且這些核只支持各向同性距離。參數(shù) gamma **可以考慮看成是一項(xiàng)超參數(shù),并且它是能夠最優(yōu)的。其他的核參數(shù)在初始階段直接進(jìn)行設(shè)置,并且其值保持固定。
1.7.5.2. 基本的核##
ConstantKernel(常量核) 能夠作為乘積核(Product Kernel)的一部分,并且它可以對(duì)核內(nèi)的其他因子進(jìn)行縮放,而作為Sum 核 ,它可以修改高斯過(guò)程的均值。這個(gè)常量核依賴(lài)于** constant_value **這一參數(shù)。它的定義是:
白核 的一個(gè)主要用法是作為sum核的一部分,用來(lái)解釋噪聲分量。參數(shù)** noise_level **代表著估計(jì)過(guò)程中的噪聲等級(jí)。它的定義是:
1.7.5.3. 核運(yùn)算##
核運(yùn)算是獲取一個(gè)或兩個(gè)基本核,然后通過(guò)組合他們來(lái)獲得一個(gè)新的核。Sum
核需要兩個(gè)核,k1 和 k2 ,然后通過(guò)k_sum(X, Y) = k1(X, Y) + k2(X, Y)來(lái)組合他們。Product
核需要兩個(gè)核,**k1 和 k2 ,然后通過(guò) k_product(X, Y) = k1(X, Y) * k2(X, Y) 來(lái)組合他們。Exponentiation(指數(shù)) 核需要一個(gè)基本核和一個(gè)標(biāo)量參數(shù) exponent ,然后通過(guò) k_exp(X, Y) = k(X, Y) ^ exponent **來(lái)組合他們。
1.7.5.4. 徑向基函數(shù)(RBF)核##
RBF 核是一種固定核。它也以"平方指數(shù)"核這一名稱(chēng)被人所知。這個(gè)核通過(guò)長(zhǎng)度尺度** l > 0 來(lái)實(shí)現(xiàn)參數(shù)化,其中這個(gè)參數(shù)能夠是一個(gè)標(biāo)量(核的各項(xiàng)同性的變體)或是一個(gè)跟輸入 x **有著相同維數(shù)的向量(核的各向異性的變體)。
這個(gè)核是無(wú)限可微的,這意味著如果RBF核作為高斯過(guò)程的協(xié)方差函數(shù)的話(huà),則它擁有所有階的均方導(dǎo)數(shù),所以它的曲線(xiàn)非常平滑。從RBF核中產(chǎn)生的高斯過(guò)程的先驗(yàn)和后驗(yàn)如下圖所示:
1.7.5.5. Matérn核##
Matern 是一種固定核,并且是 RBF
核的一種概況。它有著一個(gè)額外的參數(shù)** ν ,這個(gè)參數(shù)用來(lái)控制產(chǎn)生函數(shù)的平滑度。它通過(guò)長(zhǎng)度尺度這一參數(shù) l > 0 來(lái)實(shí)現(xiàn)參數(shù)化,這個(gè)參數(shù)能夠是一個(gè)標(biāo)量(核的各種各項(xiàng)同性的變體)或是一個(gè)跟輸入 x **有相同維數(shù)的向量(核的各種各項(xiàng)異性的變體)。
當(dāng)** ν -> ∞ 時(shí),Matérn核則收斂成RBF核。當(dāng) ν = 1/2 **時(shí),Matérn核則變得跟絕對(duì)指數(shù)核一樣,即:
尤其是** ν = 3/2 **時(shí),
或** ν = 5/2 **
這些在學(xué)習(xí)函數(shù)中都是挺受歡迎的選項(xiàng),雖說(shuō)這些不是無(wú)限可微的(跟RBF核的定義一樣),但是也至少出現(xiàn)一次微分(ν = 3/2)或者是兩次微分(ν = 5/2)。通過(guò)** ν **控制學(xué)習(xí)函數(shù)的平滑性的這一靈活性,使得其能夠適應(yīng)真實(shí)的底層函數(shù)。從Matérn核中產(chǎn)生的高斯過(guò)程的先驗(yàn)和后驗(yàn)如下圖所示:
[RW2006]中的第84頁(yè)有著關(guān)于Matérn內(nèi)核的不同變體的進(jìn)一步細(xì)節(jié)。
1.7.5.6 二次有理核##
RationalQuadratic(二次有理核) 可以看成是RBF 核與各種具有不同特性的長(zhǎng)度尺度參數(shù)的比例混合(無(wú)限和)。它通過(guò)長(zhǎng)度尺度參數(shù)** l > 0 和比例混合參數(shù) α > 0 來(lái)參數(shù)化的。但是目前僅支持 l **是標(biāo)量的各項(xiàng)同性變量。
從二次有理核中產(chǎn)生的高斯過(guò)程的先驗(yàn)和后驗(yàn)如下圖所示:
1.7.5.1. 指數(shù)正弦平方核##
ExpSineSquared(指數(shù)正弦平方核) 允許模型化周期函數(shù)。它通過(guò)長(zhǎng)度尺度參數(shù)** l > 0 與周期參數(shù) p > 0 來(lái)參數(shù)化。目前僅支持 l **是標(biāo)量的各項(xiàng)同性變量。
從指數(shù)正弦平方核中產(chǎn)生的高斯過(guò)程的先驗(yàn)和后驗(yàn)如下圖所示:
1.7.5.8. 點(diǎn)乘核##
DotProduct(點(diǎn)乘核) 是一種非固定核,通過(guò)設(shè)置先驗(yàn)** N(0,1) 于系數(shù) x_d(d = 1, ..., D) 和設(shè)置先驗(yàn) N(0, σ_0 ^ 2) 與偏值上的一個(gè)線(xiàn)性回歸來(lái)獲得。點(diǎn)乘核 在坐標(biāo)上對(duì)于原點(diǎn)的旋轉(zhuǎn)是不變的,但是轉(zhuǎn)換就不是了。它通過(guò)參數(shù) σ_0 ^ 2 來(lái)參數(shù)化。當(dāng) σ_0 ^ 2 = 0 時(shí),這個(gè)核可以稱(chēng)之為齊次線(xiàn)性核,反之當(dāng) σ_0 ^ 2 不等于0 **時(shí)則是非齊次線(xiàn)性核。
點(diǎn)乘核 一般跟取冪組合。下面是在指數(shù)為2時(shí)的一個(gè)例子:
1.7.5.9. 參考文獻(xiàn)##
- [RW2006] Gaussian Processes for Machine Learning, Carl Eduard Rasmussen and Christopher K.I. Williams, MIT Press 2006. Link to an official complete PDF version of the book here .
1.7.6. 傳統(tǒng)高斯過(guò)程#
在這一節(jié),下面所描述的高斯過(guò)程的實(shí)現(xiàn)是scikit-learn 0.16.1的版本。但是要注意的是這個(gè)實(shí)現(xiàn)已經(jīng)被棄用,并且會(huì)在0.18版本里去除。
1.7.6.1. 一個(gè)介紹性的回歸例子##
假設(shè)我們想要一個(gè)** g(x) = xsin(x) **這樣的替代函數(shù)。為了做到這一點(diǎn),這個(gè)函數(shù)將會(huì)在實(shí)驗(yàn)設(shè)計(jì)上進(jìn)行評(píng)估。然后我們定義出一個(gè)高斯處理模型,再使用一些額外的參數(shù)來(lái)指定它是一個(gè)回歸還是一個(gè)相關(guān)模型,然后再使用它來(lái)擬合數(shù)據(jù)。根據(jù)實(shí)例化過(guò)程中提供的參數(shù)數(shù)量,在擬合過(guò)程中可以選擇使用參數(shù)的最大似然估計(jì)或者是參數(shù)本身。
>>> import numpy as np
>>> from sklearn import gaussian_process
>>> def f(x):
... return x * np.sin(x)
>>> X = np.atleast_2d([1., 3., 5., 6., 7., 8.]).T
>>> y = f(X).ravel()
>>> x = np.atleast_2d(np.linspace(0, 10, 1000)).T
>>> gp = gaussian_process.GaussianProcess(theta0=1e-2, thetaL=1e-4, thetaU=1e-1)
>>> gp.fit(X, y)
GaussianProcess(beta0=None, corr=<function squared_exponential at 0x...>,
normalize=True, nugget=array(2.22...-15),
optimizer='fmin_cobyla', random_start=1, random_state=...
regr=<function constant at 0x...>, storage_mode='full',
theta0=array([[ 0.01]]), thetaL=array([[ 0.0001]]),
thetaU=array([[ 0.1]]), verbose=False)
>>> y_pred, sigma2_pred = gp.predict(x, eval_MSE=True)
1.7.6.2. 擬合帶噪聲的數(shù)據(jù)##
當(dāng)要擬合的數(shù)據(jù)攜帶有噪聲時(shí),可以通過(guò)為每個(gè)點(diǎn)額外設(shè)置一個(gè)噪聲方差的方式來(lái)使用高斯過(guò)程。GaussianProcess 帶有一個(gè)叫** nugget **的參數(shù),它被用來(lái)添加進(jìn)由訓(xùn)練點(diǎn)組成的相關(guān)矩陣中的對(duì)角線(xiàn)內(nèi):其實(shí)就是一種 Tikhonov 正則化。但是在平方指數(shù)相關(guān)函數(shù)上,使用這種正則化方式等價(jià)于在輸入中指定一個(gè)分?jǐn)?shù)的方差(也就是下圖這種形式了):
當(dāng) nugget 和 ** corr **這兩個(gè)參數(shù)被設(shè)置為合適的值時(shí),高斯過(guò)程就能夠從帶噪聲的數(shù)據(jù)上穩(wěn)健地提取出一個(gè)潛在的可用函數(shù)。
1.7.6.3. 數(shù)學(xué)公式##
1.7.6.3.1. 原始假設(shè)###
假設(shè)有人想要對(duì)計(jì)算機(jī)的實(shí)驗(yàn)輸出進(jìn)行建模,然后其定義了一個(gè)公式:
GPML(Gaussian Processes for Machine Learning)則從這假設(shè)開(kāi)始,
假設(shè)這個(gè)函數(shù)是高斯過(guò)程** G **的一個(gè)條件樣本路徑,所以其形式可變?yōu)椋?/p>
其中** f(X)^T·β ** 是一個(gè)線(xiàn)性模型,然后** Z(X) **是一個(gè)帶有完全靜態(tài)協(xié)方差的一個(gè)零均值高斯過(guò)程:
其中** σ^2 為方差,R **為相關(guān)函數(shù),并且這個(gè)函數(shù)只依賴(lài)每個(gè)樣本或特征之間的絕對(duì)相對(duì)距離。
對(duì)這個(gè)基本公式來(lái)說(shuō),GPML只不過(guò)是一個(gè)基本最小二乘線(xiàn)性回歸問(wèn)題的一個(gè)擴(kuò)展:
除了我們通過(guò)相關(guān)函數(shù)來(lái)額外假設(shè)樣本之間的空間一致性外,是生死啊哈那個(gè),平臺(tái)的最小二乘法假設(shè)了模型** R(|X - X|) **在 ** X = X
的情況下結(jié)果為1,否則為0:
這種模型被稱(chēng)為 dirac 相關(guān)模型,不過(guò)有時(shí)也被稱(chēng)為 kriging 文獻(xiàn)中所涉及的 nugget **相關(guān)模型。
1.7.6.3.2 最優(yōu)線(xiàn)性無(wú)偏預(yù)測(cè)(BLUP)###
現(xiàn)在我們從觀測(cè)結(jié)果的樣本路徑** g **來(lái)推導(dǎo)出其最優(yōu)線(xiàn)性無(wú)偏預(yù)測(cè)。
這種預(yù)測(cè)是通過(guò)這些屬性所派生出來(lái)的:
-
線(xiàn)性(或觀察結(jié)果的線(xiàn)性組合)
- 是無(wú)偏的(即無(wú)偏值bias)
-
在極值(在均方誤差均值上)
所以這個(gè)預(yù)測(cè)的最佳權(quán)重向量 a(X) 是下式的解:
然后再用拉格朗日來(lái)重寫(xiě)這個(gè)公式來(lái)解出最優(yōu)值,然后結(jié)果應(yīng)該就是我們所預(yù)測(cè)的閉合解 -- 詳細(xì)的證明過(guò)程在下面給出:
所以最后BLUP的顯示形式為帶均值的高斯隨機(jī)變量:
以及它的方差:
要說(shuō)明的有:
- 相關(guān)矩陣的項(xiàng)(** Ri·j )是通過(guò)關(guān)于其自相關(guān)函數(shù)和它的內(nèi)置參數(shù) θ **定義的:
-
預(yù)測(cè)點(diǎn)與DOE點(diǎn)之間的互相關(guān)向量(** ri **):
- 回歸矩陣(** Fi·j )(如果 f **為多項(xiàng)式偏值的話(huà),這個(gè)矩陣就為Vandermonde矩陣)
- 泛化的最小二乘回歸權(quán)重(β):
-
向量
不過(guò)要注意的是高斯過(guò)程的預(yù)測(cè)器做出的概率估計(jì)這一操作過(guò)程是一個(gè)全分析,且大多過(guò)程都依賴(lài)于基本線(xiàn)性運(yùn)算。更準(zhǔn)確地說(shuō),均值預(yù)測(cè)是兩個(gè)簡(jiǎn)單線(xiàn)性的組合(點(diǎn)乘),然后其方差需要兩個(gè)逆矩陣,但是只有在使用Cholesky的分解算法時(shí),相關(guān)矩陣才能夠被分解。
1.7.6.3.3. 經(jīng)驗(yàn)性最優(yōu)線(xiàn)性無(wú)偏預(yù)測(cè)(EBLUP)###
現(xiàn)在,我們從上述假設(shè)中知道了自相關(guān)和回歸模型。但是事實(shí)上,我們并不總是能夠提前知道這些的,因此需要一個(gè)方法來(lái)根據(jù)模型能否做出積極的經(jīng)驗(yàn)判斷來(lái)選擇模型。
若需要做到這點(diǎn)則需要涉及到BLUP的一些剩余的未知參數(shù)了。所以為了做到這一點(diǎn),一個(gè)結(jié)合了觀察結(jié)果和一些推斷理論的方法出現(xiàn)了。這個(gè)方法的目前實(shí)現(xiàn)是基于DACE的Matlab工具箱中的最大似然估計(jì) -- 可以查看DACE手冊(cè)中有關(guān)這一公式的說(shuō)明。然后在其自相關(guān)參數(shù)上的求最大似然估計(jì)就相當(dāng)于一個(gè)求全局最優(yōu)值問(wèn)題,然后這個(gè)全局最優(yōu)值是通過(guò) scipy.optimize 的 fmin_cobyla 優(yōu)化函數(shù)來(lái)求解的。但是在面對(duì)各向異性問(wèn)題時(shí),這可以使用Welch的分量?jī)?yōu)化算法,詳細(xì)情況可以查看下方的參考
1.7.6.4. 相關(guān)模型##
一般的相關(guān)模型都可以跟一些有名的SVM核互相匹配,那是因?yàn)檫@些模型大多數(shù)都是基于等式所定義的。并且他們也必須是固定且滿(mǎn)足Mercer條件。不過(guò)要注意的是,相關(guān)模型的置信選擇應(yīng)該是從觀察結(jié)果的原始實(shí)驗(yàn)中的已知條件所做出的。例如:
- 如果原始實(shí)驗(yàn)是無(wú)限可微的(平滑),那么就應(yīng)該使用平方指數(shù)的相關(guān)模型
- 如果不是無(wú)限可微的,那就一個(gè)使用指數(shù)相關(guān)模型。
- 還有需要注意的是,這里還有一種相關(guān)模型是取度的可導(dǎo)性作為輸入,這種模型稱(chēng)為Matern相關(guān)模型,但是在此處并沒(méi)有對(duì)其進(jìn)行實(shí)現(xiàn)(待做)。
如果想要關(guān)于這些的更詳細(xì)的討論,可以查看引用中由Rasmussen & Williams所著的書(shū)
1.7.6.5. 回歸模型##
一般線(xiàn)性回歸模型涉及到零(常數(shù)),一階和二階多項(xiàng)式。但是有一種是通過(guò)輸入他的Python函數(shù)形式,然后輸入特征X,結(jié)果再返回一個(gè)包含函數(shù)集的向量。不過(guò)這種方法的限制是,函數(shù)的數(shù)量不能超過(guò)結(jié)果值的數(shù)量,因此這種潛在的回歸是不確定的。
1.7.6.6. 實(shí)現(xiàn)細(xì)節(jié)##
這個(gè)類(lèi)的實(shí)現(xiàn)是基于DACE Matlab工具箱而成的:
引用####
- DACE, A Matlab Kriging Toolbox S Lophaven, HB Nielsen, J Sondergaard 2002,
- W.J. Welch, R.J. Buck, J. Sacks, H.P. Wynn, T.J. Mitchell, and M.D. Morris (1992). Screening, predicting, and computer experiments. Technometrics, 34(1) 15–25.
(在嘗試翻譯這篇文檔的時(shí)候難免會(huì)因?yàn)楦鞣N問(wèn)題而出現(xiàn)錯(cuò)翻,如果發(fā)現(xiàn)的話(huà),煩請(qǐng)指出,謝謝> <)