GaussianProcessRegressor#
- class sklearn.gaussian_process.GaussianProcessRegressor(kernel=None, *, alpha=1e-10, optimizer='fmin_l_bfgs_b', n_restarts_optimizer=0, normalize_y=False, copy_X_train=True, n_targets=None, random_state=None)[原始碼]#
高斯過程迴歸 (GPR)。
此實作基於 [RW2006] 的演算法 2.1。
除了標準 scikit-learn 估算器 API 之外,
GaussianProcessRegressor
允許在沒有事先擬合的情況下進行預測(基於 GP 先驗)
提供一個額外的方法
sample_y(X)
,該方法評估從給定輸入的 GPR(先驗或後驗)中提取的樣本公開一個方法
log_marginal_likelihood(theta)
,它可以外部使用於其他選擇超參數的方法,例如透過馬可夫鏈蒙特卡羅。
若要了解點估計方法與更具貝氏建模方法之間的差異,請參考標題為比較核心嶺迴歸與高斯過程迴歸的範例。
請在使用者指南中閱讀更多內容。
在 0.18 版本中加入。
- 參數:
- kernelkernel 實例,預設值=None
指定 GP 共變異數函式的核心。如果傳遞 None,則使用核心
ConstantKernel(1.0, constant_value_bounds="fixed") * RBF(1.0, length_scale_bounds="fixed")
作為預設值。請注意,除非邊界標記為「固定」,否則核心超參數會在擬合期間進行最佳化。- alpha浮點數或形狀為 (n_samples,) 的 ndarray,預設值=1e-10
在擬合期間新增到核心矩陣對角線的值。這可以透過確保計算值形成正定矩陣來防止擬合期間可能出現的數值問題。它也可以被解釋為訓練觀測值的額外高斯測量雜訊的變異數。請注意,這與使用
WhiteKernel
不同。如果傳遞陣列,它必須具有與用於擬合的資料相同的條目數,並用作數據點相依的雜訊水平。允許將雜訊水平直接指定為參數主要是為了方便起見,並與Ridge
保持一致。- optimizer“fmin_l_bfgs_b”、可呼叫物件或 None,預設值=“fmin_l_bfgs_b”
可以是內部支援的最佳化器之一,用於最佳化核心的參數(由字串指定),或以可呼叫物件形式傳遞的外部定義的最佳化器。如果傳遞可呼叫物件,則它必須具有以下簽名
def optimizer(obj_func, initial_theta, bounds): # * 'obj_func': the objective function to be minimized, which # takes the hyperparameters theta as a parameter and an # optional flag eval_gradient, which determines if the # gradient is returned additionally to the function value # * 'initial_theta': the initial value for theta, which can be # used by local optimizers # * 'bounds': the bounds on the values of theta .... # Returned are the best found hyperparameters theta and # the corresponding value of the target function. return theta_opt, func_min
預設情況下,使用
scipy.optimize.minimize
中的 L-BFGS-B 演算法。如果傳遞 None,則核心的參數會保持固定。可用的內部最佳化器為:{'fmin_l_bfgs_b'}
。- n_restarts_optimizer整數,預設值=0
為了尋找最大化對數邊際概似的核心參數而重新啟動最佳化器的次數。最佳化器的第一次執行是從核心的初始參數執行的,剩餘的執行(如果有)是從允許的 theta 值空間中以對數均勻隨機取樣的 theta 值執行的。如果大於 0,則所有邊界都必須是有限的。請注意,
n_restarts_optimizer == 0
表示執行一次。- normalize_y布林值,預設值=False
是否透過移除平均值並縮放到單位變異數來標準化目標值
y
。建議在使用零均值、單位變異數先驗的情況下使用。請注意,在此實作中,在報告 GP 預測之前,會反轉標準化。在 0.23 版本中變更。
- copy_X_train布林值,預設值=True
如果為 True,則在物件中儲存訓練資料的持續副本。否則,僅儲存對訓練資料的參考,如果資料在外部被修改,可能會導致預測發生變化。
- n_targets整數,預設值=None
目標值的維度數量。用於決定從先驗分佈取樣時的輸出數量(即在
fit
之前呼叫sample_y
)。一旦呼叫fit
,就會忽略此參數。在 1.3 版本中加入。
- random_state整數、RandomState 實例或 None,預設值=None
決定用於初始化中心點的隨機數產生方式。傳入一個整數可在多次函式呼叫中產生可重現的結果。請參閱詞彙表。
- 屬性:
- X_train_形狀為 (n_samples, n_features) 的類陣列或物件列表
訓練資料的特徵向量或其他表示形式 (也用於預測)。
- y_train_形狀為 (n_samples,) 或 (n_samples, n_targets) 的類陣列
訓練資料中的目標值 (也用於預測)。
- kernel_核心 (kernel) 實例
用於預測的核心。核心的結構與作為參數傳遞的結構相同,但具有最佳化的超參數。
- L_形狀為 (n_samples, n_samples) 的類陣列
X_train_
中核心的下三角 Cholesky 分解。- alpha_形狀為 (n_samples,) 的類陣列
核心空間中訓練資料點的對偶係數。
- log_marginal_likelihood_value_浮點數
self.kernel_.theta
的對數邊際似然值。- n_features_in_整數
在 fit 期間看到的特徵數量。
在 0.24 版本中新增。
- feature_names_in_形狀為 (
n_features_in_
,) 的 ndarray 在 fit 期間看到的特徵名稱。僅當
X
具有全部為字串的特徵名稱時定義。在 1.0 版本中新增。
另請參閱
GaussianProcessClassifier
基於 Laplace 近似的 Gaussian process 分類 (GPC)。
參考文獻
範例
>>> from sklearn.datasets import make_friedman2 >>> from sklearn.gaussian_process import GaussianProcessRegressor >>> from sklearn.gaussian_process.kernels import DotProduct, WhiteKernel >>> X, y = make_friedman2(n_samples=500, noise=0, random_state=0) >>> kernel = DotProduct() + WhiteKernel() >>> gpr = GaussianProcessRegressor(kernel=kernel, ... random_state=0).fit(X, y) >>> gpr.score(X, y) 0.3680... >>> gpr.predict(X[:2,:], return_std=True) (array([653.0..., 592.1...]), array([316.6..., 316.6...]))
- fit(X, y)[原始碼]#
擬合 Gaussian process 迴歸模型。
- 參數:
- X形狀為 (n_samples, n_features) 的類陣列或物件列表
訓練資料的特徵向量或其他表示形式。
- y形狀為 (n_samples,) 或 (n_samples, n_targets) 的類陣列
目標值。
- 回傳值:
- self物件
GaussianProcessRegressor 類別實例。
- get_metadata_routing()[原始碼]#
取得此物件的中繼資料路由。
請檢查使用者指南,了解路由機制如何運作。
- 回傳值:
- routingMetadataRequest
封裝路由資訊的
MetadataRequest
。
- get_params(deep=True)[原始碼]#
取得此估算器的參數。
- 參數:
- deepbool,預設為 True
如果為 True,將回傳此估算器以及所包含之子物件 (屬於估算器) 的參數。
- 回傳值:
- paramsdict
參數名稱對應至其值。
- log_marginal_likelihood(theta=None, eval_gradient=False, clone_kernel=True)[原始碼]#
回傳訓練資料的 theta 對數邊際似然值。
- 參數:
- theta形狀為 (n_kernel_params,) 的類陣列,預設為 None
用於評估對數邊際似然值的核心超參數。如果為 None,則會回傳
self.kernel_.theta
的預先計算對數邊際似然值。- eval_gradientbool,預設為 False
如果為 True,則會額外回傳在位置 theta 處相對於核心超參數的對數邊際似然值梯度。如果為 True,則 theta 不得為 None。
- clone_kernelbool,預設為 True
如果為 True,則會複製核心屬性。如果為 False,則會修改核心屬性,但可能會提高效能。
- 回傳值:
- log_likelihood浮點數
訓練資料的 theta 對數邊際似然值。
- log_likelihood_gradient形狀為 (n_kernel_params,) 的 ndarray,選用
在位置 theta 處相對於核心超參數的對數邊際似然值梯度。僅在 eval_gradient 為 True 時回傳。
- predict(X, return_std=False, return_cov=False)[原始碼]#
使用 Gaussian process 迴歸模型進行預測。
我們也可以使用 GP 先驗根據未擬合的模型進行預測。除了預測分佈的平均值之外,還可以選擇性地回傳其標準差 (
return_std=True
) 或共變異數 (return_cov=True
)。請注意,最多只能要求其中一個。- 參數:
- X形狀為 (n_samples, n_features) 的類陣列或物件列表
評估 GP 的查詢點。
- return_stdbool,預設為 False
如果為 True,則會在回傳平均值的同時,也回傳查詢點處預測分佈的標準差。
- return_covbool,預設為 False
如果為 True,則會在回傳平均值的同時,也回傳查詢點處聯合預測分佈的共變異數。
- 回傳值:
- y_mean形狀為 (n_samples,) 或 (n_samples, n_targets) 的 ndarray
查詢點處預測分佈的平均值。
- y_std形狀為 (n_samples,) 或 (n_samples, n_targets) 的 ndarray,選用
查詢點處預測分佈的標準差。僅在
return_std
為 True 時回傳。- y_cov形狀為 (n_samples, n_samples) 或 (n_samples, n_samples, n_targets) 的 ndarray,選用
查詢點處聯合預測分佈的共變異數。僅在
return_cov
為 True 時回傳。
- sample_y(X, n_samples=1, random_state=0)[原始碼]#
從 Gaussian process 繪製樣本並在 X 處評估。
- 參數:
- X形狀為 (n_samples_X, n_features) 的類陣列或物件列表
評估 GP 的查詢點。
- n_samplesint,預設為 1
每個查詢點從 Gaussian process 繪製的樣本數。
- random_stateint、RandomState 實例或 None,預設為 0
決定隨機數產生方式以隨機繪製樣本。傳入一個整數可在多次函式呼叫中產生可重現的結果。請參閱詞彙表。
- 回傳值:
- y_samples形狀為 (n_samples_X, n_samples) 或 (n_samples_X, n_targets, n_samples) 的 ndarray
從 Gaussian process 繪製並在查詢點處評估的 n_samples 個樣本值。
- score(X, y, sample_weight=None)[原始碼]#
回傳預測的判定係數。
判定係數 \(R^2\) 定義為 \((1 - \frac{u}{v})\),其中 \(u\) 是殘差平方和
((y_true - y_pred)** 2).sum()
,而 \(v\) 是總平方和((y_true - y_true.mean()) ** 2).sum()
。最佳的分數是 1.0,而且可能是負數 (因為模型可能會任意變差)。始終預測y
的預期值 (忽略輸入特徵) 的常數模型會獲得 0.0 的 \(R^2\) 分數。- 參數:
- X形狀為 (n_samples, n_features) 的類陣列
測試樣本。對於某些估算器,這可能是預先計算的核心矩陣,或形狀為
(n_samples, n_samples_fitted)
的一般物件列表,其中n_samples_fitted
是估算器擬合中使用的樣本數。- y形狀為 (n_samples,) 或 (n_samples, n_outputs) 的類陣列
X
的真實值。- sample_weight形狀為 (n_samples,) 的類陣列,預設為 None
樣本權重。
- 回傳值:
- score浮點數
self.predict(X)
相對於y
的 \(R^2\)。
註解
當在迴歸器上呼叫
score
時使用的 \(R^2\) 分數,從 0.23 版本開始使用multioutput='uniform_average'
,以保持與r2_score
的預設值一致。這會影響所有多輸出迴歸器的score
方法(除了MultiOutputRegressor
)。
- set_params(**params)[原始碼]#
設定此估計器的參數。
此方法適用於簡單的估計器以及巢狀物件(例如
Pipeline
)。後者具有<元件>__<參數>
形式的參數,因此可以更新巢狀物件的每個元件。- 參數:
- **paramsdict
估計器參數。
- 回傳值:
- self估計器實例
估計器實例。
- set_predict_request(*, return_cov: bool | None | str = '$UNCHANGED$', return_std: bool | None | str = '$UNCHANGED$') GaussianProcessRegressor [原始碼]#
請求傳遞給
predict
方法的中繼資料。請注意,只有在
enable_metadata_routing=True
時,此方法才相關(請參閱sklearn.set_config
)。請參閱 使用者指南,了解路由機制如何運作。每個參數的選項如下:
True
:請求中繼資料,如果提供,則傳遞給predict
。如果未提供中繼資料,則會忽略請求。False
:不請求中繼資料,並且 meta-estimator 不會將其傳遞給predict
。None
:不請求中繼資料,如果使用者提供,則 meta-estimator 將引發錯誤。str
:中繼資料應使用此給定別名而不是原始名稱傳遞給 meta-estimator。
預設值(
sklearn.utils.metadata_routing.UNCHANGED
)保留現有請求。這允許您變更某些參數的請求,而不變更其他參數。在 1.3 版本中加入。
注意
只有當此估計器用作 meta-estimator 的子估計器時,此方法才相關,例如在
Pipeline
內部使用。否則,它沒有任何作用。- 參數:
- return_covstr、True、False 或 None,預設值=sklearn.utils.metadata_routing.UNCHANGED
用於
predict
中return_cov
參數的中繼資料路由。- return_stdstr、True、False 或 None,預設值=sklearn.utils.metadata_routing.UNCHANGED
用於
predict
中return_std
參數的中繼資料路由。
- 回傳值:
- self物件
更新後的物件。
- set_score_request(*, sample_weight: bool | None | str = '$UNCHANGED$') GaussianProcessRegressor [原始碼]#
請求傳遞給
score
方法的中繼資料。請注意,只有在
enable_metadata_routing=True
時,此方法才相關(請參閱sklearn.set_config
)。請參閱 使用者指南,了解路由機制如何運作。每個參數的選項如下:
True
:請求中繼資料,如果提供,則傳遞給score
。如果未提供中繼資料,則會忽略請求。False
:不請求中繼資料,並且 meta-estimator 不會將其傳遞給score
。None
:不請求中繼資料,如果使用者提供,則 meta-estimator 將引發錯誤。str
:中繼資料應使用此給定別名而不是原始名稱傳遞給 meta-estimator。
預設值(
sklearn.utils.metadata_routing.UNCHANGED
)保留現有請求。這允許您變更某些參數的請求,而不變更其他參數。在 1.3 版本中加入。
注意
只有當此估計器用作 meta-estimator 的子估計器時,此方法才相關,例如在
Pipeline
內部使用。否則,它沒有任何作用。- 參數:
- sample_weightstr、True、False 或 None,預設值=sklearn.utils.metadata_routing.UNCHANGED
用於
score
中sample_weight
參數的中繼資料路由。
- 回傳值:
- self物件
更新後的物件。