1. 程式人生 > >sklearn文件 — 1.7. 高斯過程

sklearn文件 — 1.7. 高斯過程

高斯過程(GP)是一種被設計來解決 迴歸 概率分類 的通用監督學習方法。

高斯過程有以下的優點:

  • 可以預測插值(至少對常規核而言)
  • 預測是概率的(高斯分佈的)結果,因此可以根據置信區間的計算以決定是否要在一些感興趣的區域重新進行擬合(線上擬合,自適應擬合)。
  • 可以指定不同的 。預設是提供了一個普通核,不過也可以根據自己需求來指定自定義的核。

同樣的,其缺點有:

  • 它是非稀疏的。即它會使用所有樣本及其特徵資訊來進行預測。
  • 在高維空間下會失去效率(當特徵數量超過3、40左右)。

1.7.1. 高斯過程迴歸(GPR)

GaussianProcessRegressor 類實現了高斯過程的迴歸。所以要使用它前需要指定先驗。先驗均值被預設值為全為0的常數(當 normalize=False

時)或是訓練集的均值(當 normalize=True )。先驗的協方差是通過物件來指定的。而核的超引數則是在擬合通過最大對數邊際似然(LML)的GPR過程中,通過傳入 optimizer來進行調優。因為LML可能擁有多個區域性最優值,所以可以通過設定 n_restarts_optimizer 來反覆進行此過程以獲得"最優值"。這個過程的第一次執行通常是先初始化核的超引數。然後再從可能的值域中隨機的對超引數賦值。如果要讓初始化的超引數保持不變,那麼只需要傳入 None作為它的優化器就可以了。

可以通過引數 alpha 指定Target(目標結果)的噪聲等級,可以當做一個全域性標量 或 每個資料點的噪聲等級。因為設定一箇中等的噪聲等級會被以Tikhonov正則化形式來實現,這一點有助於解決在擬合過程中出現的數值問題(即把它新增到核矩陣的對角線內)。另一種明確指定噪聲等級的可選的方法是:在核中包含一個白核元件,這樣就可以在資料集中估計出全域性噪聲等級(可以看下面的例子)。

本類的實現是基於[RW2006]的 2.1 演算法。除了scikit-learn提供的標準API方法外,高斯過程迴歸(GPR):

  • 允許在沒有先驗的情況下進行擬合(基於GP先驗)。
  • 提供一個額外的方法 sample_y(X) ,這個方法可以評估從GPR(之前或之後)提取的樣本。
  • 提供 log_marginal_likelihood(theta) 方法,其可以作為一種在外部選擇超引數的方法,例如通過馬爾科夫鏈蒙特卡洛演算法(MCMC)。

1.7.2. GPR的一些例子

1.7.2.1. 能估計噪聲等級的GPR

這個例子展示了帶有 WhiteKernel 的sum核GPR能夠估量資料的噪聲等級。下面LML的繪圖顯示了其存在有兩個區域性最大值。


這一張圖代表了一個帶有高度噪聲等級和大長度標量的模型,其解釋了噪聲對資料的影響程度。


第二張圖的模型有著一個較小的噪聲等級和小長度標量,展示了無噪聲函式的變化關係。這一張圖有著對資料集的高度似然性;但是根據超引數的初始化值來看,在使用基於梯度的優化方法可能會生成一個具有高噪聲的結果。正因為要避免出現這種情況,所以才要使用多種不同的超引數初始化值來重新訓練。


1.7.2.2. GPR與核嶺迴歸的比較

核嶺迴歸(KRR)和GPR都是使用了內建的"核技巧"來學習目標函式。KRR通過由各種核在原始空間裡對應的非線性函式所形成的空間裡來學習線性函式。這個在核空間內的線性函式是由基於帶有均方誤差損失的嶺迴歸來得出的。GPR使用核來定義一個在目標函式上先驗分佈的協方差並使用經過訓練的資料來定義似然函式。基於貝葉斯理論,定義了一個在目標函式上的(高斯)後驗分佈,並且使用它的平均值來作為預測結果。

