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
,則N
、N_t
、N_t_R
和N_t_L
都指的是加權總和。在版本 0.19 中新增。
- init估計器或 ‘zero’,預設值=None
用於計算初始預測的估計器物件。
init
必須提供 fit 和 predict。如果為 ‘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.
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
在
fit
中monitor
參數的中繼資料路由。- sample_weightstr、True、False 或 None,預設值 = sklearn.utils.metadata_routing.UNCHANGED
在
fit
中sample_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
score
中sample_weight
參數的中繼資料路由。
- 傳回值:
- self物件
更新後的物件。