GradientBoostingRegressor#

class sklearn.ensemble.GradientBoostingRegressor(*, loss='squared_error', learning_rate=0.1, n_estimators=100, subsample=1.0, criterion='friedman_mse', min_samples_split=2, min_samples_leaf=1, min_weight_fraction_leaf=0.0, max_depth=3, min_impurity_decrease=0.0, init=None, random_state=None, max_features=None, alpha=0.9, verbose=0, max_leaf_nodes=None, warm_start=False, validation_fraction=0.1, n_iter_no_change=None, tol=0.0001, ccp_alpha=0.0)[source]#

用於迴歸的梯度提升。

此估計器以正向逐步的方式建立加法模型;它允許對任意可微分損失函數進行優化。在每個階段,都會在給定損失函數的負梯度上擬合一個迴歸樹。

HistGradientBoostingRegressor 是此演算法的更快變體,適用於中大型數據集 ( n_samples >= 10_000 ),並且支援單調約束。

請在 使用者指南 中閱讀更多內容。

參數:
loss{‘squared_error’, ‘absolute_error’, ‘huber’, ‘quantile’}, default=’squared_error’

要最佳化的損失函數。'squared_error' 指的是迴歸的平方誤差。'absolute_error' 指的是迴歸的絕對誤差,它是一種穩健的損失函數。'huber' 是兩者的組合。'quantile' 允許分位數迴歸(使用 alpha 指定分位數)。請參閱 用於梯度提升迴歸的預測區間,其中舉例說明了如何使用 loss='quantile' 來建立預測區間的分位數迴歸。

learning_ratefloat, default=0.1

學習速率會將每棵樹的貢獻縮小 learning_rate。學習速率和 n_estimators 之間存在權衡。值必須在 [0.0, inf) 範圍內。

n_estimatorsint, default=100

要執行的提升階段數。梯度提升對過擬合相當穩健,因此通常較大的數字會帶來更好的效能。值必須在 [1, inf) 範圍內。

subsamplefloat, default=1.0

用於擬合個別基礎學習器的樣本比例。如果小於 1.0,則會產生隨機梯度提升。subsample 會與參數 n_estimators 相互作用。選擇 subsample < 1.0 會導致變異數減少和偏差增加。值必須在 (0.0, 1.0] 範圍內。

criterion{‘friedman_mse’, ‘squared_error’}, default=’friedman_mse’

衡量分割品質的函數。支援的準則包括:針對均方誤差的「friedman_mse」(使用 Friedman 的改進分數)、針對均方誤差的「squared_error」。預設值「friedman_mse」通常是最佳的,因為在某些情況下,它可以提供更好的近似值。

在 0.18 版中新增。

min_samples_splitint 或 float, default=2

分割內部節點所需的最小樣本數

  • 如果為 int,則值必須在 [2, inf) 範圍內。

  • 如果為 float,則值必須在 (0.0, 1.0] 範圍內,並且 min_samples_split 將為 ceil(min_samples_split * n_samples)

在 0.18 版中變更: 新增了用於分數的 float 值。

min_samples_leafint 或 float, default=1

葉節點所需的最小樣本數。只有在每個左分支和右分支中至少保留 min_samples_leaf 個訓練樣本時,才會考慮任何深度的分割點。這可能會產生平滑模型的效果,尤其是在迴歸中。

  • 如果為 int,則值必須在 [1, inf) 範圍內。

  • 如果為 float,則值必須在 (0.0, 1.0) 範圍內,並且 min_samples_leaf 將為 ceil(min_samples_leaf * n_samples)

在 0.18 版中變更: 新增了用於分數的 float 值。

min_weight_fraction_leaffloat, default=0.0

葉節點所需的權重總和(所有輸入樣本的權重總和)的最小加權分數。當未提供 sample_weight 時,樣本的權重相等。值必須在 [0.0, 0.5] 範圍內。

max_depthint 或 None, default=3

