【Scikit-Learn 中文文檔】高斯過程 - 監督學習 - 用戶指南 | ApacheCN

中文文檔: http://sklearn.apachecn.org/cn/0.19.0/modules/gaussian_process.html

英文文檔: http://sklearn.apachecn.org/en/0.19.0/modules/gaussian_process.html

官方文檔: http://scikit-learn.org/stable/

GitHub: https://github.com/apachecn/scikit-learn-doc-zh(覺得不錯麻煩給個 Star,我們一直在努力)

貢獻者: https://github.com/apachecn/scikit-learn-doc-zh#貢獻者

關於我們: http://www.apachecn.org/organization/209.html




1.7. 高斯過程

高斯過程 (GP) 是一種常用的監督學習方法,旨在解決*迴歸問題*和*概率分類問題*。

高斯過程模型的優點如下:

  • 預測內插了觀察結果(至少對於正則核)。

  • 預測結果是概率形式的(高斯形式的)。這樣的話,

    人們可以計算得到經驗置信區間並且據此來判斷是否需要修改(在線擬合,自適應)

    在一些區域的預測值。

  • 通用性: 可以指定不同的:ref:內核(kernels)<gp_kernels>

    雖然該函數提供了常用的內核,但是也可以指定自定義內核。

高斯過程模型的缺點包括:

  • 它們不稀疏,例如,模型通常使用整個樣本/特徵信息來進行預測。
  • 高維空間模型會失效,高維也就是指特徵的數量超過幾十個。

1.7.1. 高斯過程迴歸(GPR)

GaussianProcessRegressor 類實現了迴歸情況下的高斯過程(GP)模型。 爲此,需要實現指定GP的先驗。當參數 normalize_y=False 時,先驗的均值 通常假定爲常數或者零; 當 normalize_y=True 時,先驗均值通常爲訓練數 據的均值。而先驗的方差通過傳遞 內核(kernel) 對象來指定。通過 最大化基於傳遞 optimizer 的對數邊緣似然估計(LML),內核的超參可以在 GaussianProcessRegressor 類執行擬合過程中被優化。由於 LML 可能會存在多個 局部最優解,因此優化過程可以通過指定 n_restarts_optimizer 參數進行 多次重複。通過設置內核的超參初始值來進行第一次優化的運行。後續的運行 過程中超參值都是從合理範圍值中隨機選取的。如果需要保持初始化超參值, 那麼需要把優化器設置爲 None 。

目標變量中的噪聲級別通過參數 alpha 來傳遞並指定,要麼全局是常數要麼是一個數據點。 請注意,適度的噪聲水平也可以有助於處理擬合期間的數字問題,因爲它被有效地實現爲吉洪諾夫正則化(Tikhonov regularization), 即通過將其添加到核心矩陣的對角線。明確指定噪聲水平的替代方法是將 WhiteKernel 組件包含在內核中, 這可以從數據中估計全局噪聲水平(見下面的示例)。

算法實現是基於 [RW2006] 中的算法 2.1 。除了標準 scikit learn 估計器的 API 之外, GaussianProcessRegressor 的作用還包括:

  • 允許預測,無需事先擬合(基於GP先驗)
  • 提供了一種額外的方法 sample_y(X) , 其評估 在給定輸入處從 GPR (先驗或後驗)繪製的樣本
  • 公開了一種方法 log_marginal_likelihood(theta) , 可以在外部使用其他方式選擇超參數,例如通過馬爾科夫鏈蒙特卡羅鏈(Markov chain Monte Carlo)。

1.7.2. GPR 示例

1.7.2.1. 具有噪聲級的 GPR 估計

該示例說明具有包含 WhiteKernel 的和核(sum-kernel)的 GPR 可以估計數據的噪聲水平。 對數邊緣似然(LML)景觀的圖示表明存在 LML 的兩個局部最大值。

../_images/sphx_glr_plot_gpr_noisy_0001.png

