unsetunsetHistGradientBoosting 介紹unsetunset
HistGradientBoosting
是 Scikit-learn 提供的一種高效快速的算法,特別適用於(yu) 大型數據集(樣本量超過 10,000)。
它是一種基於(yu) 直方圖的梯度提升樹模型,通過將連續特征值劃分為(wei) 離散的區間(稱為(wei) “bin”),顯著減少需要考慮的分裂點,從(cong) 而大大加快了計算速度。這使得它相比傳(chuan) 統的 GradientBoosting
更加高效。
https://scikit-learn.org/stable/modules/ensemble.html#histogram-based-gradient-boosting
主要特點
- 針對大數據集的高效性:
HistGradientBoostingRegressor
優化了大型數據集的處理能力(樣本量 ≥ 10,000)。通過使用直方圖技術,減少了需要考慮的分裂點數量,提升了模型的計算速度,尤其是在與傳統梯度提升方法相比時。 - 原生支持缺失值:該模型能夠直接處理數據集中的缺失值(NaN),無需額外的缺失值處理。在訓練過程中,模型在每個分裂點決定缺失值樣本應該分配到左子節點還是右子節點,依據的是能夠帶來更大收益的一方。在預測時,模型根據訓練時的決策來處理缺失值。
- 基於直方圖的分裂方式:模型通過將特征值分箱為固定數量的 bin(默認為 256 個),從而減少了分裂點的複雜性,極大加快了模型的計算效率。
- 借鑒 LightGBM:該算法受到了 LightGBM 的啟發,它也是一種通過直方圖技術加速訓練過程的梯度提升算法。
- 無需缺失值填充器:由於模型原生支持缺失值處理,不需要像其他模型那樣在預處理中對缺失值進行額外處理。
主要參數
learning_rate
(學習率):每次迭代時更新的步長。較低的學習率可能會提高模型的精度,但會導致訓練時間更長。max_iter
(最大迭代次數):提升(boosting)迭代的最大次數。max_leaf_nodes
(最大葉子節點數):控製每棵樹的葉子節點數,影響樹的複雜性。min_samples_leaf
(最小樣本數):形成葉子節點所需的最小樣本數。l2_regularization
(L2 正則化係數):控製 L2 正則化的強度,以減少過擬合。max_bins
(最大分箱數):用於將連續特征離散化的最大分箱數量。early_stopping
(早停法):如果模型性能在若幹輪迭代後沒有改善,可以提前停止訓練。
模型優(you) 勢
- 高效性:適用於傳統梯度提升模型計算開銷較大的大數據集。
- 處理缺失值:無需在預處理中處理缺失數據,模型原生支持。
- 訓練速度快:通過將特征值分箱成直方圖,加速了決策樹的生成過程。
unsetunset案例1:HGBT vs RFunsetunset
https://scikit-learn.org/stable/auto_examples/ensemble/plot_forest_hist_grad_boosting_comparison.html
在這個(ge) 示例中,我們(men) 比較了隨機森林(Random Forest, RF)和直方圖梯度提升樹(Histogram Gradient Boosting Trees, HGBT)模型在回歸數據集上的表現,主要通過得分和計算時間來衡量它們(men) 的性能。
通過調整控製樹的數量的參數來進行比較:
n_estimators
控製隨機森林中的樹的數量,是一個固定值。max_iter
是梯度提升模型中最大迭代次數,對回歸和二分類問題來說,迭代次數相當於樹的數量。同時,模型實際所需的樹的數量取決於停止準則。
HGBT 模型通過梯度提升算法逐步優(you) 化模型性能,每棵樹都會(hui) 擬合損失函數關(guan) 於(yu) 預測值的負梯度。而隨機森林基於(yu) 集成學習(xi) 中的“袋裝法”(bagging),通過多數投票來預測結果。
HGBT 模型提供了提前停止(early stopping)選項,如果模型在多個(ge) 迭代中性能不再提高,它會(hui) 停止添加新樹。相比之下,隨機森林需要調節樹的數量,但通常隻需要確保樹的數量足夠大,進一步增加不會(hui) 顯著提高測試分數即可。
unsetunset案例2:HGBT 特性演示unsetunset
https://scikit-learn.org/stable/auto_examples/ensemble/plot_hgbt_regression.html
Early stopping
設置過高的 max_iter
(最大迭代次數)可能會(hui) 導致預測質量下降,並浪費大量不必要的計算資源。因此,scikit-learn中的HGBT實現提供了自動早停策略。通過該策略,模型會(hui) 使用一部分訓練數據作為(wei) 內(nei) 部驗證集(由 validation_fraction
參數指定),並在驗證集分數在經過 n_iter_no_change
次迭代後沒有進一步提升(或變差)時停止訓練,允許一定的容差(由 tol
參數控製)。
common_params={"max_iter":1_000,"learning_rate":0.3,"validation_fraction":0.2,"random_state":42,"categorical_features":None,"scoring":"neg_root_mean_squared_error",}hgbt=HistGradientBoostingRegressor(early_stopping=True,**common_params)hgbt.fit(X_train,y_train)
Missing values
HGBT模型對缺失值有原生支持。在訓練過程中,每次分裂時,樹的生成器會(hui) 根據潛在的增益決(jue) 定帶有缺失值的樣本應該去往左子節點還是右子節點。模型會(hui) 在訓練時“學習(xi) ”出處理缺失值的策略。
Quantile loss
hgbt_quantile=HistGradientBoostingRegressor(loss="quantile",quantile=quantile,**common_params)
Monotonic constraints
在某些具有特定領域知識的場景下,可能要求特征與(yu) 目標變量之間的關(guan) 係是單調增加或單調減少的。為(wei) 了滿足這一需求,可以在直方圖梯度提升樹(HGBT)模型中使用單調約束來強製預測的單調性。
如果訓練數據包含特征名稱,則可以通過傳(chuan) 遞一個(ge) 字典來指定這些特征的單調約束。約束的規則如下:
1
: 單調增加0
: 沒有約束-1
: 單調減少
monotonic_cst={"date":0,"day":0,"period":0,"nswdemand":1,"nswprice":1,"vicdemand":-1,"vicprice":-1,}hgbt_no_cst=HistGradientBoostingRegressor(categorical_features=None,random_state=42).fit(X,y)
評論已經被關(guan) 閉。