個別迴歸估計器的最大深度。最大深度限制了樹中節點的數量。調整此參數以獲得最佳效能;最佳值取決於輸入變數的交互作用。如果為 None,則會展開節點,直到所有葉節點都為純節點,或直到所有葉節點包含的樣本數少於 min_samples_split 個。如果為整數,則值必須在範圍 [1, inf) 內。

min_impurity_decreasefloat,預設值=0.0

如果此分割導致雜質度減少量大於或等於此值,則會分割節點。值必須在範圍 [0.0, inf) 內。

加權雜質度減少量的方程式如下

N_t / N * (impurity - N_t_R / N_t * right_impurity
                    - N_t_L / N_t * left_impurity)

其中 N 是樣本總數,N_t 是目前節點的樣本數,N_t_L 是左子節點的樣本數,而 N_t_R 是右子節點的樣本數。

如果傳遞了 sample_weight,則 NN_tN_t_RN_t_L 都指的是加權總和。

在版本 0.19 中新增。

init估計器或 ‘zero’,預設值=None

用於計算初始預測的估計器物件。init 必須提供 fitpredict。如果為 ‘zero’,則初始原始預測會設定為零。預設情況下,會使用 DummyEstimator,預測平均目標值(對於 loss=’squared_error’),或其他損失的量值。

random_state整數、RandomState 實例或 None,預設值=None

控制在每次提升迭代時提供給每個樹估計器的隨機種子。此外,它還控制每次分割時的特徵隨機排列(有關更多詳細資訊,請參閱「注意事項」)。如果 n_iter_no_change 不為 None,它還會控制訓練資料的隨機分割,以取得驗證集。傳遞整數可跨多個函式呼叫產生可重現的輸出。請參閱 詞彙表

max_features{‘sqrt’, ‘log2’}、整數或浮點數,預設值=None

尋找最佳分割時要考慮的特徵數量

  • 如果為 int,則值必須在 [1, inf) 範圍內。

  • 如果為浮點數,則值必須在範圍 (0.0, 1.0] 內,並且每次分割時考慮的特徵將為 max(1, int(max_features * n_features_in_))

  • 如果為「sqrt」,則 max_features=sqrt(n_features)

  • 如果為「log2」,則 max_features=log2(n_features)

  • 如果為 None,則 max_features=n_features

選擇 max_features < n_features 會導致變異數減少和偏差增加。

注意:除非找到至少一個有效的節點樣本分割,否則不會停止尋找分割,即使這需要實際檢查超過 max_features 個特徵。

alphafloat,預設值=0.9

Huber 損失函數和量值損失函數的 alpha 量值。僅當 loss='huber'loss='quantile' 時。值必須在範圍 (0.0, 1.0) 內。

verbose整數,預設值=0

啟用詳細輸出。如果為 1,則會不時列印進度和效能(樹越多,頻率越低)。如果大於 1,則會列印每棵樹的進度和效能。值必須在範圍 [0, inf) 內。

max_leaf_nodes整數,預設值=None

以最佳優先方式成長具有 max_leaf_nodes 的樹。最佳節點定義為雜質度的相對減少。值必須在範圍 [2, inf) 內。如果為 None,則表示葉節點數量不受限制。

warm_start布林值,預設值=False

當設定為 True 時,重複使用先前 fit 呼叫的解決方案,並向集成模型新增更多估計器,否則,只會清除先前的解決方案。請參閱 詞彙表

validation_fractionfloat,預設值=0.1

設定為保留驗證集的訓練資料比例。值必須在範圍 (0.0, 1.0) 內。僅當 n_iter_no_change 設定為整數時才使用。

在版本 0.20 中新增。

n_iter_no_change整數,預設值=None

n_iter_no_change 用於決定是否使用提前停止來終止訓練,當驗證分數沒有改善時。預設情況下,它設定為 None 以停用提前停止。如果設定為數字,它會將 validation_fraction 大小的訓練資料設定為驗證,並且當驗證分數在先前 n_iter_no_change 次迭代中都沒有改善時終止訓練。值必須在範圍 [1, inf) 內。請參閱 梯度提升中的提前停止

