GradientBoostingClassifier#

class sklearn.ensemble.GradientBoostingClassifier(*, loss='log_loss', 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, 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]#

用於分類的梯度提升。

此演算法以逐步方式建立附加模型;它允許優化任意可微分的損失函數。在每個階段,會在損失函數的負梯度上擬合 n_classes_ 個迴歸樹,例如二元或多類別對數損失。二元分類是一種特殊情況,其中僅誘導單個迴歸樹。

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

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

參數:
loss{‘log_loss’, ‘exponential’}, default=’log_loss’

要最佳化的損失函數。'log_loss' 指的是二項式和多項式偏差,與邏輯迴歸中使用的相同。它對於機率輸出的分類是一個很好的選擇。對於損失 'exponential',梯度提升恢復了 AdaBoost 演算法。

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 版本中變更:新增了浮點值表示分數。

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 版本中變更:新增了浮點值表示分數。

min_weight_fraction_leaffloat, default=0.0

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

max_depthint 或 None, default=3

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

min_impurity_decreasefloat, default=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_proba。如果為 ‘zero’,則初始原始預測值會設定為零。預設情況下,會使用預測類別先驗機率的 DummyEstimator

random_stateint、RandomState 實例或 None,預設值=None

控制每次 boosting 迭代時給予每個樹狀估計器的隨機種子。此外,它控制每次分割時特徵的隨機排列(詳情請參閱「注意事項」)。如果 n_iter_no_change 不為 None,它還會控制訓練資料的隨機分割,以取得驗證集。傳遞 int 值以確保多次函式呼叫都能產生可重現的輸出。請參閱 詞彙表

max_features{‘sqrt’,‘log2’},int 或 float,預設值=None

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

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

  • 如果為 float,則值必須在 (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 個特徵。

verboseint,預設值=0

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

max_leaf_nodesint,預設值=None

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

warm_startbool,預設值=False

當設定為 True 時,重複使用先前呼叫 fit 的結果,並將更多估計器新增至集成,否則只會清除先前的結果。請參閱 詞彙表

validation_fractionfloat,預設值=0.1

為了提前停止而保留為驗證集的訓練資料比例。值必須在 (0.0, 1.0) 範圍內。只有在 n_iter_no_change 設定為整數時才使用。

在 0.20 版本中新增。

n_iter_no_changeint,預設值=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_int

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

在 0.20 版本中新增。

n_trees_per_iteration_int

每次迭代建立的樹狀結構數量。對於二元分類器,這始終為 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, n_trees_per_iteration_) 的 DecisionTreeRegressor 的 ndarray

擬合的子估計器集合。n_trees_per_iteration_ 對於二元分類為 1,否則為 n_classes

classes_形狀為 (n_classes,) 的 ndarray

類別標籤。

n_features_in_int

fit 期間看到的特徵數量。

在 0.24 版本中新增。

feature_names_in_形狀為 (n_features_in_,) 的 ndarray

fit 期間看到的特徵名稱。僅在 X 的特徵名稱都是字串時定義。

在 1.0 版本中新增。

n_classes_int

類別數量。

max_features_int

max_features 的推斷值。

另請參閱

HistGradientBoostingClassifier

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

sklearn.tree.DecisionTreeClassifier

決策樹分類器。

RandomForestClassifier

一個元估計器,它在資料集的各種子樣本上擬合多個決策樹分類器,並使用平均來提高預測準確度並控制過擬合。

AdaBoostClassifier

一個元估計器,它首先在原始資料集上擬合分類器,然後在同一資料集上擬合分類器的額外副本,其中會調整錯誤分類的實例權重,以便後續的分類器更專注於難以處理的案例。

注意事項

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

參考文獻

J. Friedman,《貪婪函數逼近:梯度提升機器》,統計年鑑,第 29 卷,第 5 期,2001 年。

  1. Friedman,隨機梯度提升,1999

T. Hastie, R. Tibshirani 和 J. Friedman。《統計學習要素》第二版,Springer,2009。