第一個對應於具有高噪聲電平和大長度尺度的模型,其解釋數據中噪聲的所有變化。

../_images/sphx_glr_plot_gpr_noisy_0011.png

第二個具有較小的噪聲水平和較短的長度尺度,這解釋了無噪聲功能關係的大部分變化。 第二種模式有較高的可能性; 然而,根據超參數的初始值,基於梯度的優化也可能會收斂到高噪聲解。 因此,對於不同的初始化,重複優化多次是很重要的。

../_images/sphx_glr_plot_gpr_noisy_0021.png

1.7.2.2. GPR 和內核嶺迴歸(Kernel Ridge Regression)的比較

內核脊迴歸(KRR)和 GPR 通過內部使用 “kernel trick(內核技巧)” 來學習目標函數。 KRR學習由相應內核引起的空間中的線性函數,該空間對應於原始空間中的非線性函數。 基於平均誤差損失與脊正弦化,選擇內核空間中的線性函數。 GPR使用內核來定義先驗分佈在目標函數上的協方差,並使用觀察到的訓練數據來定義似然函數。 基於貝葉斯定理,定義了目標函數上的(高斯)後驗分佈,其平均值用於預測。

一個主要區別是,GPR 可以基於邊際似然函數上的梯度上升選擇內核的超參數, 而KRR需要在交叉驗證的損失函數(均方誤差損失)上執行網格搜索。 另一個區別是,GPR 學習目標函數的生成概率模型,因此可以提供有意義的置信區間和後驗樣本以及預測值, 而KRR僅提供預測。

下圖說明了人造數據集上的兩種方法,其中包括正弦目標函數和強噪聲。 該圖比較了基於 ExpSineSquared 內核的 KRR 和 GPR 的學習模型,適用於學習周期函數。 內核的超參數控制內核的平滑度(length_scale)和週期性(週期性)。 此外,數據的噪聲水平由 GPR 通過內核中的另外的 WhiteKernel 組件和 KRR 的正則化參數 α 明確地學習。

../_images/sphx_glr_plot_compare_gpr_krr_0011.png

該圖顯示,兩種方法都可以學習合理的目標函數模型。 GPR將函數的週期正確地識別爲 2*\pi (6.28),而 KRR 選擇倍增的週期爲 4*\pi 。 此外,GPR 爲 KRR 不可用的預測提供了合理的置信區間。 兩種方法之間的主要區別是擬合和預測所需的時間: 原則上KRR的擬合速度較快,超參數優化的網格搜索與超參數( “curse of dimensionality(維度詛咒)” )呈指數級關係。 GPR中的參數的基於梯度的優化不受此指數縮放的影響,因此在具有三維超參數空間的該示例上相當快。 預測的時間是相似的; 然而,生成 GPR 預測分佈的方差需要的時間比生成平均值要長。

1.7.2.3. Mauna Loa CO2 數據中的 GRR

該示例基於 [RW2006] 的第 5.4.3 節。 它演示了使用梯度上升的對數邊緣似然性的複雜內核工程和超參數優化的示例。 數據包括在 1958 年至 1997 年間夏威夷 Mauna Loa 天文臺收集的每月平均大氣二氧 化碳濃度(以百萬分之幾(ppmv)計)。目的是將二氧化碳濃度建模爲時間t的函數。

內核由幾個術語組成,負責說明信號的不同屬性:

  • 一個長期的,順利的上升趨勢是由一個 RBF 內核來解釋的。 具有較大長度尺寸的RBF內核將使該分量平滑; 沒有強制這種趨勢正在上升,這給 GP 帶來了這個選擇。 具體的長度尺度和振幅是自由的超參數。
  • 季節性因素,由定期的 ExpSineSquared 內核解釋,固定週期爲1年。 該週期分量的長度尺度控制其平滑度是一個自由參數。 爲了使準確週期性的衰減,採用帶有RBF內核的產品。 該RBF組件的長度尺寸控制衰減時間,並且是另一個自由參數。
  • 較小的中期不規則性將由 RationalQuadratic 內核組件來解釋, RationalQuadratic 內核組件的長度尺度和 alpha 參數決定長度尺度的擴散性。 根據 [RW2006] ,這些不規則性可以更好地由 RationalQuadratic 來解釋, 而不是 RBF 內核組件,這可能是因爲它可以容納幾個長度尺度。
  • “noise(噪聲)” 一詞,由一個 RBF 內核貢獻組成,它將解釋相關的噪聲分量,
