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 的對數轉換界限
- 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#
回傳所有超參數規格的列表。
- property n_dims#
回傳此核函數的非固定超參數的數量。
- property requires_vector_input#
回傳此核函數是否定義在固定長度的特徵向量或通用物件上。為了向後相容,預設為 True。
- set_params(**params)[原始碼]#
設定此核函數的參數。
此方法適用於簡單的核函數以及巢狀的核函數。後者的參數形式為
<component>__<parameter>
,因此可以更新巢狀物件的每個組件。- 傳回值:
- self
- property theta#
回傳(扁平化的、對數轉換的)非固定超參數。
請注意,theta 通常是核函數超參數的對數轉換值,因為這種搜尋空間的表示方式更適合超參數搜尋,因為諸如長度尺度之類的超參數自然位於對數尺度上。
- 傳回值:
- theta形狀為 (n_dims,) 的 ndarray
核函數的非固定、對數轉換超參數。