範例

以下範例展示如何使用 100 個決策樹樁作為弱學習器來擬合梯度提升分類器。

>>> from sklearn.datasets import make_hastie_10_2
>>> from sklearn.ensemble import GradientBoostingClassifier
>>> X, y = make_hastie_10_2(random_state=0)
>>> X_train, X_test = X[:2000], X[2000:]
>>> y_train, y_test = y[:2000], y[2000:]
>>> clf = GradientBoostingClassifier(n_estimators=100, learning_rate=1.0,
...     max_depth=1, random_state=0).fit(X_train, y_train)
>>> clf.score(X_test, y_test)
0.913...
apply(X)[原始碼]#

將集成中的樹應用於 X,傳回葉節點索引。

在 0.17 版本中新增。

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

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

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

對於 X 中的每個資料點 x 和集成中的每棵樹,傳回 x 在每個估計器中結束的葉節點索引。 在二元分類的情況下,n_classes 為 1。

decision_function(X)[原始碼]#

計算 X 的決策函數。

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

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

傳回:
score形狀為 (n_samples, n_classes) 或 (n_samples,) 的 ndarray

輸入樣本的決策函數,它對應於集成樹所預測的原始值。 類別的順序對應於屬性 classes_ 中的順序。 回歸和二元分類產生形狀為 (n_samples,) 的陣列。

property feature_importances_#

基於雜質的特徵重要性。

數值越高,特徵就越重要。 特徵的重要性計算為該特徵帶來的(正規化)準則總減少量。 這也稱為 Gini 重要性。

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

傳回:
feature_importances_形狀為 (n_features,) 的 ndarray

除非所有樹都是僅由根節點組成的單節點樹,否則此陣列的值總和為 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)[原始碼]#

取得此估計器的參數。

參數:
deep布林值,預設為 True

如果為 True,將傳回此估計器的參數和包含的子物件(這些子物件是估計器)。

傳回:
params字典

參數名稱對應到它們的值。

predict(X)[原始碼]#

預測 X 的類別。

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

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

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

預測值。

predict_log_proba(X)[原始碼]#

預測 X 的類別對數機率。

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

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

傳回:
p形狀為 (n_samples, n_classes) 的 ndarray

輸入樣本的類別對數機率。 類別的順序對應於屬性 classes_ 中的順序。

引發:
AttributeError

如果 loss 不支援機率。

predict_proba(X)[原始碼]#

預測 X 的類別機率。

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

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

傳回:
p形狀為 (n_samples, n_classes) 的 ndarray

輸入樣本的類別機率。 類別的順序對應於屬性 classes_ 中的順序。

引發:
AttributeError

如果 loss 不支援機率。

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

傳回給定測試資料和標籤的平均準確度。

在多標籤分類中,這是子集準確度,這是一個嚴苛的指標,因為您需要每個樣本正確預測每個標籤集。

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

測試樣本。

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

X 的真實標籤。

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

樣本權重。

傳回:
score浮點數

self.predict(X) 相對於 y 的平均準確度。

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

請求傳遞給 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>,因此可以更新巢狀物件的每個組件。

參數:
**params字典

估計器參數。

傳回:
self估計器實例

估計器實例。

set_score_request(*, sample_weight: bool | None | str = '$UNCHANGED$') GradientBoostingClassifier[來源]#

請求傳遞給 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_decision_function(X)[來源]#

計算 X 在每個迭代中的決策函數。

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

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

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

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

輸入樣本的決策函數,它對應於從集成樹預測的原始值。類別對應於屬性 classes_ 中的類別。迴歸和二元分類是 k == 1 的特殊情況,否則 k==n_classes

staged_predict(X)[來源]#

預測 X 在每個階段的類別。

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

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

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

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

輸入樣本的預測值。

staged_predict_proba(X)[來源]#

預測 X 在每個階段的類別機率。

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

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

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

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

輸入樣本的預測值。