如局部天氣現象以及 WhiteKernel 對白噪聲的貢獻。 相對幅度和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年左右才能做出置信度比較高的預測

../_images/sphx_glr_plot_gpr_co2_0011.png

1.7.3. 高斯過程分類(GPC)

所述 GaussianProcessClassifier 器實現了用於分類目的的高斯過程(GP),當測試的預測採用類概率的形式,更能夠用於概率分類。 GaussianProcessClassifier 在隱函數 f 之前設置GP先驗,然後通過鏈接函數進行壓縮以獲得概率分類。 隱函數 f 因此就是所謂的干擾函數(nuisance function),其值不能被觀測到,並且自身不具有相關性。 其目的是允許模型的表達形式更加簡便,並且 f 在預測過程中被去除(整合)。 GaussianProcessClassifier 實現了邏輯鏈接函數, 對於該邏輯,積分不能在分析上計算,但在二進制情況下很容易近似。

與迴歸設置相反,即使設置了高斯過程先驗,隱函數 f 的後驗也不符合高斯分佈, 因爲高斯似然不適用於離散類標籤。相反,使用的是與邏輯鏈接函數(logit)對應的非高斯似然。 GaussianProcessClassifier 通過拉普拉斯近似(Laplace approximation)來估計非高斯後驗分佈。 更多詳細信息,請參見 [RW2006] 的第 3 章。

GP先驗平均值假定爲零。先驗的協方差是通過傳遞 內核(kernel) 對象來指定的。 在通過最大化基於傳遞的對數邊緣似然(LML)的 GaussianProcessRegressor 擬合期間, 優化內核的超參數 optimizer 。由於LML可能具有多個局部最優值, 所以優化器可以通過指定重複啓動 n_restarts_optimizer 。 第一次運行始終從內核的初始超參數值開始執行; 從已經從允許值的範圍中隨機選擇超參數值來進行後續運行。 如果初始超參數需要保持固定,None 可以傳遞作爲優化器。

GaussianProcessClassifier 通過執行基於OvR(one-versus-rest)或 OvO(one-versus-one )策略的訓練和預測來支持多類分類。 在OvR(one-versus-rest)策略中,每個類都配有一個二進制高斯過程分類器,該類別被訓練爲將該類與其餘類分開。 在 “one_vs_one” 中,對於每對類擬合一個二進制高斯過程分類器,這被訓練爲分離這兩個類。 這些二進制預測因子的預測被組合成多類預測。更多詳細信息,請參閱 多類別分類 。

在高斯過程分類的情況下,”one_vs_one” 策略可能在計算上更廉價, 因爲它必須解決涉及整個訓練集的每一個子集的許多問題, 而不是整個數據集的較少的問題。由於高斯過程分類與數據集的大小相互立方,這可能要快得多。 但是,請注意,”one_vs_one” 不支持預測概率估計,而只是簡單的預測。 此外,請注意, GaussianProcessClassifier 在內部還沒有實現真正的多類 Laplace 近似, 但如上所述,在解決內部二進制分類任務的基礎上,它們使用OvR或OvO的組合方法。

1.7.4. GPC 示例

1.7.4.1. GPC 概率預測

該示例說明了對於具有不同選項的超參數的RBF內核的GPC預測概率。 第一幅圖顯示GPC具有任意選擇的超參數的預測概率,以及對應於最大LML(對數邊緣似然)對應的超參數。

