【sklearn学习】集成算法之梯度提升树GBDT
梯度提升樹(Gradient Boosting Decision Tree, GBDT)是提升法中的代表算法
GBDT中包含Boosting三要素
- 損失函數:用以衡量模型預測結果與真實結果的差異
- 弱評估器:決策樹,不同的boosting算法使用不同的建樹流程
- 綜合集成結果:集成算法具體如何輸出集成結果
建模流程:
依據上一個弱評估器的結果,計算損失函數,并使用損失函數自適應影響下一個弱評估器的構建。集成模型輸出的結果,受到整體所有弱評估器的影響。
GBDT的不同
弱評估器
GBDT的弱評估器輸出類型不再和整體集成算法輸出類型一致,無論GBDT整體在執行回歸、分類、排序任務,弱評估器一定是回歸器。GBDT通過sigmoid或softmax函數輸出具體的分類結果,但實際弱評估器一定是回歸器。
損失函數
GBDT損失函數不再局限于固定或單一的某個損失函數
擬合殘差
GBDT通過修改后續弱評估器的擬合目標(標簽y)來直接影響后續弱評估器的結構,每次用于建立弱評估器的是樣本以及擋下集成輸出與真實標簽的差異,而Adaboost通過調整數據分布間接影響后續弱評估器。
抽樣思想
GBDT加入了隨機森林的隨機抽樣思想,在每次建樹前,允許對樣本和特征進行抽樣來增大弱評估器之間的獨立性。
sklearn 中集成了GBDT分類和GBDT回歸
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)
| 類型 | 參數/屬性 |
| 迭代過程 | 參數:n_extimators, learning_rate, loss, alpha, init 屬性:loss_, init_, extimators_ |
| 弱評估器結構 | criterion, max_depth, min_samples_split, min_samples_leaf, min_weight_fraction_leaf, max_leaf_nodes, min_impurity_decrease |
| 提前停止 | 參數:validation_fraction, n_iter_no_change, tol 屬性:n_estimators_ |
| 弱評估的器訓練數據 | 參數:subsam, max_featuures, random_state 屬性:oob_improvement, train_score_ |
| 其它 | ccp_alpha |
1. 迭代過程
n_estimators:具體迭代次數
learning_rate:學習率參數
init:輸入計算初始預測結果的估計器對象
可以輸入任意評估器,如決策樹、邏輯回歸等可以輸出概率的模型
字符串“zero”,代表從0開始迭代
None對象,默認為None對象,自動選擇類DummyEstimator中的某種默認方式進行預測作為結果
在init中輸入訓練好的模型會加重GBDT的過擬合,通常選擇None作為init的輸入
使用回歸器完成分類任務
多分類情況會按照實際的標簽數建立迭代次數*類別數個弱評估器
GBDT的8種損失函數
GBDT將損失函數從有限的指數損失、MSE推廣到任意可微函數
"deviance":交叉熵損失
二分類交叉熵損失
多分類交叉熵損失
二分類指數損失
多分類指數損失
平方誤差? squared_error
絕對誤差? absolute_error
Huber損失? huber
quantile損失? quantile
當高度關注離群值、并且希望努力將離群值預測正確時,選擇平方誤差squared_error
努力排除離群值影響、更關注非離群值的時候,選擇絕對誤差absolute_error
試圖平衡離群值與非離群值、沒有偏好時,選擇Huber或者Quantileloss
| 參數/屬性名 | 作用 |
| n_estimators | 集成算法種弱分類器數量,對Boosting算法而言為實際迭代次數 |
| learning_rate | Boosting算法中的學習率,影響弱分類器結果的加權求和過程 |
| loss、alpha | 需要優化的損失函數,以及特定損失函數需要調節的閾值 |
| init | 初始化預測結果H0的設置 |
| loss_ | 返回具體的損失函數對象 |
| init_ | 返回具體的初始化設置 |
| estimators_ | 返回實際建立的評估器列表 |
| n_estimators_ | 返回實際迭代次數 |
?對于GBDT,各個參數對算法的影響:
| 影響力 | 參數 |
| 幾乎總是具有巨大影響力 | n_estimators(整體學習能力) learning_rate(整體學習速率) max_features(隨機性) |
| 大部分時候具有影響力 | init(初始化) subsamples(隨機性) loss(整體學習能力) |
| 可能有大影響力,大部分時候影響力不明顯 | max_depth(粗剪枝) min_samples_split(精剪枝) min_impurity_decrease(精剪枝) max_leaf_nodes(精剪枝) criterion(分枝敏感度) |
| 當數據量足夠大時,幾乎無影響 | random_state ccp_alpha(結構風險) |
可以進行優化的參數:loss、criterion、init、n_estimators、learning_rate、max_features、subsamples、max_depth、min_impurity_decrease
| 參數 | 范圍 |
| loss | 'squared_error','absolute_error','huber','quantile' |
| criterion | 'friedman_mse','squared_error','mse','mae' |
| init | |
| n_estimators | (25,200,25) |
| learning_rate | (0.05,2.25,0.05) |
| max_features | |
| subsample | (0.1,0.8,0.1) |
| max_depth | (2,30,2) |
| min_impurity_decrease | (0,5,1) |
總結
以上是生活随笔為你收集整理的【sklearn学习】集成算法之梯度提升树GBDT的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 湛江59元一年的是什么保险 湛江59元一
- 下一篇: 商业保险保的是什么