當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Python sklearn GradientBoostingClassifier用法及代碼示例


本文簡要介紹python語言中 sklearn.ensemble.GradientBoostingClassifier 的用法。

用法:

class sklearn.ensemble.GradientBoostingClassifier(*, loss='deviance', 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)

用於分類的梯度提升。

GB 以正向stage-wise 方式構建加法模型;它允許優化任意可微損失函數。在每個階段 n_classes_ 回歸樹都適合二項式或多項式偏差損失函數的負梯度。二元分類是一種特殊情況,其中隻引入了一個回歸樹。

在用戶指南中閱讀更多信息。

參數

loss{‘deviance’, ‘exponential’},默認='偏差'

要優化的損失函數。 ‘deviance’ 指的是帶有概率輸出的分類的偏差(=邏輯回歸)。對於損失‘exponential’梯度提升恢複AdaBoost算法。

learning_rate浮點數,默認=0.1

學習率將每棵樹的貢獻縮小 learning_rate 。 learning_rate 和 n_estimators 之間存在權衡。

n_estimators整數,默認=100

要執行的升壓級數。梯度提升對於過度擬合相當穩健,因此大量通常會帶來更好的性能。

subsample浮點數,默認=1.0

用於擬合各個基礎學習器的樣本分數。如果小於 1.0,則會導致隨機梯度提升。 subsample 與參數 n_estimators 交互。選擇 subsample < 1.0 會導致方差減少和偏差增加。

criterion{‘friedman_mse’, ‘squared_error’, ‘mse’, ‘mae’},默認='friedman_mse'

測量分割質量的函數。支持的標準是均方誤差的‘friedman_mse’,Friedman 的改進分數,均方誤差的‘squared_error’,平均絕對誤差的‘mae’。 ‘friedman_mse’ 的默認值通常是最好的,因為它在某些情況下可以提供更好的近似值。

min_samples_splitint 或浮點數,默認=2

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

  • 如果是 int,則將 min_samples_split 視為最小數字。
  • 如果是浮點數,那麽 min_samples_split 是一個分數,而 ceil(min_samples_split * n_samples) 是每個拆分的最小樣本數。
min_samples_leafint 或浮點數,默認=1

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

  • 如果是 int,則將 min_samples_leaf 視為最小數字。
  • 如果是浮點數,那麽 min_samples_leaf 是分數,而 ceil(min_samples_leaf * n_samples) 是每個節點的最小樣本數。
min_weight_fraction_leaf浮點數,默認=0.0

需要在葉節點處的權重總和(所有輸入樣本的)的最小加權分數。當未提供sample_weight 時,樣本具有相同的權重。

max_depth整數,默認=3

單個回歸估計器的最大深度。最大深度限製了樹中的節點數。調整此參數以獲得最佳性能;最佳值取決於輸入變量的相互作用。

min_impurity_decrease浮點數,默認=0.0

如果該分裂導致雜質減少大於或等於該值,則該節點將被分裂。

加權雜質減少方程如下:

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是右孩子的樣本數.

N , N_t , N_t_RN_t_L 都是指加權和,如果通過了 sample_weight

init估計器或‘zero’,默認=無

用於計算初始預測的估計器對象。 init 必須提供 fitpredict_proba 。如果‘zero’,則初始原始預測設置為零。默認情況下,使用 DummyEstimator 預測類先驗。

random_stateint、RandomState 實例或無,默認=無

控製在每次提升迭代中給予每個樹估計器的隨機種子。此外,它還控製每次拆分時特征的隨機排列(有關詳細信息,請參閱注釋)。如果n_iter_no_change 不是None,它還控製訓練數據的隨機拆分以獲得驗證集。傳遞 int 以獲得跨多個函數調用的可重現輸出。請參閱詞匯表。

max_features{‘auto’, ‘sqrt’, ‘log2’}, int 或浮點數,默認=無

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

  • 如果是 int,則在每次拆分時考慮 max_features 特征。
  • 如果是浮點數,那麽 max_features 是一個分數,並且在每次拆分時都會考慮 int(max_features * n_features) 特征。
  • 如果 ‘auto’,那麽 max_features=sqrt(n_features)
  • 如果 ‘sqrt’,那麽 max_features=sqrt(n_features)
  • 如果 ‘log2’,那麽 max_features=log2(n_features)
  • 如果沒有,那麽 max_features=n_features

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