雖然通過優化LML選擇的超參數具有相當大的LML,但是根據測試數據的對數損失,它們的表現更差。 該圖顯示,這是因爲它們在階級邊界(這是好的)表現出類概率的急劇變化, 但預測概率接近0.5遠離類邊界(這是壞的)這種不良影響是由於GPC內部使用了拉普拉斯逼近。

第二幅圖顯示了內核超參數的不同選擇的LML(對數邊緣似然),突出了在第一幅圖中使用的通過黑點(訓練集)選擇的兩個超參數。

../_images/sphx_glr_plot_gpc_0001.png
../_images/sphx_glr_plot_gpc_0011.png

1.7.4.2. GPC 在 XOR 數據集上的舉例說明

此示例說明了在XOR數據上的GPC。各向同性的核( RBF )和非固定的核( DotProduct )對比固定性。 在這個特定的數據集上, DotProduct 內核獲得了更好的結果,因爲類邊界是線性的,與座標軸重合。 然而,實際上,諸如 RBF 這樣的固定內核經常獲得更好結果。

../_images/sphx_glr_plot_gpc_xor_0011.png

1.7.4.3. iris 數據集上的高斯過程分類(GPC)

該示例說明了用於虹膜數據集的二維版本上各向同性和各向異性RBF核的GPC的預測概率。 這說明了GPC對多類分類的適用性。 各向異性RBF內核通過爲兩個特徵維度分配不同的長度尺度來獲得稍高的LML(對數邊緣似然)。

../_images/sphx_glr_plot_gpc_iris_0011.png

1.7.5. 高斯過程內核

內核(也可以叫做GPs上下文中的”協方差函數”) 是決定高斯過程(GP)先驗和後驗形狀的關鍵組成部分。 它們通過定義兩個數據點的“相似性”,並結合相似的 數據點應該具有相似的目標值的假設,對所學習的函數進行編碼。 內核可以分爲兩類:固定內核,只取決於兩個數據點的距離, 不依賴於它們的絕對值 k(x_i, x_j)= k(d(x_i, x_j)) ,因此它們對於輸入空間中的轉換是不變的;非固定的內核,取 決於數據點的具體值。固定內核可以進一步細分爲各向同性和各向 異性內核,其中各向同性內核不會在輸入空間中旋轉。想要了解 更多細節,請參看 [RW2006] 的第四章。

1.7.5.1. 高斯過程內核 API

Kernel 主要是用來計算數據點之間的高斯過程協方差。 爲此,內核中 __call__ 方法會被調用。該方法可以用於計算 2d陣列X中所有數據點對的“自動協方差”,或二維陣列X的數據點 與二維陣列Y中的數據點的所有組合的“互協方差”。以下論斷對於 所有內核k(除了 WhiteKernel)都是成立的:k(X) == K(X, Y=X)。 如果僅僅是自協方差的對角線元素被使用,那麼內核的方法 diag() 將會被調用, 該方法比等價的調用 __call__np.diag(k(X, X)) == k.diag(X) 具有更高的計算效率。

內核通過超參數向量 \theta 進行參數化。這些超參數可以 控制例如內核的長度或週期性(見下文)。通過設置 __call__ 方法的參數 eval_gradient=True ,所有的內核支持計算解析 內核自協方差對於 \theta 的解析梯度。該梯度被用來在 高斯過程中(不論是迴歸型還是分類型的)計算LML(對數邊緣似然)函數 的梯度,進而被用來通過梯度下降的方法極大化LML(對數邊緣似然)函數 從而確定 \theta 的值。對於每個超參數,當對內核的實例 進行賦值時,初始值和邊界值需要被指定。通過內核對象屬性 theta , \theta的當前值可以被獲取或者設置。更重要的是,  超參的邊界值可以被內核屬性 bounds 獲取。需要注意的是, 以上兩種屬性值(theta和bounds)都會返回內部使用值的日誌轉換值, 這是因爲這兩種屬性值通常更適合基於梯度的優化。每個超參數的 規範 Hyperparameter 以實例形式被存儲在相應內核中。 請注意使用了以”x”命名的超參的內核必然具有self.x和self.x_bounds這兩種屬性。