在版本 0.20 中新增。

tolfloat,預設值=1e-4

提前停止的容差。當損失在 n_iter_no_change 次迭代(如果設定為數字)中沒有至少改善 tol 時,訓練就會停止。值必須在範圍 [0.0, inf) 內。

在版本 0.20 中新增。

ccp_alpha非負浮點數,預設值=0.0

用於最小成本複雜度剪枝的複雜度參數。將選擇成本複雜度小於 ccp_alpha 的最大成本複雜度的子樹。預設情況下,不執行任何剪枝。值必須在範圍 [0.0, inf) 內。如需詳細資訊,請參閱 最小成本複雜度剪枝。如需此類剪枝的範例,請參閱 使用成本複雜度剪枝來進行後剪枝決策樹

在版本 0.22 中新增。

屬性:
n_estimators_整數

提前停止選取的估計器數量(如果指定了 n_iter_no_change)。否則,它會設定為 n_estimators

n_trees_per_iteration_整數

每次迭代時建置的樹狀結構數量。對於迴歸器,這永遠是 1。

在版本 1.4.0 中新增。

feature_importances_形狀為 (n_features,) 的 ndarray

基於雜質度的特徵重要性。

oob_improvement_形狀為 (n_estimators,) 的 ndarray

相對於先前的迭代,袋外樣本損失的改善。oob_improvement_[0] 是第一階段相對於 init 估計器的損失改善。僅當 subsample < 1.0 時可用。

oob_scores_形狀為 (n_estimators,) 的 ndarray

袋外樣本損失值的完整歷史記錄。僅當 subsample < 1.0 時可用。

在版本 1.3 中新增。

oob_score_float

袋外樣本損失的最後一個值。它與 oob_scores_[-1] 相同。僅當 subsample < 1.0 時可用。

在版本 1.3 中新增。

train_score_形狀為 (n_estimators,) 的 ndarray

第 i 個分數 train_score_[i] 是模型在第 i 次迭代時在袋內樣本上的損失。如果 subsample == 1,則這是訓練資料上的損失。

init_估計器

提供初始預測的估算器。透過 init 參數設定。

estimators_形狀為 (n_estimators, 1) 的 DecisionTreeRegressor 陣列

已擬合的子估算器的集合。

n_features_in_int

fit 期間看到的特徵數量。

在 0.24 版本中新增。

feature_names_in_形狀為 (n_features_in_,) 的陣列

fit 期間看到的特徵名稱。僅當 X 具有全部為字串的特徵名稱時定義。

在 1.0 版本中新增。

max_features_int

推斷出的 max_features 值。

另請參閱

HistGradientBoostingRegressor

基於直方圖的梯度提升分類樹。

sklearn.tree.DecisionTreeRegressor

決策樹迴歸器。

sklearn.ensemble.RandomForestRegressor

隨機森林迴歸器。

注意事項

特徵在每次分割時總是隨機排列。因此,即使使用相同的訓練資料和 max_features=n_features,如果多個在搜尋最佳分割期間枚舉的分割的準則改進相同,則找到的最佳分割也可能有所不同。若要在擬合期間獲得確定性行為,則必須固定 random_state

參考文獻

J. Friedman, Greedy Function Approximation: A Gradient Boosting Machine, The Annals of Statistics, Vol. 29, No. 5, 2001.

  1. Friedman, Stochastic Gradient Boosting, 1999

T. Hastie, R. Tibshirani and J. Friedman. Elements of Statistical Learning Ed. 2, Springer, 2009.

範例

