Scikit-Learn -集成學(xué)習(xí):boosting(3萬字詳解)
在公眾號(hào)「python風(fēng)控模型」里回復(fù)關(guān)鍵字:學(xué)習(xí)資料?
QQ學(xué)習(xí)群:1026993837 領(lǐng)學(xué)習(xí)資料? ? ? ? ? ??

目錄?
介紹
GradientBoostingRegressor
GradientBossting分類器
AdaBoost 回歸器
AdaBoost分類器
參考
介紹?
Boosting 是一種集成學(xué)習(xí),我們按順序訓(xùn)練估計(jì)器,而不是并行訓(xùn)練所有估計(jì)器。我們嘗試創(chuàng)建一些快速簡單(弱但比隨機(jī)猜測更好)的模型,然后結(jié)合所有弱估計(jì)器的結(jié)果來做出最終預(yù)測。我們已經(jīng)在bagging & random forests教程中討論了另一種集成學(xué)習(xí)方法。如果您想了解它,請隨時(shí)瀏覽它。
Scikit-learn 為分類和回歸問題提供了兩種不同的增強(qiáng)算法:
梯度樹提升(梯度提升決策樹)?- 它迭代地構(gòu)建學(xué)習(xí)器,弱學(xué)習(xí)器在預(yù)測錯(cuò)誤的樣本錯(cuò)誤上進(jìn)行訓(xùn)練。它最初從一個(gè)學(xué)習(xí)者開始,然后迭代地添加學(xué)習(xí)者。它試圖通過迭代地添加新樹來最小化損失。它使用決策樹是弱估計(jì)器。Scikit-learn 提供了兩個(gè)類,用于實(shí)現(xiàn)
Gradient Tree Boosting
分類和回歸問題。梯度提升分類器GradientBoostingClassifier
梯度提升回歸器GradientBoostingRegressor
Adaptive Boost?- 它在修改后的數(shù)據(jù)上迭代地?cái)M合弱估計(jì)器列表。然后它根據(jù)加權(quán)投票組合所有估計(jì)器的結(jié)果以生成最終結(jié)果。在每次迭代中,將高權(quán)重分配給在前一次迭代中預(yù)測錯(cuò)誤的樣本,并為那些在前一次迭代中預(yù)測正確的樣本減少權(quán)重。這使模型能夠?qū)W⒂诔鲥e(cuò)的樣本。最初,所有樣本都被分配相同的權(quán)重(1/ n_samples)。它讓我們指定用于該過程的估計(jì)器。Scikit-learn 提供了兩個(gè)類,用于實(shí)現(xiàn)
Adaptive Boosting
分類和回歸問題。AdaBoost分類器
AdaBoost 回歸器
這結(jié)束了我們對 Boosting 過程的簡短介紹。我們現(xiàn)在將從編碼部分開始。
我們將從導(dǎo)入必要的庫開始。
加載數(shù)據(jù)集?
為了我們的目的,我們將加載下面提到的兩個(gè)。
數(shù)字?jǐn)?shù)據(jù)集:我們將使用具有數(shù)字大小圖像的數(shù)字?jǐn)?shù)據(jù)
8x8
集0-9
。我們將在下面的分類任務(wù)中使用數(shù)字?jǐn)?shù)據(jù)。波士頓住房數(shù)據(jù)集:我們將使用波士頓住房數(shù)據(jù)集,其中包含有關(guān)各種房屋屬性的信息,例如平均房間數(shù)量、城鎮(zhèn)人均犯罪率等。我們將使用它進(jìn)行回歸任務(wù)。
Sklearn 提供這兩個(gè)數(shù)據(jù)集作為datasets
模塊的一部分。我們可以通過調(diào)用load_digits()
和load_boston()
方法來加載它們。它返回類似字典的對象BUNCH
,可用于檢索特征和目標(biāo)。
GradientBoostingRegressor?
可GradientBoostingRegressor
??作為ensemble
sklearn 模塊的一部分使用。我們將使用波士頓住房數(shù)據(jù)訓(xùn)練默認(rèn)模型,然后通過嘗試各種超參數(shù)設(shè)置來調(diào)整模型以提高其性能。我們還將它與其他回歸估計(jì)器進(jìn)行比較,以檢查其相對于其他機(jī)器學(xué)習(xí)模型的性能。
GradientBoostingRegressor
的重要屬性
以下是一些重要屬性,GradientBoostingRegressor
一旦模型經(jīng)過訓(xùn)練,這些屬性就可以提供重要信息。
feature_importances_
- 它返回一個(gè)浮點(diǎn)數(shù)組,表示數(shù)據(jù)集中每個(gè)特征的重要性。estimators_
- 它返回訓(xùn)練有素的估計(jì)器。oob_improvement_
- 它返回大小數(shù)組 (n_estimators,)。數(shù)組中的每個(gè)值都表示袋外樣本相對于前一次迭代的損失有所改善。loss_
- 它返回?fù)p失函數(shù)作為對象。
通過對各種超參數(shù)進(jìn)行網(wǎng)格搜索來微調(diào)模型?
以下是需要調(diào)整以獲得最適合我們數(shù)據(jù)的常見超參數(shù)列表。我們將嘗試對訓(xùn)練/測試數(shù)據(jù)的各種拆分進(jìn)行各種超參數(shù)設(shè)置,以找出最佳擬合,這對于訓(xùn)練和測試數(shù)據(jù)集具有幾乎相同的精度,或者在精度之間的差異非常小。
learning_rate?- 它縮小了每棵樹的貢獻(xiàn)。learning_rate 和 n_estimatros 之間存在權(quán)衡。
n_estimators?- 其結(jié)果將被組合以產(chǎn)生最終預(yù)測的基本估計(jì)器的數(shù)量。?
default=100
max_depth?- 單個(gè)樹的最大深度。我們需要找到最佳價(jià)值。
default=3
min_samples_split?- 拆分內(nèi)部節(jié)點(diǎn)所需的樣本數(shù)。它接受
int(0-n_samples)
,float(0.0-0.5]
值。Float 采用 ceil(min_samples_split * n_samples) 特征。default=2
min_samples_leaf?- 葉節(jié)點(diǎn)所需的最小樣本數(shù)。它接受
int(0-n_samples)
,float(0.0-0.5]
值。Float 采用 ceil(min_samples_leaf * n_samples) 特征。default=1
標(biāo)準(zhǔn)- 我們算法試圖最小化的成本函數(shù)。目前它支持 mse(均方誤差)和 mae(平均絕對誤差)。
default=friedman_mse
max_features?- 進(jìn)行拆分時(shí)要考慮的特征數(shù)。它接受
int(0-n_features)
,?float(0.0-0.5]
,string(sqrt, log2, auto) or None
作為值。default=None
None?- 如果提供 None,則 n_features 用作值。
sqrt?- sqrt(n_features) 特征用于分割。
auto?- sqrt(n_features) 特征用于分割。
log2?- log2(n_features) 特征用于分割。
validation_fraction?- 它是指用于早期停止驗(yàn)證的訓(xùn)練數(shù)據(jù)的比例。它接受
float(0.0,1.0)
?default=0.1
我們將在下面嘗試上述超參數(shù)的各種值,通過對數(shù)據(jù)進(jìn)行 3 折交叉驗(yàn)證來找到我們數(shù)據(jù)集的最佳估計(jì)器。
輸出前幾個(gè)交叉驗(yàn)證結(jié)果?