所有內核的抽象基類爲 Kernel 。Kernel 基類實現了 一個相似的接口 Estimator ,提供了方法 get_params() ,set_params() 以及 clone() 。這也允許通過諸如 Pipeline 或者 GridSearch 之類的元估計來設置內核值。 需要注意的是,由於內核的嵌套結構(通過內核操作符,如下所見), 內核參數的名稱可能會變得相對複雜些。通常來說,對於二元內核操作, 參數的左運算元以 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 的子類實例可以通過 metric 參數傳給 sklearn.metrics.pairwise 中的

pairwise_kernels 。更重要的是,超參數的梯度不是分析的,而是數字,所有這些內核只支持

各向同性距離。該參數 gamma 被認爲是一個超參數,可以進行優化。其他內核參數在初始化時直接設置, 並保持固定。

1.7.5.2. 基礎內核

ConstantKernel 內核類可以被用作 Product 內核類的一部分, 在它可以對其他因子(內核)進行度量的場景下或者作爲更改高斯過程均值的

Sum 類的一部分。這取決於參數 constant\_value 的設置。該方法定義爲:

k(x_i, x_j) = constant\_value \;\forall\; x_1, x_2

WhiteKernel 內核類的主要應用實例在於當解釋信號的噪聲部分時 可以作爲內核集合的一部分。通過調節參數 noise\_level, 該類可以用來估計噪聲級別。具體如下所示:

k(x_i, x_j) = noise\_level \text{ if } x_i == x_j \text{ else } 0

1.7.5.3. 內核操作

內核操作是把1~2個基內核與新內核進行合併。內核類 Sum 通過 k_{sum}(X, Y) = k1(X, Y) + k2(X, Y) 相加來合併 k1 和 k2 內核。內核類 Product 通過 k_{product}(X, Y) = k1(X, Y) * k2(X, Y) 把 k1 和 k2 內核進行合併。內核類 Exponentiation 通過 k_{exp}(X, Y) = k(X, Y)^\text{exponent} 把基內核與 常量參數 exponent 進行合併。

1.7.5.4. 徑向基函數內核

RBF 內核是一個固定內核,它也被稱爲“平方指數”內核。它通過定長的參數 l>0 來對內核進行參數化。該參數既可以是標量(內核的各向同性變體)或者與輸入 x (內核的各向異性變體) 具有相同數量的維度的向量。該內核可以被定義爲:

k(x_i, x_j) = \text{exp}\left(-\frac{1}{2} d(x_i / l, x_j / l)^2\right)

這個內核是無限可微的,這意味着這個內核作爲協方差函數的 GP 具有所有階數的均方差導數, 因此非常平滑。由RBF內核產生的GP的先驗和後驗示意圖如下所示:

../_images/sphx_glr_plot_gpr_prior_posterior_0001.png

1.7.5.5. Matérn 內核

Matern 內核是一個固定內核,是 RBF 內核的泛化。它有一個額外的參數 \nu, 該參數控制結果函數的平滑程度。它由定長參數 l>0 來實現參數化。該參數既可以是標量 (內核的各向同性變體)或者與輸入 x (內核的各向異性變體)具有相同數量的維度的向量。 該內核可以被定義爲:

k(x_i, x_j) = \sigma^2\frac{1}{\Gamma(\nu)2^{\nu-1}}\Bigg(\gamma\sqrt{2\nu} d(x_i / l, x_j / l)\Bigg)^\nu K_\nu\Bigg(\gamma\sqrt{2\nu} d(x_i / l, x_j / l)\Bigg),