GPR與KRR的一個主要的不同點在於,GPR能夠使用基於梯度上升的邊際似然函式來選擇核所需的超引數,而KRR則需要對交叉驗證的損失函式(均分誤差損失函式)執行網格搜尋才可以得出超引數。另一個區別點在於GPR是學習目標函式的生成性概率模型,
從而能為預測結果提供有意義的置信區間和後驗樣本;而KRR只能提供一個預測結果。

下面的圖表比較了這兩種方法在一個由帶有強噪聲正弦波分佈的人工資料集上的學習結果。KRR和GPR的模型都是基於正弦平方核學習出的,這種核很適合用來學習具有周期性規律分佈的資料。正弦平方核的超引數控制著平滑度(也就是長度標量)和核的週期性。除此之外,當前資料集的噪聲等級還是通過新增額外的白核元件的GPR和經過正則化引數 α的KRR得出的。


這個圖表展示了兩個方法各自對目標函式的合理模型。GPR得出的模型正確地得出這個周期函式大致為 2 * π (6.28),而KRR則得出了雙倍的結果 4 * π。除此之外,GPR為預測值提供了一個合理的置信區間,雖然這個區間不能用到KKR上。這兩個方法的另一種主要區別是預測和擬合的時間:理論上KRR的擬合速度是很快的,因為為超引數調優的網格搜尋速度與超引數的數量成正比(不過同樣也會受到維度災難的影響)。GPR中優化引數所使用的基於梯度的優化方法並不會受到指數縮放的影響,而在這裡例子中,因為超引數的空間是三維的,所以處理的速度非常快。然後預測所需的時間也是類似的,但是如果要使GPR產生預測分佈的方差的話,其所需的時間要比只預測出平均值要更久。

1.7.2.3. GPR與莫納羅亞山的二氧化碳資料

這個例子是基於[RW2006]的5.4.3一節。它描繪了一個使用了複雜核心工程和使用梯度上升為對數邊際似然優化超引數。這個資料集由1958年至1997年,夏威夷的莫納羅亞山上每月平均大氣CO2濃度(百萬分之一(ppmv))的觀察資料組成。訓練出的模型目標是為了獲取CO2濃度跟時間 t的關係函式。

這個核由一些術語組成,這些術語負責解釋訊號的不同屬性:

  • 一個長期且平滑上升的趨勢將由RBF核來進行解釋。擁有大長度標量的RBF核會強制該元件變得平滑。而上升的趨勢則是留給GP自由選擇是否強制需要。特定長度標量和振幅屬於該核的自由超引數。
  • 季節性的則由一個週期性的正弦平方核進行解釋,週期為一年。長度標量也是一個週期性元件,控制著模型的平滑度,這是一項自由引數。為了允許遠離精確週期性,採用具有RBF核心的乘積。這個RBF核內的長度標量控制著遠離時間,並且它也是一個自由引數。
  • 較小的不規則中期則由有理數核元件(擁有長度標量和alpha兩個引數,後者決定長度標量的擴散性)來進行解釋。根據[RW2006],這些不規則的項用有理數核來解釋比RBF核元件更好,因為前者可以容納幾個長度標量。
  • 由RBF核貢獻的"噪聲"項,則是應該解釋相關的噪聲分量,例如區域性天氣現象和白核對白噪聲的貢獻。它的相對幅度和RBF的長度標量也是自由引數。

在減去目標的平均值之後,最大化對數邊際似然函式使得產生出一個帶有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。較長的衰退時間表示我們擁有一個區域性非常接近週期性季節的元件。相關的噪聲擁有為0.197ppm的振幅,長度標量為0.138年,而白噪音貢獻為0.197ppm。因此全域性 噪聲水平很低,代表著資料能夠很好地通過模型來解釋。下面的圖表還展示了該模型在2015年左右所做出的一個非常有信心的預測。


1.7.3. 高斯處理分類(GPC)

GaussianProcessClassifier 實現了用於分類的高斯過程(GP),更具體來說是用在概率分類,使用類概率的形式來作為預測結果。GPC在潛在函式 f 上使用了GP先驗,然後通過壓縮這個連結函式去獲得概率性的分類。潛在函式 f 也被稱為損害函式,其值是不會被觀察的,並且與自身沒有關聯。這樣的目的是為了能夠方便地格式化模型,並且在預測中也去除了 f(整合並提取出來)。GPC實現了logistic連結函式,雖然其積分不能被分析與計算,但是對於二元分類問題來說卻很容易獲得其近似分類。