注意:在找到至少一個節點樣本的有效分區之前,對拆分的搜索不會停止,即使它需要有效地檢查超過 max_features 的特征。

verbose整數,默認=0

啟用詳細輸出。如果為 1,那麽它會不時打印進度和性能(樹越多,頻率越低)。如果大於 1,那麽它會打印每棵樹的進度和性能。

max_leaf_nodes整數,默認=無

以best-first 方式用max_leaf_nodes 種植樹。最佳節點定義為雜質的相對減少。如果 None 則無限數量的葉節點。

warm_start布爾,默認=假

當設置為 True 時,重用前一個調用的解決方案以適應並向集成添加更多估計器,否則,隻需刪除前一個解決方案。請參閱詞匯表。

validation_fraction浮點數,默認=0.1

留出作為提前停止驗證集的訓練數據的比例。必須介於 0 和 1 之間。僅在 n_iter_no_change 設置為整數時使用。

n_iter_no_change整數,默認=無

n_iter_no_change 用於決定當驗證分數沒有提高時是否使用提前停止來終止訓練。默認情況下,它設置為 None 以禁用提前停止。如果設置為一個數字,它將留出 validation_fraction 大小的訓練數據作為驗證,並在驗證分數在之前的所有 n_iter_no_change 迭代次數中都沒有提高時終止訓練。分裂是分層的。

tol浮點數,默認=1e-4

提前停止的公差。當 n_iter_no_change 迭代(如果設置為數字)的損失至少沒有改善 tol 時,訓練停止。

ccp_alpha非負浮點數,默認=0.0

用於最小Cost-Complexity 修剪的複雜度參數。將選擇具有最大成本複雜度且小於ccp_alpha 的子樹。默認情況下,不進行剪枝。有關詳細信息,請參閱最小 Cost-Complexity 修剪。

屬性

n_estimators_int

通過提前停止選擇的估計器數量(如果指定了n_iter_no_change)。否則設置為 n_estimators

feature_importances_ndarray 形狀 (n_features,)

基於雜質的特征重要性。

oob_improvement_ndarray 形狀(n_estimators,)

out-of-bag 樣本相對於前一次迭代的損失(=偏差)的改進。 oob_improvement_[0] 是第一階段損失相對於init 估計器的改進。僅在 subsample < 1.0 時可用

train_score_ndarray 形狀(n_estimators,)

i-th 分數 train_score_[i] 是模型在 in-bag 樣本上迭代 i 時的偏差(= 損失)。如果subsample == 1 這是訓練數據的偏差。

loss_LossFunction

具體的LossFunction 對象。

init_估計器

提供初始預測的估計器。通過 init 參數或 loss.init_estimator 設置。

estimators_ndarray of DecisionTreeRegressor of shape (n_estimators, loss_.K )

擬合sub-estimators 的集合。 loss_.K 為 1 表示二進製分類,否則為 n_classes。

classes_ndarray 形狀 (n_classes,)

類標簽。

n_features_int

已棄用:屬性 n_features_ 在版本 1.0 中已棄用,並將在 1.2 中刪除。

n_features_in_int

擬合期間看到的特征數。

feature_names_in_ndarray 形狀(n_features_in_,)

擬合期間看到的特征名稱。僅當 X 具有全為字符串的函數名稱時才定義。

n_classes_int

類的數量。

max_features_int

max_features 的推斷值。

注意

每次拆分時,特征總是隨機排列。因此,即使在相同的訓練數據和 max_features=n_features 的情況下,如果在搜索最佳拆分期間枚舉的幾個拆分的標準改進相同,則找到的最佳拆分可能會有所不同。要在擬合期間獲得確定性行為,必須修複 random_state

參考

J. Friedman,貪心函數逼近:梯度提升機,統計年鑒,卷。 2001 年第 29 期,第 5 期。

  1. 弗裏德曼,隨機梯度提升,1999

T. Hastie、R. Tibshirani 和 J. Friedman。統計學習的要素。 2,施普林格,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...

相關用法


注:本文由純淨天空篩選整理自scikit-learn.org大神的英文原創作品 sklearn.ensemble.GradientBoostingClassifier。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。