因爲 \nu\rightarrow\infty ,Matérn 內核收斂到 RBF 內核。 當 \nu = 1/2 時,Matérn 內核變得與絕對指數內核相同時,即

k(x_i, x_j) = \sigma^2 \exp \Bigg(-\gamma d(x_i / l, x_j / l) \Bigg) \quad \quad \nu= \tfrac{1}{2}

特別的,當 \nu = 3/2 時:

k(x_i, x_j) = \sigma^2 \Bigg(1 + \gamma \sqrt{3} d(x_i / l, x_j / l)\Bigg) \exp \Bigg(-\gamma \sqrt{3}d(x_i / l, x_j / l) \Bigg) \quad \quad \nu= \tfrac{3}{2}

和 \nu = 5/2 :

k(x_i, x_j) = \sigma^2 \Bigg(1 + \gamma \sqrt{5}d(x_i / l, x_j / l) +\frac{5}{3} \gamma^2d(x_i / l, x_j / l)^2 \Bigg) \exp \Bigg(-\gamma \sqrt{5}d(x_i / l, x_j / l) \Bigg) \quad \quad \nu= \tfrac{5}{2}

是學習函數的常用選擇,並且不是無限可微的(由 RBF 內核假定) 但是至少具有一階( \nu = 3/2 )或者二階( \nu = 5/2 )可微性。

通過 \nu 靈活控制學習函數的平滑性可以更加適應真正的底層函數關聯屬性。 通過 Matérn 內核產生的高斯過程的先驗和後驗如下圖所示:

../_images/sphx_glr_plot_gpr_prior_posterior_0041.png

想要更進一步地瞭解不同類型的Matérn內核請參閱 [RW2006] , pp84。

1.7.5.6. 有理二次內核

RationalQuadratic 內核可以被看做不同特徵尺度下的 RBF 內核的規模混合(一個無窮和) 它通過長度尺度參數 l>0 和比例混合參數 \alpha>0 進行參數化。 此時僅支持 l 標量的各向同性變量。內核公式如下:

k(x_i, x_j) = \left(1 + \frac{d(x_i, x_j)^2}{2\alpha l^2}\right)^{-\alpha}

從 RBF 內核中產生的高斯過程的先驗和後驗如下圖所示:

../_images/sphx_glr_plot_gpr_prior_posterior_0011.png

1.7.5.7. 正弦平方內核

ExpSineSquared 內核可以對週期性函數進行建模。它由定長參數 l>0 以及週期參數 p>0 來實現參數化。此時僅支持 l 標量的各向同性變量。內核公式如下:

k(x_i, x_j) = \text{exp}\left(-2 \left(\text{sin}(\pi / p * d(x_i, x_j)) / l\right)^2\right)

從ExpSineSquared內核中產生的高斯過程的先驗和後驗如下圖所示:

../_images/sphx_glr_plot_gpr_prior_posterior_0021.png

1.7.5.8. 點乘內核

DotProduct 內核是非固定內核,它可以通過在線性迴歸的 x_d (d = 1, . . . , D) 的相關係數上加上 服從於 N(0, 1) 的先驗以及在線性迴歸的偏置上加上服從於 N(0, \sigma_0^2) 的先驗來獲得。 該 DotProduct 內核對於原點座標的旋轉是不變的,因此不是轉換。它通過設置參數 \sigma_0^2 來進行參數化。 當 \sigma_0^2 = 0 時,該內核叫做同質線性內核;否則該內核是非同質的。內核公式如下:

k(x_i, x_j) = \sigma_0 ^ 2 + x_i \cdot x_j

DotProduct 內核通常和指數分佈相結合。實例如下圖所示:

../_images/sphx_glr_plot_gpr_prior_posterior_0031.png

1.7.5.9. 參考文獻

[RW2006] (123) Carl Eduard Rasmussen and Christopher K.I. Williams, “Gaussian Processes for Machine Learning”, MIT Press 2006, Link to an official complete PDF version of the book here .