與在上面章節的迴歸設定裡不同,其潛在函式 f 的後驗對GP先驗來說不是高斯的,因為高斯似然無法適用於離散型的標籤。所以正好相反,一個非高斯似然是用到了logistic連結函式(logit)的。GPC使用基於拉普拉斯逼近的高斯來逼近其非高斯後驗。如果想要知道更多的細節的話可以檢視[RW2006]的第三章。

GP的先驗均值在預設情況下被初始化為0。然後先驗的協方差可以通過物件來賦值。核的超引數會在GPR擬合最大化LML的過程中,通過傳遞 optimizer引數來調優。不過LML可能會有多個區域性最優值,所以需要設定 n_restarts_optimizer 引數來反覆執行以獲得一個穩定的最優值。在第一次執行的過程中通常會從初始化核的超引數值來開始;然後則從可選的值域裡隨機挑出超引數的值。如果要保持初始化的超引數的值,可以往引數 optimizer傳入 None

GaussianProcessClassifier 通過執行基於一對多一對一的訓練和預測來支援多類分類。在一對多的情況,一元GPC會對每個類進行訓練,將每一類區分開來。在一對一的情況下,一元GPC會對每一對類進行訓練,將其分成兩類。然後再講這些單個預測結果組合成多元分類。要了解更多的細節的話,可以檢視多元分類一節。

在GPC裡,一對一或許有著更廉價的計算能力,因為它只需要解決資料集中子集的大多數問題(預測出子集的大部分類),而不是解決整個資料集中的較少部分問題(預測出整個資料集的少部分類)。因為GPC把資料集以立方的方式縮放,這樣也許會有著更快的處理速度。但是,要注意的是一對一並不支援預測概率估計,而是隻支援平面預測。更進一步的,GaussianProcessClassifier (目前)還沒有在內部實現一個多類的拉普拉斯近似演算法,而是使用了上面討論的那種方法在內部來解決多元分類任務,其結合了一對多一對一這兩種方式。

1.7.4. GPC的一些例子

1.7.4.1. GPC的概率預測

這個例子描繪了GPC在RBF有不同的超引數選擇下進行的概率預測。第一個圖表展示了GPC在任意超引數下的概率預測,並且其超引數對應著最大邊際似然(LML)。

雖然由最優LML選出的超引數有著較大的LML,因為他們根據測試資料的對數誤差會有略差的表現。這個圖表顯示,因為在類邊界有一個陡峭的類概率變化(這一點是好的),但是預測出的概率卻總是接近0.5(這一點並不好)。這種不好的影響的成因是GPC內部所使用的拉普拉斯近似演算法。

第二個圖表展示了在不同核引數的情況下,對數邊際似然的情況。使用黑點來顯示在第一張圖裡所使用超引數組合。



1.7.4.2. GPC在異或資料集

這個例子展示了GPC對異或資料集的說明情況。通過固定各向同性核(RBF)和固定核(點乘)。在這個特定的資料集上,點乘核能夠獲得更好的結果,因為類邊界是線性的,並且跟座標軸重合。但是這個示例中,像RBF 這種固定核卻能夠得到更好的效果。


1.7.4.3. GPC在鳶尾花資料集

這個示例展示了GPC在分別在各向同性和各向異性核的情況下,對二維版本的鳶尾花資料集上的概率估計。這個說明展示了GPC適用於非二元分類的情況(多元分類)。各向異性RBF核通過向兩個特徵維度分配不同的長度尺度來獲得略高的對數邊際似然。


1.7.5. 高斯過程的核

核(在高斯過程的上下文裡也被稱為協方差函式)在高斯過程中是一個關鍵的部分,其決定了高斯過程先驗和後驗的形狀。通過相似的資料點有著相似的目標值這一假設,與兩個資料點之間的關係進行結合來定義出“相似度”,並以此來對已學習函式的假設進行編碼。兩種型別的核能夠通過這些來進行區分:固定核只依賴兩個資料點直接的距離,而不是他們的絕對值 k(xi, xj) = k(d(xi, xj)),從而在輸入空間中的翻譯不變;而非固定核相比於固定核,其也依賴於資料點的值。固定核能夠更進一步的被細分成各項同性核和各向異性核,其中各向異性核在輸入空間中的旋轉是不變的。如果想要了解更多細節的話,可以建議檢視[RW2006]的第四節。

