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
,則N
、N_t
、N_t_R
和N_t_L
皆指加權總和。在 0.19 版本中新增。
- init估計器或 ‘zero’,預設值=None
用於計算初始預測的估計器物件。
init
必須提供 fit 和 predict_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 年。
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
fit
中monitor
參數的元數據路由。- sample_weightstr、True、False 或 None,預設值 = sklearn.utils.metadata_routing.UNCHANGED
fit
中sample_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
score
中sample_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
。