原文章為scikit-learn中"用戶指南"-->"監(jiān)督學(xué)習(xí)的第七節(jié):Gaussian Processes"######
高斯過程(GP)是一種被設(shè)計來解決** 回歸 和 概率分類 **的通用監(jiān)督學(xué)習(xí)方法取具。
高斯過程有以下的優(yōu)點:
- 可以預(yù)測插值(至少對常規(guī)核而言)
- 預(yù)測是概率的(高斯分布的)結(jié)果,因此可以根據(jù)置信區(qū)間的計算以決定是否要在一些感興趣的區(qū)域重新進行擬合(在線擬合停团,自適應(yīng)擬合)阱穗。
- 可以指定不同的 核 望拖。默認是提供了一個普通核无拗,不過也可以根據(jù)自己需求來指定自定義的核笼呆。
同樣的熊响,其缺點有:
- 它是非稀疏的。即它會使用所有樣本及其特征信息來進行預(yù)測诗赌。
- 在高維空間下會失去效率(當特征數(shù)量超過3汗茄、40左右)。
1.7.1. 高斯過程回歸(GPR)#
GaussianProcessRegressor 類實現(xiàn)了高斯過程的回歸铭若。所以要使用它前需要指定先驗洪碳。先驗均值被預(yù)設(shè)值為全為0的常數(shù)(當** normalize=False 時)或是訓(xùn)練集的均值(當 normalize=True )递览。先驗的協(xié)方差是通過核對象來指定的。而核的超參數(shù)則是在擬合通過最大對數(shù)邊際似然(LML)的GPR過程中瞳腌,通過傳入 optimizer 來進行調(diào)優(yōu)绞铃。因為LML可能擁有多個局部最優(yōu)值,所以可以通過設(shè)置 n_restarts_optimizer 來反復(fù)進行此過程以獲得"最優(yōu)值"嫂侍。這個過程的第一次運行通常是先初始化核的超參數(shù)儿捧。然后再從可能的值域中隨機的對超參數(shù)賦值。如果要讓初始化的超參數(shù)保持不變吵冒,那么只需要傳入 None **作為它的優(yōu)化器就可以了纯命。
可以通過參數(shù)** alpha **指定Target(目標結(jié)果)的噪聲等級,可以當做一個全局標量 或 每個數(shù)據(jù)點的噪聲等級痹栖。因為設(shè)置一個中等的噪聲等級會被以Tikhonov正則化形式來實現(xiàn)亿汞,這一點有助于解決在擬合過程中出現(xiàn)的數(shù)值問題(即把它添加到核矩陣的對角線內(nèi))。另一種明確指定噪聲等級的可選的方法是:在核中包含一個白核組件揪阿,這樣就可以在數(shù)據(jù)集中估計出全局噪聲等級(可以看下面的例子)疗我。
本類的實現(xiàn)是基于[RW2006]的 2.1 算法。除了scikit-learn提供的標準API方法外南捂,高斯過程回歸(GPR):
- 允許在沒有先驗的情況下進行擬合(基于GP先驗)吴裤。
- 提供一個額外的方法** sample_y(X) **,這個方法可以評估從GPR(之前或之后)提取的樣本溺健。
- 提供** log_marginal_likelihood(theta) **方法麦牺,其可以作為一種在外部選擇超參數(shù)的方法,例如通過馬爾科夫鏈蒙特卡洛算法(MCMC)鞭缭。
1.7.2. GPR的一些例子#
1.7.2.1. 能估計噪聲等級的GPR
這個例子展示了帶有 WhiteKernel 的sum核GPR能夠估量數(shù)據(jù)的噪聲等級剖膳。下面LML的繪圖顯示了其存在有兩個局部最大值梢为。
這一張圖代表了一個帶有高度噪聲等級和大長度標量的模型吁朦,其解釋了噪聲對數(shù)據(jù)的影響程度。
第二張圖的模型有著一個較小的噪聲等級和小長度標量联四,展示了無噪聲函數(shù)的變化關(guān)系沦童。這一張圖有著對數(shù)據(jù)集的高度似然性仑濒;但是根據(jù)超參數(shù)的初始化值來看,在使用基于梯度的優(yōu)化方法可能會生成一個具有高噪聲的結(jié)果偷遗。正因為要避免出現(xiàn)這種情況墩瞳,所以才要使用多種不同的超參數(shù)初始化值來重新訓(xùn)練。
1.7.2.2. GPR與核嶺回歸的比較##
核嶺回歸(KRR)和GPR都是使用了內(nèi)置的"核技巧"來學(xué)習(xí)目標函數(shù)氏豌。KRR通過由各種核在原始空間里對應(yīng)的非線性函數(shù)所形成的空間里來學(xué)習(xí)線性函數(shù)矗烛。這個在核空間內(nèi)的線性函數(shù)是由基于帶有均方誤差損失的嶺回歸來得出的。GPR使用核來定義一個在目標函數(shù)上先驗分布的協(xié)方差并使用經(jīng)過訓(xùn)練的數(shù)據(jù)來定義似然函數(shù)〔t吃;谪惾~斯理論碌嘀,定義了一個在目標函數(shù)上的(高斯)后驗分布,并且使用它的平均值來作為預(yù)測結(jié)果歪架。
GPR與KRR的一個主要的不同點在于股冗,GPR能夠使用基于梯度上升的邊際似然函數(shù)來選擇核所需的超參數(shù),而KRR則需要對交叉驗證的損失函數(shù)(均分誤差損失函數(shù))執(zhí)行網(wǎng)格搜索才可以得出超參數(shù)和蚪。另一個區(qū)別點在于GPR是學(xué)習(xí)目標函數(shù)的生成性概率模型止状,
從而能為預(yù)測結(jié)果提供有意義的置信區(qū)間和后驗樣本;而KRR只能提供一個預(yù)測結(jié)果攒霹。
下面的圖表比較了這兩種方法在一個由帶有強噪聲正弦波分布的人工數(shù)據(jù)集上的學(xué)習(xí)結(jié)果怯疤。KRR和GPR的模型都是基于正弦平方核學(xué)習(xí)出的,這種核很適合用來學(xué)習(xí)具有周期性規(guī)律分布的數(shù)據(jù)催束。正弦平方核的超參數(shù)控制著平滑度(也就是長度標量)和核的周期性集峦。除此之外,當前數(shù)據(jù)集的噪聲等級還是通過添加額外的白核組件的GPR和經(jīng)過正則化參數(shù)** α **的KRR得出的抠刺。
這個圖表展示了兩個方法各自對目標函數(shù)的合理模型塔淤。GPR得出的模型正確地得出這個周期函數(shù)大致為** 2 * π (6.28),而KRR則得出了雙倍的結(jié)果 4 * π 速妖。除此之外高蜂,GPR為預(yù)測值提供了一個合理的置信區(qū)間,雖然這個區(qū)間不能用到KKR上罕容。這兩個方法的另一種主要區(qū)別是預(yù)測和擬合的時間:理論上KRR的擬合速度是很快的备恤,因為為超參數(shù)調(diào)優(yōu)的網(wǎng)格搜索速度與超參數(shù)的數(shù)量成正比(不過同樣也會受到維度災(zāi)難**的影響)。GPR中優(yōu)化參數(shù)所使用的基于梯度的優(yōu)化方法并不會受到指數(shù)縮放的影響锦秒,而在這里例子中露泊,因為超參數(shù)的空間是三維的,所以處理的速度非持蓿快。然后預(yù)測所需的時間也是類似的梧喷,但是如果要使GPR產(chǎn)生預(yù)測分布的方差的話砌左,其所需的時間要比只預(yù)測出平均值要更久。
1.7.2.3. GPR與莫納羅亞山的二氧化碳數(shù)據(jù)##
這個例子是基于[RW2006]的5.4.3一節(jié)铺敌。它描繪了一個使用了復(fù)雜內(nèi)核工程和使用梯度上升為對數(shù)邊際似然優(yōu)化超參數(shù)汇歹。這個數(shù)據(jù)集由1958年至1997年,夏威夷的莫納羅亞山上每月平均大氣CO2濃度(百萬分之一(ppmv))的觀察數(shù)據(jù)組成偿凭。訓(xùn)練出的模型目標是為了獲取CO2濃度跟時間** t **的關(guān)系函數(shù)产弹。
這個核由一些術(shù)語組成,這些術(shù)語負責(zé)解釋信號的不同屬性:
- 一個長期且平滑上升的趨勢將由RBF核來進行解釋。擁有大長度標量的RBF核會強制該組件變得平滑痰哨。而上升的趨勢則是留給GP自由選擇是否強制需要胶果。特定長度標量和振幅屬于該核的自由超參數(shù)。
- 季節(jié)性的則由一個周期性的正弦平方核進行解釋斤斧,周期為一年早抠。長度標量也是一個周期性組件,控制著模型的平滑度撬讽,這是一項自由參數(shù)蕊连。為了允許遠離精確周期性,采用具有RBF內(nèi)核的乘積游昼。這個RBF核內(nèi)的長度標量控制著遠離時間甘苍,并且它也是一個自由參數(shù)。
- 較小的不規(guī)則中期則由有理數(shù)核組件(擁有長度標量和alpha兩個參數(shù)烘豌,后者決定長度標量的擴散性)來進行解釋载庭。根據(jù)[RW2006],這些不規(guī)則的項用有理數(shù)核來解釋比RBF核組件更好扇谣,因為前者可以容納幾個長度標量昧捷。
- 由RBF核貢獻的"噪聲"項,則是應(yīng)該解釋相關(guān)的噪聲分量罐寨,例如局部天氣現(xiàn)象和白核對白噪聲的貢獻靡挥。它的相對幅度和RBF的長度標量也是自由參數(shù)。
在減去目標的平均值之后鸯绿,最大化對數(shù)邊際似然函數(shù)使得產(chǎn)生出一個帶有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)
因此大部分目標信號(34.4ppm)的趨勢可以通過成一個長期上升的趨勢(長度標量為41.8年)進行解釋跋破。這個周期組件擁有一個3.27ppm的振幅,衰退時間為180年且長度標量為1.44瓶蝴。較長的衰退時間表示我們擁有一個局部非常接近周期性季節(jié)的組件毒返。相關(guān)的噪聲擁有為0.197ppm的振幅,長度標量為0.138年舷手,而白噪音貢獻為0.197ppm拧簸。因此全局 噪聲水平很低,代表著數(shù)據(jù)能夠很好地通過模型來解釋男窟。下面的圖表還展示了該模型在2015年左右所做出的一個非常有信心的預(yù)測盆赤。
1.7.3. 高斯處理分類(GPC)#
GaussianProcessClassifier
實現(xiàn)了用于分類的高斯過程(GP),更具體來說是用在概率分類歉眷,使用類概率的形式來作為預(yù)測結(jié)果牺六。GPC在潛在函數(shù)** f 上使用了GP先驗,然后通過壓縮這個鏈接函數(shù)去獲得概率性的分類汗捡。潛在函數(shù) f 也被稱為損害函數(shù)淑际,其值是不會被觀察的,并且與自身沒有關(guān)聯(lián)。這樣的目的是為了能夠方便地格式化模型春缕,并且在預(yù)測中也去除了 f **(集成并提取出來)盗胀。GPC實現(xiàn)了logistic鏈接函數(shù),雖然其積分不能被分析與計算淡溯,但是對于二元分類問題來說卻很容易獲得其近似分類读整。
與在上面章節(jié)的回歸設(shè)置里不同,其潛在函數(shù)** f **的后驗對GP先驗來說不是高斯的咱娶,因為高斯似然無法適用于離散型的標簽米间。所以正好相反,一個非高斯似然是用到了logistic鏈接函數(shù)(logit)的膘侮。GPC使用基于拉普拉斯逼近的高斯來逼近其非高斯后驗屈糊。如果想要知道更多的細節(jié)的話可以查看[RW2006]的第三章。
GP的先驗均值在默認情況下被初始化為0琼了。然后先驗的協(xié)方差可以通過核對象來賦值逻锐。核的超參數(shù)會在GPR擬合最大化LML的過程中,通過傳遞** optimizer 參數(shù)來調(diào)優(yōu)雕薪。不過LML可能會有多個局部最優(yōu)值昧诱,所以需要設(shè)置 n_restarts_optimizer 參數(shù)來反復(fù)執(zhí)行以獲得一個穩(wěn)定的最優(yōu)值。在第一次運行的過程中通常會從初始化核的超參數(shù)值來開始所袁;然后則從可選的值域里隨機挑出超參數(shù)的值盏档。如果要保持初始化的超參數(shù)的值,可以往參數(shù) optimizer 傳入 None **燥爷。
GaussianProcessClassifier
通過執(zhí)行基于一對多或一對一的訓(xùn)練和預(yù)測來支持多類分類蜈亩。在一對多的情況,一元GPC會對每個類進行訓(xùn)練前翎,將每一類區(qū)分開來稚配。在一對一的情況下,一元GPC會對每一對類進行訓(xùn)練港华,將其分成兩類道川。然后再講這些單個預(yù)測結(jié)果組合成多元分類。要了解更多的細節(jié)的話立宜,可以查看多元分類一節(jié)冒萄。
在GPC里,一對一或許有著更廉價的計算能力赘理,因為它只需要解決數(shù)據(jù)集中子集的大多數(shù)問題(預(yù)測出子集的大部分類)宦言,而不是解決整個數(shù)據(jù)集中的較少部分問題(預(yù)測出整個數(shù)據(jù)集的少部分類)扇单。因為GPC把數(shù)據(jù)集以立方的方式縮放商模,這樣也許會有著更快的處理速度。但是,要注意的是一對一并不支持預(yù)測概率估計施流,而是只支持平面預(yù)測响疚。更進一步的,GaussianProcessClassifier
(目前)還沒有在內(nèi)部實現(xiàn)一個多類的拉普拉斯近似算法瞪醋,而是使用了上面討論的那種方法在內(nèi)部來解決多元分類任務(wù)忿晕,其結(jié)合了一對多和一對一這兩種方式。
1.7.4. GPC的一些例子#
1.7.4.1. GPC的概率預(yù)測##
這個例子描繪了GPC在RBF有不同的超參數(shù)選擇下進行的概率預(yù)測银受。第一個圖表展示了GPC在任意超參數(shù)下的概率預(yù)測践盼,并且其超參數(shù)對應(yīng)著最大邊際似然(LML)。
雖然由最優(yōu)LML選出的超參數(shù)有著較大的LML宾巍,因為他們根據(jù)測試數(shù)據(jù)的對數(shù)誤差會有略差的表現(xiàn)咕幻。這個圖表顯示,因為在類邊界有一個陡峭的類概率變化(這一點是好的)顶霞,但是預(yù)測出的概率卻總是接近0.5(這一點并不好)肄程。這種不好的影響的成因是GPC內(nèi)部所使用的拉普拉斯近似算法。
第二個圖表展示了在不同核參數(shù)的情況下选浑,對數(shù)邊際似然的情況蓝厌。使用黑點來顯示在第一張圖里所使用超參數(shù)組合。
1.7.4.2. GPC在異或數(shù)據(jù)集##
這個例子展示了GPC對異或數(shù)據(jù)集的說明情況古徒。通過固定各向同性核(RBF)和固定核(點乘)拓提。在這個特定的數(shù)據(jù)集上,點乘核能夠獲得更好的結(jié)果描函,因為類邊界是線性的崎苗,并且跟坐標軸重合。但是這個示例中舀寓,像 RBF 這種固定核卻能夠得到更好的效果胆数。
1.7.4.3. GPC在鳶尾花數(shù)據(jù)集##
這個示例展示了GPC在分別在各向同性和各向異性核的情況下,對二維版本的鳶尾花數(shù)據(jù)集上的概率估計互墓。這個說明展示了GPC適用于非二元分類的情況(多元分類)必尼。各向異性RBF核通過向兩個特征維度分配不同的長度尺度來獲得略高的對數(shù)邊際似然。
1.7.5. 高斯過程的核#
核(在高斯過程的上下文里也被稱為協(xié)方差函數(shù))在高斯過程中是一個關(guān)鍵的部分篡撵,其決定了高斯過程先驗和后驗的形狀判莉。通過相似的數(shù)據(jù)點有著相似的目標值這一假設(shè),與兩個數(shù)據(jù)點之間的關(guān)系進行結(jié)合來定義出“相似度”育谬,并以此來對已學(xué)習(xí)函數(shù)的假設(shè)進行編碼券盅。兩種類型的核能夠通過這些來進行區(qū)分:固定核只依賴兩個數(shù)據(jù)點直接的距離,而不是他們的絕對值** k(xi, xj) = k(d(xi, xj)) **膛檀,從而在輸入空間中的翻譯不變锰镀;而非固定核相比于固定核娘侍,其也依賴于數(shù)據(jù)點的值。固定核能夠更進一步的被細分成各項同性核和各向異性核泳炉,其中各向異性核在輸入空間中的旋轉(zhuǎn)是不變的憾筏。如果想要了解更多細節(jié)的話,可以建議查看[RW2006]的第四節(jié)花鹅。
1.7.5.1.
核 的一個主要用法是計算數(shù)據(jù)點之間氧腰,高斯過程的協(xié)方差。對此能夠使用核里面的call方法刨肃。這個方法能夠用來計算一個二維數(shù)組** X 內(nèi)古拴,所有數(shù)據(jù)點對的"自協(xié)方差",或計算二維數(shù)組 X 與二位數(shù)組 Y 中真友,其各自數(shù)據(jù)點的組合的"交叉協(xié)方差"斤富。下面的等式對所有核 k 內(nèi)恒為真(除了白核)k(X) == K(X, Y=X)**。
如果只需要使用"自協(xié)方差"的對角線锻狗,那么可以使用核里面的** diag() 函數(shù)满力,這個函數(shù)比起直接調(diào)用 call 的話計算效率要更高一些:np.diag(k(X, X)) == k.diag(X)**。
核通過超參數(shù)向量** θ 來實現(xiàn)參數(shù)化轻纪。這些超參數(shù)控制著實例的長度尺度油额,或核的周期性(下方有提到)。所有的核都支持計算其核相對于 θ 的自協(xié)方差的分析梯度刻帚,只需要在 call 方法里設(shè)置 eval_gradient=True **即可潦嘶。
梯度在高斯過程(回歸器與分類器均有)中,計算對數(shù)邊際似然的梯度中使用到崇众,然后再反過來使用它來決定** θ 的值掂僵,即通過梯度上升來最大化對數(shù)邊際似然來得到。對于每個超參數(shù)而言顷歌,在創(chuàng)建核的實例時锰蓬,他們的初始值和邊界都需要被指定。而這時候的 θ 值能夠通過對核對象設(shè)置 theta 參數(shù)來設(shè)置眯漩。然后超參數(shù)的邊界則是通過核的 bounds 參數(shù)來設(shè)置芹扭。不過要注意的是,這兩個屬性(theta** 和 bounds)在更適合基于梯度的優(yōu)化時赦抖,他們返回的值則是內(nèi)部的對數(shù)轉(zhuǎn)換值舱卡。每個超參數(shù)的指定值都會被存儲到各自對應(yīng)的核實例里的參數(shù)。不過使用名詞為** "x" **的超參數(shù)的核必須擁有參數(shù) self.x 和 self.x_bounds队萤。
所有核類的基本抽象類都是 Kernel 類轮锥。核內(nèi)有一個與** Estimator 類似的實現(xiàn),它提供了這些方法要尔, get_params() **舍杜, ** set_params() 和 clone() 份汗。這允許通過類似 管道(Pipeline) 或 網(wǎng)格搜索(GridSearch) 這些meta-估計器來設(shè)置核的值。但是由于核的嵌套結(jié)構(gòu)(通過應(yīng)用核運算符蝴簇,下方有說明),核參數(shù)的名字也許會變的相對復(fù)雜一些匆帚。對于一般的二元核操作符熬词,參數(shù)的左操作數(shù)的前綴是 k1__ ,而右操作數(shù)的前綴則是 k2__ 吸重。一個額外的協(xié)方差函數(shù)是 clone_with_theta(theta) 互拾,它返回一個參數(shù)為 theta **的克隆核。下面是一個代碼說明的例子:
>>> 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]]
所有的高斯過程的核都是能夠與 sklearn.metrics.pairwise
互操作的嚎幸,反過來也一樣:Kernel
派生類的實例能夠作為一個** 度量 通過 sklearn.metrics.pairwise
傳遞到 pairwise_kernels(成對核)颜矿。更進一步的,成對核的核函數(shù)在通過包裝器類 PairwiseKernel
后能夠作為一個GP(高斯過程)核來使用嫉晶。不過要注意的是骑疆,超參數(shù)的梯度不是分析型的,而是數(shù)值型替废,并且這些核只支持各向同性距離箍铭。參數(shù) gamma **可以考慮看成是一項超參數(shù),并且它是能夠最優(yōu)的椎镣。其他的核參數(shù)在初始階段直接進行設(shè)置诈火,并且其值保持固定。
1.7.5.2. 基本的核##
ConstantKernel(常量核) 能夠作為乘積核(Product Kernel)的一部分状答,并且它可以對核內(nèi)的其他因子進行縮放冷守,而作為Sum 核 ,它可以修改高斯過程的均值惊科。這個常量核依賴于** constant_value **這一參數(shù)拍摇。它的定義是:
白核 的一個主要用法是作為sum核的一部分,用來解釋噪聲分量馆截。參數(shù)** noise_level **代表著估計過程中的噪聲等級授翻。它的定義是:
1.7.5.3. 核運算##
核運算是獲取一個或兩個基本核,然后通過組合他們來獲得一個新的核孙咪。Sum
核需要兩個核堪唐,k1 和 k2 ,然后通過k_sum(X, Y) = k1(X, Y) + k2(X, Y)來組合他們翎蹈。Product
核需要兩個核淮菠,**k1 和 k2 ,然后通過 k_product(X, Y) = k1(X, Y) * k2(X, Y) 來組合他們荤堪。Exponentiation(指數(shù)) 核需要一個基本核和一個標量參數(shù) exponent 合陵,然后通過 k_exp(X, Y) = k(X, Y) ^ exponent **來組合他們枢赔。
1.7.5.4. 徑向基函數(shù)(RBF)核##
RBF 核是一種固定核。它也以"平方指數(shù)"核這一名稱被人所知拥知。這個核通過長度尺度** l > 0 來實現(xiàn)參數(shù)化踏拜,其中這個參數(shù)能夠是一個標量(核的各項同性的變體)或是一個跟輸入 x **有著相同維數(shù)的向量(核的各向異性的變體)。
這個核是無限可微的低剔,這意味著如果RBF核作為高斯過程的協(xié)方差函數(shù)的話速梗,則它擁有所有階的均方導(dǎo)數(shù),所以它的曲線非常平滑襟齿。從RBF核中產(chǎn)生的高斯過程的先驗和后驗如下圖所示:
1.7.5.5. Matérn核##
Matern 是一種固定核姻锁,并且是 RBF
核的一種概況。它有著一個額外的參數(shù)** ν 猜欺,這個參數(shù)用來控制產(chǎn)生函數(shù)的平滑度位隶。它通過長度尺度這一參數(shù) l > 0 來實現(xiàn)參數(shù)化,這個參數(shù)能夠是一個標量(核的各種各項同性的變體)或是一個跟輸入 x **有相同維數(shù)的向量(核的各種各項異性的變體)开皿。
當** ν -> ∞ 時涧黄,Matérn核則收斂成RBF核。當 ν = 1/2 **時赋荆,Matérn核則變得跟絕對指數(shù)核一樣弓熏,即:
尤其是** ν = 3/2 **時,
或** ν = 5/2 **
這些在學(xué)習(xí)函數(shù)中都是挺受歡迎的選項糠睡,雖說這些不是無限可微的(跟RBF核的定義一樣)挽鞠,但是也至少出現(xiàn)一次微分(ν = 3/2)或者是兩次微分(ν = 5/2)。通過** ν **控制學(xué)習(xí)函數(shù)的平滑性的這一靈活性狈孔,使得其能夠適應(yīng)真實的底層函數(shù)信认。從Matérn核中產(chǎn)生的高斯過程的先驗和后驗如下圖所示:
[RW2006]中的第84頁有著關(guān)于Matérn內(nèi)核的不同變體的進一步細節(jié)。
1.7.5.6 二次有理核##
RationalQuadratic(二次有理核) 可以看成是RBF 核與各種具有不同特性的長度尺度參數(shù)的比例混合(無限和)均抽。它通過長度尺度參數(shù)** l > 0 和比例混合參數(shù) α > 0 來參數(shù)化的嫁赏。但是目前僅支持 l **是標量的各項同性變量。
從二次有理核中產(chǎn)生的高斯過程的先驗和后驗如下圖所示:
1.7.5.1. 指數(shù)正弦平方核##
ExpSineSquared(指數(shù)正弦平方核) 允許模型化周期函數(shù)油挥。它通過長度尺度參數(shù)** l > 0 與周期參數(shù) p > 0 來參數(shù)化潦蝇。目前僅支持 l **是標量的各項同性變量。
從指數(shù)正弦平方核中產(chǎn)生的高斯過程的先驗和后驗如下圖所示:
1.7.5.8. 點乘核##
DotProduct(點乘核) 是一種非固定核深寥,通過設(shè)置先驗** N(0,1) 于系數(shù) x_d(d = 1, ..., D) 和設(shè)置先驗 N(0, σ_0 ^ 2) 與偏值上的一個線性回歸來獲得攘乒。點乘核 在坐標上對于原點的旋轉(zhuǎn)是不變的,但是轉(zhuǎn)換就不是了惋鹅。它通過參數(shù) σ_0 ^ 2 來參數(shù)化则酝。當 σ_0 ^ 2 = 0 時,這個核可以稱之為齊次線性核闰集,反之當 σ_0 ^ 2 不等于0 **時則是非齊次線性核沽讹。
點乘核 一般跟取冪組合般卑。下面是在指數(shù)為2時的一個例子:
1.7.5.9. 參考文獻##
- [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)高斯過程#
在這一節(jié),下面所描述的高斯過程的實現(xiàn)是scikit-learn 0.16.1的版本爽雄。但是要注意的是這個實現(xiàn)已經(jīng)被棄用蝠检,并且會在0.18版本里去除。
1.7.6.1. 一個介紹性的回歸例子##
假設(shè)我們想要一個** g(x) = xsin(x) **這樣的替代函數(shù)挚瘟。為了做到這一點叹谁,這個函數(shù)將會在實驗設(shè)計上進行評估。然后我們定義出一個高斯處理模型刽沾,再使用一些額外的參數(shù)來指定它是一個回歸還是一個相關(guān)模型,然后再使用它來擬合數(shù)據(jù)排拷。根據(jù)實例化過程中提供的參數(shù)數(shù)量侧漓,在擬合過程中可以選擇使用參數(shù)的最大似然估計或者是參數(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ù)##
當要擬合的數(shù)據(jù)攜帶有噪聲時监氢,可以通過為每個點額外設(shè)置一個噪聲方差的方式來使用高斯過程布蔗。GaussianProcess 帶有一個叫** nugget **的參數(shù),它被用來添加進由訓(xùn)練點組成的相關(guān)矩陣中的對角線內(nèi):其實就是一種 Tikhonov 正則化浪腐。但是在平方指數(shù)相關(guān)函數(shù)上纵揍,使用這種正則化方式等價于在輸入中指定一個分數(shù)的方差(也就是下圖這種形式了):
當 nugget 和 ** corr **這兩個參數(shù)被設(shè)置為合適的值時,高斯過程就能夠從帶噪聲的數(shù)據(jù)上穩(wěn)健地提取出一個潛在的可用函數(shù)议街。
1.7.6.3. 數(shù)學(xué)公式##
1.7.6.3.1. 原始假設(shè)###
假設(shè)有人想要對計算機的實驗輸出進行建模泽谨,然后其定義了一個公式:
GPML(Gaussian Processes for Machine Learning)則從這假設(shè)開始,
假設(shè)這個函數(shù)是高斯過程** G **的一個條件樣本路徑特漩,所以其形式可變?yōu)椋?/p>
其中** f(X)^T·β ** 是一個線性模型吧雹,然后** Z(X) **是一個帶有完全靜態(tài)協(xié)方差的一個零均值高斯過程:
其中** σ^2 為方差,R **為相關(guān)函數(shù)涂身,并且這個函數(shù)只依賴每個樣本或特征之間的絕對相對距離雄卷。
對這個基本公式來說,GPML只不過是一個基本最小二乘線性回歸問題的一個擴展:
除了我們通過相關(guān)函數(shù)來額外假設(shè)樣本之間的空間一致性外蛤售,是生死啊哈那個丁鹉,平臺的最小二乘法假設(shè)了模型** R(|X - X|) **在 ** X = X
的情況下結(jié)果為1,否則為0:
這種模型被稱為 dirac 相關(guān)模型悴能,不過有時也被稱為 kriging 文獻中所涉及的 nugget **相關(guān)模型揣钦。
1.7.6.3.2 最優(yōu)線性無偏預(yù)測(BLUP)###
現(xiàn)在我們從觀測結(jié)果的樣本路徑** g **來推導(dǎo)出其最優(yōu)線性無偏預(yù)測。
這種預(yù)測是通過這些屬性所派生出來的:
-
線性(或觀察結(jié)果的線性組合)
- 是無偏的(即無偏值bias)
-
在極值(在均方誤差均值上)
所以這個預(yù)測的最佳權(quán)重向量 a(X) 是下式的解:
然后再用拉格朗日來重寫這個公式來解出最優(yōu)值漠酿,然后結(jié)果應(yīng)該就是我們所預(yù)測的閉合解 -- 詳細的證明過程在下面給出:
所以最后BLUP的顯示形式為帶均值的高斯隨機變量:
以及它的方差:
要說明的有:
- 相關(guān)矩陣的項(** Ri·j )是通過關(guān)于其自相關(guān)函數(shù)和它的內(nèi)置參數(shù) θ **定義的:
-
預(yù)測點與DOE點之間的互相關(guān)向量(** ri **):
- 回歸矩陣(** Fi·j )(如果 f **為多項式偏值的話拂盯,這個矩陣就為Vandermonde矩陣)
- 泛化的最小二乘回歸權(quán)重(β):
-
向量
不過要注意的是高斯過程的預(yù)測器做出的概率估計這一操作過程是一個全分析,且大多過程都依賴于基本線性運算记靡。更準確地說谈竿,均值預(yù)測是兩個簡單線性的組合(點乘)团驱,然后其方差需要兩個逆矩陣,但是只有在使用Cholesky的分解算法時空凸,相關(guān)矩陣才能夠被分解嚎花。
1.7.6.3.3. 經(jīng)驗性最優(yōu)線性無偏預(yù)測(EBLUP)###
現(xiàn)在,我們從上述假設(shè)中知道了自相關(guān)和回歸模型呀洲。但是事實上紊选,我們并不總是能夠提前知道這些的,因此需要一個方法來根據(jù)模型能否做出積極的經(jīng)驗判斷來選擇模型道逗。
若需要做到這點則需要涉及到BLUP的一些剩余的未知參數(shù)了兵罢。所以為了做到這一點,一個結(jié)合了觀察結(jié)果和一些推斷理論的方法出現(xiàn)了滓窍。這個方法的目前實現(xiàn)是基于DACE的Matlab工具箱中的最大似然估計 -- 可以查看DACE手冊中有關(guān)這一公式的說明卖词。然后在其自相關(guān)參數(shù)上的求最大似然估計就相當于一個求全局最優(yōu)值問題,然后這個全局最優(yōu)值是通過 scipy.optimize 的 fmin_cobyla 優(yōu)化函數(shù)來求解的吏夯。但是在面對各向異性問題時此蜈,這可以使用Welch的分量優(yōu)化算法,詳細情況可以查看下方的參考
1.7.6.4. 相關(guān)模型##
一般的相關(guān)模型都可以跟一些有名的SVM核互相匹配噪生,那是因為這些模型大多數(shù)都是基于等式所定義的裆赵。并且他們也必須是固定且滿足Mercer條件。不過要注意的是跺嗽,相關(guān)模型的置信選擇應(yīng)該是從觀察結(jié)果的原始實驗中的已知條件所做出的战授。例如:
- 如果原始實驗是無限可微的(平滑),那么就應(yīng)該使用平方指數(shù)的相關(guān)模型
- 如果不是無限可微的桨嫁,那就一個使用指數(shù)相關(guān)模型陈醒。
- 還有需要注意的是,這里還有一種相關(guān)模型是取度的可導(dǎo)性作為輸入瞧甩,這種模型稱為Matern相關(guān)模型钉跷,但是在此處并沒有對其進行實現(xiàn)(待做)。
如果想要關(guān)于這些的更詳細的討論肚逸,可以查看引用中由Rasmussen & Williams所著的書
1.7.6.5. 回歸模型##
一般線性回歸模型涉及到零(常數(shù))爷辙,一階和二階多項式。但是有一種是通過輸入他的Python函數(shù)形式朦促,然后輸入特征X膝晾,結(jié)果再返回一個包含函數(shù)集的向量。不過這種方法的限制是务冕,函數(shù)的數(shù)量不能超過結(jié)果值的數(shù)量血当,因此這種潛在的回歸是不確定的菠镇。
1.7.6.6. 實現(xiàn)細節(jié)##
這個類的實現(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.
(在嘗試翻譯這篇文檔的時候難免會因為各種問題而出現(xiàn)錯翻时甚,如果發(fā)現(xiàn)的話寥袭,煩請指出锨能,謝謝> <)