比較梯度提升與 Bagging、隨機(jī)森林、額外樹、決策樹和額外樹的性能
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ????? ?
GradientBossting分類器
可GradientBosstingClassifier
??作為ensemble
sklearn 模塊的一部分使用。我們將使用數(shù)字?jǐn)?shù)據(jù)訓(xùn)練默認(rèn)模型,然后通過嘗試各種超參數(shù)設(shè)置來調(diào)整模型以提高其性能。我們還將它與其他分類估計(jì)器進(jìn)行比較,以檢查其相對于其他機(jī)器學(xué)習(xí)模型的性能。
GradientBoostingClassifier
重要屬性
GradientBoostingClassifier
具有與 相同的屬性集GradientBoostingRegressor
。
通過對各種超參數(shù)進(jìn)行網(wǎng)格搜索來微調(diào)模型?
GradientBoostingClassifier
幾乎所有參數(shù)都與GradientBoostingRegressor
輸出前幾個(gè)交叉驗(yàn)證結(jié)果?

比較梯度提升與 Bagging、隨機(jī)森林、額外樹、決策樹和額外樹的性能?
AdaBoost 回歸器?
可AdaBoostRegressor
??作為ensemble
sklearn 模塊的一部分使用。我們將使用波士頓住房數(shù)據(jù)訓(xùn)練默認(rèn)模型,然后通過嘗試各種超參數(shù)設(shè)置來調(diào)整模型以提高其性能。我們還將它與其他回歸估計(jì)器進(jìn)行比較,以檢查其相對于其他機(jī)器學(xué)習(xí)模型的性能。
AdaBoostRegressor的重要屬性
以下是一些重要屬性,AdaBoostRegressor
一旦模型經(jīng)過訓(xùn)練,這些屬性就可以提供重要信息。
base_estimator_
- 它返回基估計(jì)器,從中創(chuàng)建由弱估計(jì)器組成的整個(gè)強(qiáng)估計(jì)器。feature_importances_
- 它返回一個(gè)浮點(diǎn)數(shù)組,表示數(shù)據(jù)集中每個(gè)特征的重要性。estimators_
- 它返回訓(xùn)練有素的估計(jì)器。
通過對各種超參數(shù)進(jìn)行網(wǎng)格搜索來微調(diào)模型?
以下是需要調(diào)整以最適合我們的數(shù)據(jù)的常見超參數(shù)列表。我們將對訓(xùn)練/測試數(shù)據(jù)的各種拆分嘗試各種超參數(shù)設(shè)置,以找出最佳擬合,這對于訓(xùn)練和測試數(shù)據(jù)集具有幾乎相同的準(zhǔn)確度,或者準(zhǔn)確度之間的差異非常小。
base_estimator?- 它讓我們指定將創(chuàng)建集成的基本估計(jì)器。它可以是任何其他機(jī)器學(xué)習(xí)估計(jì)器,例如 KNearestNeighbors、DecisionTree 等。默認(rèn)是最大深度為 3 的決策樹。
learning_rate?- 它縮小了每棵樹的貢獻(xiàn)。learning_rate 和 n_estimatros 之間存在權(quán)衡。
n_estimators?- 其結(jié)果將被組合以產(chǎn)生最終預(yù)測的基本估計(jì)器的數(shù)量。?
default=100
我們將在下面嘗試上述超參數(shù)的各種值,通過對數(shù)據(jù)進(jìn)行 3 折交叉驗(yàn)證來找到我們數(shù)據(jù)集的最佳估計(jì)器。
輸出前幾個(gè)交叉驗(yàn)證結(jié)果?