>>> from sklearn.datasets import make_regression
>>> from sklearn.ensemble import GradientBoostingRegressor
>>> from sklearn.model_selection import train_test_split
>>> X, y = make_regression(random_state=0)
>>> X_train, X_test, y_train, y_test = train_test_split(
...     X, y, random_state=0)
>>> reg = GradientBoostingRegressor(random_state=0)
>>> reg.fit(X_train, y_train)
GradientBoostingRegressor(random_state=0)
>>> reg.predict(X_test[1:2])
array([-61...])
>>> reg.score(X_test, y_test)
0.4...

如需使用 GradientBoostingRegressor 擬合弱預測模型的集成之詳細範例,請參閱 梯度提升迴歸

apply(X)[原始碼]#

將集成中的樹狀結構應用於 X,返回葉節點索引。

在 0.17 版本中新增。

參數:
X形狀為 (n_samples, n_features) 的類陣列或稀疏矩陣

輸入樣本。在內部,其 dtype 將轉換為 dtype=np.float32。如果提供稀疏矩陣,它將轉換為稀疏的 csr_matrix

傳回值:
X_leaves形狀為 (n_samples, n_estimators) 的類陣列

對於 X 中的每個資料點 x 和集成中的每棵樹,返回 x 在每個估算器中結束的葉節點索引。

property feature_importances_#

基於雜質度的特徵重要性。

越高,表示特徵越重要。特徵的重要性計算為該特徵所帶來的準則(正規化)總減少量。它也被稱為 Gini 重要性。

警告:基於雜質的特徵重要性可能會對高基數特徵(許多唯一值)產生誤導。請參閱 sklearn.inspection.permutation_importance 作為替代方案。

傳回值:
feature_importances_形狀為 (n_features,) 的陣列

除非所有樹都是僅由根節點組成的單一節點樹,否則此陣列的值總和為 1,在這種情況下,它將是一個零陣列。

fit(X, y, sample_weight=None, monitor=None)[原始碼]#

擬合梯度提升模型。

參數:
X形狀為 (n_samples, n_features) 的類陣列或稀疏矩陣

輸入樣本。在內部,它將轉換為 dtype=np.float32,如果提供稀疏矩陣,則轉換為稀疏的 csr_matrix

y形狀為 (n_samples,) 的類陣列

目標值(分類中的字串或整數,迴歸中的實數)對於分類,標籤必須對應於類別。

sample_weight形狀為 (n_samples,) 的類陣列,預設值為 None

樣本權重。如果為 None,則樣本的權重相等。在搜尋每個節點中的分割時,將會忽略會建立淨權重為零或負數的子節點的分割。在分類的情況下,如果它們會導致任何單一類別在任一子節點中攜帶負權重,則也會忽略分割。

monitor可呼叫物件,預設值為 None

在每次迭代後,會以目前迭代、估算器的參考和 _fit_stages 的區域變數作為關鍵字引數 callable(i, self, locals()) 呼叫監視器。如果可呼叫物件傳回 True,則會停止擬合程序。監視器可用於各種用途,例如計算保留估計值、提前停止、模型內省和快照。

傳回值:
self物件

已擬合的估算器。

get_metadata_routing()[原始碼]#

取得此物件的中繼資料路由。

請查看 使用者指南,了解路由機制如何運作。

傳回值:
routingMetadataRequest

封裝路由資訊的 MetadataRequest

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

取得此估算器的參數。

參數:
deepbool,預設值為 True

如果為 True,則會傳回此估算器的參數和其中包含的子物件(估算器)。

傳回值:
paramsdict

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

predict(X)[原始碼]#

預測 X 的迴歸目標。

參數:
X形狀為 (n_samples, n_features) 的類陣列或稀疏矩陣

輸入樣本。在內部,它將轉換為 dtype=np.float32,如果提供稀疏矩陣,則轉換為稀疏的 csr_matrix

傳回值:
y形狀為 (n_samples,) 的 ndarray

預測值。

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

樣本權重。

傳回值:
scorefloat

self.predict(X) 相對於 y\(R^2\)

注意事項

