Matern#

class sklearn.gaussian_process.kernels.Matern(length_scale=1.0, length_scale_bounds=(1e-05, 100000.0), nu=1.5)[原始碼]#

Matern 核函數。

Matern 核函數類別是 RBF 的推廣。它有一個額外的參數 \(\nu\),用於控制結果函數的平滑度。 \(\nu\) 越小,近似函數的平滑度越低。當 \(\nu\rightarrow\infty\) 時,此核函數會等同於 RBF 核函數。當 \(\nu = 1/2\) 時,Matérn 核函數會等同於絕對指數核函數。重要的中間值為 \(\nu=1.5\) (一次可微分函數) 和 \(\nu=2.5\) (兩次可微分函數)。

此核函數由下式給出

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

其中 \(d(\cdot,\cdot)\) 是歐幾里得距離,\(K_{\nu}(\cdot)\) 是修正的貝索函數,而 \(\Gamma(\cdot)\) 是伽瑪函數。有關 Matern 核函數的不同變體之詳細資訊,請參閱 [1],第 4 章,第 4.2 節。

請在使用者指南中閱讀更多資訊。

版本 0.18 新增。

參數:
length_scalefloat 或形狀為 (n_features,) 的 ndarray,預設值=1.0

核函數的長度尺度。如果為 float,則使用等向性核函數。如果為陣列,則使用非等向性核函數,其中 l 的每個維度定義了各自特徵維度的長度尺度。

length_scale_bounds一對大於等於 0 的 float 或 “fixed”,預設值=(1e-5, 1e5)

‘length_scale’ 的下限和上限。如果設定為 “fixed”,則在超參數調整期間無法變更 ‘length_scale’。

nufloat,預設值=1.5

控制學習函數平滑度的參數 nu。 nu 越小,近似函數的平滑度越低。當 nu=inf 時,此核函數會等同於 RBF 核函數,而當 nu=0.5 時,則等同於絕對指數核函數。重要的中間值為 nu=1.5 (一次可微分函數) 和 nu=2.5 (兩次可微分函數)。請注意,不在 [0.5, 1.5, 2.5, inf] 中的 nu 值會產生相當高的計算成本 (約高出 10 倍),因為它們需要評估修正的貝索函數。此外,與 l 不同,nu 會保持固定在其初始值,不會進行最佳化。

參考文獻

範例

>>> from sklearn.datasets import load_iris
>>> from sklearn.gaussian_process import GaussianProcessClassifier
>>> from sklearn.gaussian_process.kernels import Matern
>>> X, y = load_iris(return_X_y=True)
>>> kernel = 1.0 * Matern(length_scale=1.0, nu=1.5)
>>> gpc = GaussianProcessClassifier(kernel=kernel,
...         random_state=0).fit(X, y)
>>> gpc.score(X, y)
0.9866...
>>> gpc.predict_proba(X[:2,:])
array([[0.8513..., 0.0368..., 0.1117...],
        [0.8086..., 0.0693..., 0.1220...]])
__call__(X, Y=None, eval_gradient=False)[原始碼]#

傳回核函數 k(X, Y) 以及選擇性的梯度。

參數:
X形狀為 (n_samples_X, n_features) 的 ndarray

傳回的核函數 k(X, Y) 的左引數

Y形狀為 (n_samples_Y, n_features) 的 ndarray,預設值=None

傳回的核函數 k(X, Y) 的右引數。如果為 None,則會改為評估 k(X, X)。

eval_gradientbool,預設值=False

判斷是否計算相對於核函數超參數對數的梯度。僅在 Y 為 None 時支援。

傳回值:
K形狀為 (n_samples_X, n_samples_Y) 的 ndarray

核函數 k(X, Y)

K_gradient形狀為 (n_samples_X, n_samples_X, n_dims) 的 ndarray,選用

相對於核函數超參數對數的核函數 k(X, X) 梯度。僅在 eval_gradient 為 True 時傳回。

property bounds#

傳回 theta 的對數轉換界限。

傳回值:
bounds形狀為 (n_dims, 2) 的 ndarray

核函數超參數 theta 的對數轉換界限

clone_with_theta(theta)[原始碼]#

傳回具有指定超參數 theta 的自我副本。

參數:
theta形狀為 (n_dims,) 的 ndarray

超參數

diag(X)[原始碼]#

傳回核函數 k(X, X) 的對角線。

此方法的結果與 np.diag(self(X)) 相同;但是,由於僅評估對角線,因此可以更有效率地進行評估。

參數:
X形狀為 (n_samples_X, n_features) 的 ndarray

傳回的核函數 k(X, Y) 的左引數

傳回值:
K_diag形狀為 (n_samples_X,) 的 ndarray

核函數 k(X, X) 的對角線

get_params(deep=True)[原始碼]#

取得此核函數的參數。

參數:
deepbool,預設值為True

若為 True,將會回傳此估算器以及包含的子物件(也是估算器)的參數。

傳回值:
paramsdict

參數名稱對應到其值的字典。

property hyperparameters#

回傳所有超參數規格的列表。

is_stationary()[原始碼]#

回傳此核函數是否為平穩的。

property n_dims#

回傳此核函數的非固定超參數的數量。

property requires_vector_input#

回傳此核函數是否定義在固定長度的特徵向量或通用物件上。為了向後相容,預設為 True。

set_params(**params)[原始碼]#

設定此核函數的參數。

此方法適用於簡單的核函數以及巢狀的核函數。後者的參數形式為 <component>__<parameter>,因此可以更新巢狀物件的每個組件。

傳回值:
self
property theta#

回傳(扁平化的、對數轉換的)非固定超參數。

請注意,theta 通常是核函數超參數的對數轉換值,因為這種搜尋空間的表示方式更適合超參數搜尋,因為諸如長度尺度之類的超參數自然位於對數尺度上。

傳回值:
theta形狀為 (n_dims,) 的 ndarray

核函數的非固定、對數轉換超參數。