比較 Ada Boost 與 Gradient Boosting、Bagging、隨機(jī)森林、額外樹、決策樹和額外樹的性能?
AdaBoost分類器?
AdaBoostClassifier
?可作為ensemble
sklearn 模塊的一部分使用。我們將使用數(shù)字?jǐn)?shù)據(jù)訓(xùn)練默認(rèn)模型,然后通過嘗試各種超參數(shù)設(shè)置來調(diào)整模型以提高其性能。我們還將它與其他分類估計(jì)器進(jìn)行比較,以檢查其相對于其他機(jī)器學(xué)習(xí)模型的性能。
AdaBoostClassifier
的重要屬性
AdaBoostClassifier
所有屬性都與 AdaBoostRegressor相同
。
通過對各種超參數(shù)進(jìn)行網(wǎng)格搜索來微調(diào)模型?
AdaBoostClassifier
幾乎所有參數(shù)都與AdaBoostRegressor
輸出前幾個(gè)交叉驗(yàn)證結(jié)果?

比較 Ada Boost 與 Gradient Boosting、Bagging、隨機(jī)森林、額外樹、決策樹和額外樹的性能?
歡迎關(guān)注《python金融風(fēng)控評(píng)分卡模型和數(shù)據(jù)分析(加強(qiáng)版)》,學(xué)習(xí)評(píng)分卡,集成樹,神經(jīng)網(wǎng)絡(luò)算法等系統(tǒng)化風(fēng)控建模內(nèi)容。
入口1(推薦)
https://ke.qq.com/course/package/43071
入口2
https://study.163.com/series/1202915601.htm?share=2&shareId=400000000398149