在對迴歸器呼叫 score 時使用的 \(R^2\) 分數,從 0.23 版本開始使用 multioutput='uniform_average',以與 r2_score 的預設值保持一致。這會影響所有多輸出迴歸器的 score 方法(MultiOutputRegressor 除外)。

set_fit_request(*, monitor: bool | None | str = '$UNCHANGED$', sample_weight: bool | None | str = '$UNCHANGED$') GradientBoostingRegressor[原始碼]#

請求傳遞至 fit 方法的中繼資料。

請注意,只有在 enable_metadata_routing=True 時,此方法才相關(請參閱 sklearn.set_config)。請參閱關於路由機制如何運作的使用者指南

每個參數的選項如下:

  • True:請求中繼資料,並在提供時傳遞至 fit。如果未提供中繼資料,則會忽略此請求。

  • False:不請求中繼資料,且後設估算器不會將其傳遞至 fit

  • None:不請求中繼資料,且如果使用者提供,後設估算器將會引發錯誤。

  • str:中繼資料應以這個指定的別名而非原始名稱傳遞至後設估算器。

預設值 (sklearn.utils.metadata_routing.UNCHANGED) 會保留現有的請求。這讓您可以變更某些參數的請求,而其他參數則不變。

在版本 1.3 中新增。

注意

只有當此估算器用作後設估算器的子估算器時,此方法才相關,例如在 Pipeline 內使用。否則,它不會產生任何效果。

參數:
monitorstr、True、False 或 None,預設值 = sklearn.utils.metadata_routing.UNCHANGED

fitmonitor 參數的中繼資料路由。

sample_weightstr、True、False 或 None,預設值 = sklearn.utils.metadata_routing.UNCHANGED

fitsample_weight 參數的中繼資料路由。

傳回值:
self物件

更新後的物件。

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

設定此估算器的參數。

此方法適用於簡單估算器以及巢狀物件(例如 Pipeline)。後者具有 <component>__<parameter> 形式的參數,因此可以更新巢狀物件的每個元件。

參數:
**paramsdict

估算器參數。

傳回值:
self估算器執行個體

估算器執行個體。

set_score_request(*, sample_weight: bool | None | str = '$UNCHANGED$') GradientBoostingRegressor[原始碼]#

請求傳遞至 score 方法的中繼資料。

請注意,只有在 enable_metadata_routing=True 時,此方法才相關(請參閱 sklearn.set_config)。請參閱關於路由機制如何運作的使用者指南

每個參數的選項如下:

  • True:請求中繼資料,並在提供時傳遞至 score。如果未提供中繼資料,則會忽略此請求。

  • False:不請求中繼資料,且後設估算器不會將其傳遞至 score

  • None:不請求中繼資料,且如果使用者提供,後設估算器將會引發錯誤。

  • str:中繼資料應以這個指定的別名而非原始名稱傳遞至後設估算器。

預設值 (sklearn.utils.metadata_routing.UNCHANGED) 會保留現有的請求。這讓您可以變更某些參數的請求,而其他參數則不變。

在版本 1.3 中新增。

注意

只有當此估算器用作後設估算器的子估算器時,此方法才相關,例如在 Pipeline 內使用。否則,它不會產生任何效果。

參數:
sample_weightstr、True、False 或 None,預設值 = sklearn.utils.metadata_routing.UNCHANGED

scoresample_weight 參數的中繼資料路由。

傳回值:
self物件

更新後的物件。

staged_predict(X)[原始碼]#

針對 X 的每個階段預測迴歸目標。

此方法允許在每個階段後進行監控(即確定測試集上的誤差)。

參數:
X形狀為 (n_samples, n_features) 的類陣列或稀疏矩陣

輸入樣本。在內部,它將轉換為 dtype=np.float32,如果提供稀疏矩陣,則轉換為稀疏的 csr_matrix

產生:
y形狀為 (n_samples,) 的 ndarray 產生器

輸入樣本的預測值。