1.7.5.1.

的一個主要用法是計算資料點之間,高斯過程的協方差。對此能夠使用核裡面的call方法。這個方法能夠用來計算一個二維陣列 X 內,所有資料點對的"自協方差",或計算二維陣列 X 與二位陣列 Y 中,其各自資料點的組合的"交叉協方差"。下面的等式對所有核 k內恆為真(除了白核k(X) == K(X, Y=X)

如果只需要使用"自協方差"的對角線,那麼可以使用核裡面的 diag() 函式,這個函式比起直接呼叫 call 的話計算效率要更高一些:np.diag(k(X, X)) == k.diag(X)

核通過超引數向量 θ 來實現引數化。這些超引數控制著例項的長度尺度,或核的週期性(下方有提到)。所有的核都支援計算其核相對於 θ的自協方差的分析梯度,只需要在 call 方法裡設定 eval_gradient=True即可。

梯度在高斯過程(迴歸器與分類器均有)中,計算對數邊際似然的梯度中使用到,然後再反過來使用它來決定 θ 的值,即通過梯度上升來最大化對數邊際似然來得到。對於每個超引數而言,在建立核的例項時,他們的初始值和邊界都需要被指定。而這時候的 θ值能夠通過對核對象設定 theta 引數來設定。然後超引數的邊界則是通過核的 bounds 引數來設定。不過要注意的是,這兩個屬性(thetabounds)在更適合基於梯度的優化時,他們返回的值則是內部的對數轉換值。每個超引數的指定值都會被儲存到各自對應的核例項裡的引數。不過使用名詞為 "x" 的超引數的核必須擁有引數 self.x 和 self.x_bounds。

所有核類的基本抽象類都是 Kernel類。核內有一個與 Estimator 類似的實現,它提供了這些方法, get_params() set_params() clone() 。這允許通過類似 管道(Pipeline) 網格搜尋(GridSearch) 這些meta-估計器來設定核的值。但是由於核的巢狀結構(通過應用核運算子,下方有說明),核引數的名字也許會變的相對複雜一些。對於一般的二元核操作符,引數的左運算元的字首是 k1__,而右運算元的字首則是 k2__ 。一個額外的協方差函式是 clone_with_theta(theta),它返回一個引數為 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(成對核)。更進一步的,成對核的核函式在通過包裝器類 PairwiseKernel 後能夠作為一個GP(高斯過程)核來使用。不過要注意的是,超引數的梯度不是分析型的,而是數值型,並且這些核只支援各向同性距離。引數 gamma可以考慮看成是一項超引數,並且它是能夠最優的。其他的核引數在初始階段直接進行設定,並且其值保持固定。

1.7.5.2. 基本的核

ConstantKernel(常量核) 能夠作為乘積核(Product Kernel)的一部分,並且它可以對核內的其他因子進行縮放,而作為Sum 核 ,它可以修改高斯過程的均值。這個常量核依賴於 constant_value這一引數。它的定義是:


白核 的一個主要用法是作為sum核的一部分,用來解釋噪聲分量。引數 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(指數) 核需要一個基本核和一個標量引數 exponent,然後通過 k_exp(X, Y) = k(X, Y) ^ exponent 來組合他們。

1.7.5.4. 徑向基函式(RBF)核

RBF 核是一種固定核。它也以"平方指數"核這一名稱被人所知。這個核通過長度尺度 l > 0來實現引數化,其中這個引數能夠是一個標量(核的各項同性的變體)或是一個跟輸入 x 有著相同維數的向量(核的各向異性的變體)。


這個核是無限可微的,這意味著如果RBF核作為高斯過程的協方差函式的話,則它擁有所有階的均方導數,所以它的曲線非常平滑。從RBF核中產生的高斯過程的先驗和後驗如下圖所示:


1.7.5.5. Matérn核

Matern 是一種固定核,並且是RBF 核的一種概況。它有著一個額外的引數 ν ,這個引數用來控制產生函式的平滑度。它通過長度尺度這一引數 l > 0來實現引數化,這個引數能夠是一個標量(核的各種各項同性的變體)或是一個跟輸入 x 有相同維數的向量(核的各種各項異性的變體)。


ν -> ∞ 時,Matérn核則收斂成RBF核。當 ν = 1/2 時,Matérn核則變得跟絕對指數核一樣,即:


尤其是 ν = 3/2 時,


ν = 5/2


這些在學習函式中都是挺受歡迎的選項,雖說這些不是無限可微的(跟RBF核的定義一樣),但是也至少出現一次微分(ν = 3/2)或者是兩次微分(ν = 5/2)。通過 ν控制學習函式的平滑性的這一靈活性,使得其能夠適應真實的底層函式。從Matérn核中產生的高斯過程的先驗和後驗如下圖所示:


[RW2006]中的第84頁有著關於Matérn核心的不同變體的進一步細節。

1.7.5.6 二次有理核

RationalQuadratic(二次有理核) 可以看成是RBF 核與各種具有不同特性的長度尺度引數的比例混合(無限和)。它通過長度尺度引數 l > 0 和比例混合引數 α > 0來引數化的。但是目前僅支援 l 是標量的各項同性變數。


從二次有理核中產生的高斯過程的先驗和後驗如下圖所示:


1.7.5.1. 指數正弦平方核

ExpSineSquared(指數正弦平方核) 允許模型化周期函式。它通過長度尺度引數 l > 0與週期引數 p > 0 來引數化。目前僅支援 l 是標量的各項同性變數。


從指數正弦平方核中產生的高斯過程的先驗和後驗如下圖所示:


1.7.5.8. 點乘核

DotProduct(點乘核) 是一種非固定核,通過設定先驗 N(0,1)於係數 x_d(d = 1, ..., D) 和設定先驗 N(0, σ_0 ^ 2) 與偏值上的一個線性迴歸來獲得。點乘核 在座標上對於原點的旋轉是不變的,但是轉換就不是了。它通過引數 σ_0 ^ 2來引數化。當 σ_0 ^ 2 = 0 時,這個核可以稱之為齊次線性核,反之當 σ_0 ^ 2 不等於0時則是非齊次線性核。


點乘核 一般跟取冪組合。下面是在指數為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 bookhere .

1.7.6. 傳統高斯過程

在這一節,下面所描述的高斯過程的實現是scikit-learn 0.16.1的版本。但是要注意的是這個實現已經被棄用,並且會在0.18版本里去除。

1.7.6.1. 一個介紹性的迴歸例子

假設我們想要一個 g(x) = xsin(x) 這樣的替代函式。為了做到這一點,這個函式將會在實驗設計上進行評估。然後我們定義出一個高斯處理模型,再使用一些額外的引數來指定它是一個迴歸還是一個相關模型,然後再使用它來擬合數據。根據例項化過程中提供的引數數量,在擬合過程中可以選擇使用引數的最大似然估計或者是引數本身。

>>> 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. 擬合帶噪聲的資料

當要擬合的資料攜帶有噪聲時,可以通過為每個點額外設定一個噪聲方差的方式來使用高斯過程。GaussianProcess 帶有一個叫 nugget 的引數,它被用來新增進由訓練點組成的相關矩陣中的對角線內:其實就是一種 Tikhonov 正則化。但是在平方指數相關函式上,使用這種正則化方式等價於在輸入中指定一個分數的方差(也就是下圖這種形式了):


nuggetcorr 這兩個引數被設定為合適的值時,高斯過程就能夠從帶噪聲的資料上穩健地提取出一個潛在的可用函式。

1.7.6.3. 數學公式

1.7.6.3.1. 原始假設

假設有人想要對計算機的實驗輸出進行建模,然後其定義了一個公式:


GPML(Gaussian Processes for Machine Learning)則從這假設開始,
假設這個函式是高斯過程 G 的一個條件樣本路徑,所以其形式可變為:


其中 f(X)^T·β 是一個線性模型,然後 Z(X) 是一個帶有完全靜態協方差的一個零均值高斯過程:


其中 σ^2 為方差,R 為相關函式,並且這個函式只依賴每個樣本或特徵之間的絕對相對距離。
對這個基本公式來說,GPML只不過是一個基本最小二乘線性迴歸問題的一個擴充套件:


除了我們通過相關函式來額外假設樣本之間的空間一致性外,是生死啊哈那個,平臺的最小二乘法假設了模型 R(|X - X`|) X = X` 的情況下結果為1,否則為0:
這種模型被稱為 dirac 相關模型,不過有時也被稱為 kriging 文獻中所涉及的 nugget相關模型。

1.7.6.3.2 最優線性無偏預測(BLUP)

現在我們從觀測結果的樣本路徑 g 來推匯出其最優線性無偏預測。


這種預測是通過這些屬性所派生出來的:

  • 線性(或觀察結果的線性組合)
    • 是無偏的(即無偏值bias
  • 在極值(在均方誤差均值上)

所以這個預測的最佳權重向量 a(X) 是下式的解:


然後再用拉格朗日來重寫這個公式來解出最優值,然後結果應該就是我們所預測的閉合解 -- 詳細的證明過程在下面給出:

所以最後BLUP的顯示形式為帶均值的高斯隨機變數:


以及它的方差:


要說明的有:

  • 相關矩陣的項( Ri·j )是通過關於其自相關函式和它的內建引數 θ 定義的:
  • 預測點與DOE點之間的互相關向量( ri ):
  • 迴歸矩陣( Fi·j )(如果 f 為多項式偏值的話,這個矩陣就為Vandermonde矩陣)
  • 泛化的最小二乘迴歸權重(β):
  • 向量

不過要注意的是高斯過程的預測器做出的概率估計這一操作過程是一個全分析,且大多過程都依賴於基本線性運算。更準確地說,均值預測是兩個簡單線性的組合(點乘),然後其方差需要兩個逆矩陣,但是隻有在使用Cholesky的分解演算法時,相關矩陣才能夠被分解。

1.7.6.3.3. 經驗性最優線性無偏預測(EBLUP)

現在,我們從上述假設中知道了自相關和迴歸模型。但是事實上,我們並不總是能夠提前知道這些的,因此需要一個方法來根據模型能否做出積極的經驗判斷來選擇模型。

若需要做到這點則需要涉及到BLUP的一些剩餘的未知引數了。所以為了做到這一點,一個結合了觀察結果和一些推斷理論的方法出現了。這個方法的目前實現是基於DACE的Matlab工具箱中的最大似然估計 -- 可以檢視DACE手冊中有關這一公式的說明。然後在其自相關引數上的求最大似然估計就相當於一個求全域性最優值問題,然後這個全域性最優值是通過 scipy.optimize 的 fmin_cobyla 優化函式來求解的。但是在面對各向異性問題時,這可以使用Welch的分量優化演算法,詳細情況可以檢視下方的參考

1.7.6.4. 相關模型

一般的相關模型都可以跟一些有名的SVM核互相匹配,那是因為這些模型大多數都是基於等式所定義的。並且他們也必須是固定且滿足Mercer條件。不過要注意的是,相關模型的置信選擇應該是從觀察結果的原始實驗中的已知條件所做出的。例如:

  • 如果原始實驗是無限可微的(平滑),那麼就應該使用平方指數的相關模型
  • 如果不是無限可微的,那就一個使用指數相關模型。
  • 還有需要注意的是,這裡還有一種相關模型是取度的可導性作為輸入,這種模型稱為Matern相關模型,但是在此處並沒有對其進行實現(待做)。

如果想要關於這些的更詳細的討論,可以檢視引用中由Rasmussen & Williams所著的書

1.7.6.5. 迴歸模型

一般線性迴歸模型涉及到零(常數),一階和二階多項式。但是有一種是通過輸入他的Python函式形式,然後輸入特徵X,結果再返回一個包含函式集的向量。不過這種方法的限制是,函式的數量不能超過結果值的數量,因此這種潛在的迴歸是不確定的。

1.7.6.6. 實現細節

這個類的實現是基於DACE Matlab工具箱而成的:

引用

  • 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.