1.7.6. 傳統高斯過程

在本節中,描述了版本 0.16.1 及之前 scikit 中高斯過程的實現, 請注意,此實現已被棄用,將在版本 0.18 中刪除。

1.7.6.1. 迴歸實例介紹

假定我們要替代這個函數:g(x) = x \sin(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 。通常來說這是一種類型的吉洪諾夫正則化方法。 在平方指數相關函數的特殊情況下,該歸一化等效於指定輸入中的小數方差。也就是:

\mathrm{nugget}_i = \left[\frac{\sigma_i}{y_i}\right]^2

使用 nugget 以及 corr 正確設置,高斯過程可以更好地用於從噪聲數據恢復給定的向量函數。

1.7.6.3. 數學形式

1.7.6.3.1. 初始假設

假設需要對電腦實驗的結果進行建模,例如使用一個數學函數:

g: & \mathbb{R}^{n_{\rm features}} \rightarrow \mathbb{R} \\   & X \mapsto y = g(X)

同時假設這個函數是 一個 有關於 一個 高斯過程 G 的條件採用方法, 那麼從這個假設出發,GPML 通常可以表示爲如下形式:

G(X) = f(X)^T \beta + Z(X)

其中, f(X)^T \beta 是一個線性迴歸模型,並且 Z(X) 是一個 以零爲均值,協方差函數完全平穩的高斯過程:

C(X, X') = \sigma^2 R(|X - X'|)

\sigma^2 表示其方差, R 表示僅僅基於樣本之間的絕對相關距離的相關函數,可能是特徵(這是平穩性假設)

從這些基本的公式中可以注意到GPML僅僅是基本的線性二乘迴歸問題的擴展。

g(X) \approx f(X)^T \beta

除此之外,我們另外假定由相關函數指定的樣本之間的一些空間相干性(相關性)。 事實上,普通最小二乘法假設當 X = X' 時,相關性模型 R(|X - X'|) 是 1;否則爲 0 ,相關性模型爲 狄拉克 相關模型–有時在克里金文獻中被稱爲 熔核 相關模型

1.7.6.3.2. 最佳線性無偏預測(BLUP)

我們現在推導出基於觀測結果的 最佳線性無偏預測 g

\hat{G}(X) = G(X | y_1 = g(X_1), ...,                            y_{n_{\rm samples}} = g(X_{n_{\rm samples}}))

它可以由 給定的屬性 加以派生:

  • 它是線性的(觀測結果的線性組合)

\hat{G}(X) \equiv a(X)^T y

  • 它是無偏的

\mathbb{E}[G(X) - \hat{G}(X)] = 0

  • 它是最好的(在均方誤差的意義上)

\hat{G}(X)^* = \arg \min\limits_{\hat{G}(X)} \;                                        \mathbb{E}[(G(X) - \hat{G}(X))^2]

因此最優的帶權向量 a(X) 是以下等式約束優化問題的解

a(X)^* = \arg \min\limits_{a(X)} & \; \mathbb{E}[(G(X) - a(X)^T y)^2] \\                   {\rm s. t.} & \; \mathbb{E}[G(X) - a(X)^T y] = 0

以拉格朗日形式重寫這個受約束的優化問題,並進一步尋求要滿足的一階最優條件, 從而得到一個以閉合形式表達式爲終止形式的預測器 - 參見參考文獻中完整的證明。

最後,BLUP 爲高斯隨機變量,其中均值爲:

\mu_{\hat{Y}}(X) = f(X)^T\,\hat{\beta} + r(X)^T\,\gamma

方差爲:

\sigma_{\hat{Y}}^2(X) = \sigma_{Y}^2\,( 1- r(X)^T\,R^{-1}\,r(X)+ u(X)^T\,(F^T\,R^{-1}\,F)^{-1}\,u(X))

其中:

  • 根據自相關函數以及內置參數 \theta 所定義的相關性矩陣爲:

R_{i\,j} = R(|X_i - X_j|, \theta), \; i,\,j = 1, ..., m

  • 在進行預測的點與 DOE 中的點之間的互相關的向量:

r_i = R(|X - X_i|, \theta), \; i = 1, ..., m

  • 迴歸矩陣 (例如範德蒙矩陣 如果 f 以多項式爲基):

F_{i\,j} = f_i(X_j), \; i = 1, ..., p, \, j = 1, ..., m

  • 廣義最小二乘迴歸權重:

\hat{\beta} =(F^T\,R^{-1}\,F)^{-1}\,F^T\,R^{-1}\,Y

  • 和向量:

\gamma & = R^{-1}(Y - F\,\hat{\beta}) \\u(X) & = F^T\,R^{-1}\,r(X) - f(X)

需要重點注意的是,高斯過程預測器的概率輸出是完全可分析的並且依賴於基本的線性代數操作。 更準確地說,預測結果的均值是兩個簡單線性組合(點積)的和,方差需要兩個矩陣反轉操作,但關聯 矩陣只能使用 Cholesky 分解算法分解一次。

1.7.6.3.3. 經驗最佳線性無偏估計(EBLUP)

到現在爲止,自相關和迴歸模型都已假定給出。然而,在實踐中,它們從來都是未知的 因此需要爲這些模型 關聯模型 做出(積極的)經驗選擇。

根據這些選擇,可以來估計 BLUP 中涉及到的遺留未知參數。爲此,需要使用一系列 被提供的觀測值同時結合一系列推斷技術。目前使用的方法是基於 DACE’s Matlab 工 具包的*最大似然估計* - 參見 DACE 手冊中的完全推導公式。最大似然估計的問題在 自相關參數中是一個全局優化的問題。這種全局優化通過 scipy.optimize 中的 fmin_cobyla 優化函數加以實現。然而,在各向異性的情況下,我們提供了 Welch 的分量優化算法的實現 - 參見參考。

1.7.6.4. 關聯模型

由於幾乎相等的假設,常用的關聯模型和一些有名的SVM內核相匹配。它們必須要滿足 Mercer 條件 並且需要保持固定形式。然而,請注意,相關模型的選擇應該與觀察到來的原始實驗的已知特性一致。 例如:

  • 如果原始實驗被認爲是無限可微(平滑),則應使用 平方指數關聯模型 。
  • 如果不是無限可微的, 那麼需要使用 指數關聯模型.
  • 還要注意,存在一個將衍生度作爲輸入的相關模型:這是 Matern 相關模型,但這裏並沒有實現( TODO ).

關於選擇合適的關聯模型更詳細的討論,請參閱 Rasmussen&Williams 的文獻。

1.7.6.5. 迴歸模型

常用的線性迴歸模型包括零階(常數)、一階和二階多項式。 但是可以以 Python 函數的形式指定它自己的特性,它將特徵X 作爲輸入,並返回一個包含函數集值的向量。唯一加以限制地是, 函數的個數不能超過有效觀測值的數目,因此基本的迴歸問題不被*確定*。

1.7.6.6. 實現細節

模型通過 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.



中文文檔: http://sklearn.apachecn.org/cn/0.19.0/modules/gaussian_process.html

英文文檔: http://sklearn.apachecn.org/en/0.19.0/modules/gaussian_process.html

官方文檔: http://scikit-learn.org/stable/

GitHub: https://github.com/apachecn/scikit-learn-doc-zh(覺得不錯麻煩給個 Star,我們一直在努力)

貢獻者: https://github.com/apachecn/scikit-learn-doc-zh#貢獻者

關於我們: http://www.apachecn.org/organization/209.html

有興趣的們也可以和我們一起來維護,持續更新中 。。。

機器學習交流羣: 629470233

發佈了25 篇原創文章 · 獲贊 67 · 訪問量 12萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章