最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊

Python降低XGBoost 過度擬合的多種方法

2021-08-27 11:44 作者:python風(fēng)控模型  | 我要投稿

之前已經(jīng)講過機(jī)器學(xué)習(xí)的 XGBoost 算法簡介

XGBoost feature importance特征重要性-實(shí)戰(zhàn)印第安人糖尿病數(shù)據(jù)集,

用Python 開發(fā)您的第一個(gè) XGBoost 模型

今天來講解xgboost過度擬合問題。

過度擬合是機(jī)器學(xué)習(xí)建模經(jīng)常遇到的問題,也是棘手問題,甚至數(shù)據(jù)科學(xué)崗位面試時(shí)候經(jīng)常會(huì)遇到這類難題。大家不要怕,接下來我會(huì)詳細(xì)講述python xgboost如何降低過度擬合方法和其它更好方法。

xgboost建模中,如果變量數(shù)量太多,模型容易過度擬合,英文術(shù)語為overfitting,如下圖右。

如果變量太少,容易欠擬合,英文術(shù)語為underfitting,如下圖左。

如果變量剛好合適,模型擬合就會(huì)比較好,如下圖中。

圖片


我們用xgboost建模時(shí)應(yīng)當(dāng)如何避免過度擬合呢?

1.我們應(yīng)首先觀察模型變量是否太多,是否包含大量無效變量(噪音變量)?如果模型噪音變量太多,就先變量篩選,踢除無效變量,或用降維手段測試效果。這一條是至關(guān)重要的前提,如果做不好變量篩選和降維,后續(xù)方法效果會(huì)大打折扣。

2.我們可以設(shè)置xgboost中eval_set,eval_metric,early_stopping_rounds參數(shù),來減輕過度擬合。如果因數(shù)據(jù)原因,完全消除過度擬合是不可能的。

3.采用其他集成樹算法進(jìn)一步減輕過度擬合,例如對稱樹算法catboost。對稱樹算法catboost有天然對抗過度擬合優(yōu)點(diǎn),之后我會(huì)安排時(shí)間講解catboost算法。

圖片


接下來我將描述如何在 Python 中使用提前停止來限制 XGBoost 的過度擬合。

通過這篇文章,你會(huì)了解:

  • 關(guān)于提前停止作為減少訓(xùn)練數(shù)據(jù)過度擬合的一種方法。

  • 如何在訓(xùn)練期間監(jiān)控 XGBoost 模型的性能并繪制學(xué)習(xí)曲線。

  • 如何使用提前停止在最佳時(shí)期提前停止 XGBoost 模型的訓(xùn)練。


提前停止以避免過度擬合

提前停止是一種訓(xùn)練復(fù)雜機(jī)器學(xué)習(xí)模型以避免過度擬合的方法。

它的工作原理是監(jiān)控在單獨(dú)的測試數(shù)據(jù)集上訓(xùn)練的模型的性能,并在經(jīng)過固定次數(shù)的訓(xùn)練迭代后測試數(shù)據(jù)集的性能沒有提高時(shí)停止訓(xùn)練過程。

它通過嘗試自動(dòng)選擇測試數(shù)據(jù)集性能開始下降的拐點(diǎn)來避免過度擬合,而隨著模型開始過度擬合,訓(xùn)練數(shù)據(jù)集的性能繼續(xù)提高。

性能度量可能是正在優(yōu)化以訓(xùn)練模型的損失函數(shù)(例如對數(shù)損失),或通常對問題感興趣的外部度量(例如分類準(zhǔn)確度)。

使用 XGBoost 監(jiān)控訓(xùn)練表現(xiàn)

XGBoost 模型可以在訓(xùn)練期間評估和報(bào)告模型在測試集上的性能。

它通過在訓(xùn)練模型和指定詳細(xì)輸出時(shí)在調(diào)用model.fit()時(shí)指定測試數(shù)據(jù)集和評估指標(biāo)來支持此功能。

例如,我們可以在訓(xùn)練 XGBoost 模型時(shí)報(bào)告獨(dú)立測試集 (?eval_set?)上的二進(jìn)制分類錯(cuò)誤率 (“ error ”) ,如下所示:

XGBoost 支持一套評估指標(biāo),不僅限于:

  • “ rmse ”表示均方根誤差。

  • “ mae ”表示平均絕對誤差。

  • “ logloss ”用于二進(jìn)制對數(shù)損失,“ mlogloss ”用于多類對數(shù)損失(交叉熵)。

  • “ error ”表示分類錯(cuò)誤。

  • “ auc ”表示ROC曲線下的面積。

XGBoost 參數(shù)網(wǎng)頁的“學(xué)習(xí)任務(wù)參數(shù)”部分提供了完整列表。

例如,我們可以演示如何在皮馬印第安人糖尿病數(shù)據(jù)集上跟蹤 XGBoost 模型的訓(xùn)練性能。

下載數(shù)據(jù)集文件并將其放在您當(dāng)前的工作目錄中。

  • 數(shù)據(jù)集下載鏈接:

    https://raw.githubusercontent.com/jbrownlee/Datasets/master/pima-indians-diabetes.csv

  • 數(shù)據(jù)集詳細(xì)信息如下:



完整示例如下:

運(yùn)行此示例在 67% 的數(shù)據(jù)上訓(xùn)練模型,并在 33% 的測試數(shù)據(jù)集上評估每個(gè)訓(xùn)練時(shí)期的模型。

每次迭代都會(huì)報(bào)告分類錯(cuò)誤,最后在最后報(bào)告分類精度。

注意:您的結(jié)果可能會(huì)因算法或評估程序的隨機(jī)性或數(shù)值精度的差異而有所不同??紤]多次運(yùn)行該示例并比較平均結(jié)果。

下面提供了輸出,為簡潔起見被截?cái)?。我們可以看到,每次?xùn)練迭代都會(huì)報(bào)告分類錯(cuò)誤(在將每個(gè)提升樹添加到模型之后)。

查看所有輸出,我們可以看到測試集上的模型性能持平,甚至在訓(xùn)練結(jié)束時(shí)變得更糟。

使用學(xué)習(xí)曲線評估 XGBoost 模型

我們可以在評估數(shù)據(jù)集上檢索模型的性能并繪制它以深入了解訓(xùn)練過程中學(xué)習(xí)的展開方式。

在擬合 XGBoost 模型時(shí),我們?yōu)?strong>eval_metric參數(shù)提供了一組 X 和 y 對。除了測試集,我們還可以提供訓(xùn)練數(shù)據(jù)集。這將提供關(guān)于模型在訓(xùn)練期間在訓(xùn)練集和測試集上的表現(xiàn)如何的報(bào)告。

例如:

此外,模型在每個(gè)評估集上的性能通過調(diào)用model.evals_result()函數(shù)在訓(xùn)練后存儲(chǔ)并由模型提供。這將返回評估數(shù)據(jù)集和分?jǐn)?shù)的字典,例如:

這將打印如下結(jié)果(為簡潔起見被截?cái)啵?/p>

“?validation_0?”和“?validation_1?”中的每一個(gè)都對應(yīng)于在調(diào)用fit() 時(shí)將數(shù)據(jù)集提供給eval_set參數(shù)的順序。

可以按如下方式訪問特定的結(jié)果數(shù)組,例如第一個(gè)數(shù)據(jù)集和錯(cuò)誤度量:

此外,我們可以通過向fit()函數(shù)的 eval_metric 參數(shù)提供一組指標(biāo)來指定更多的評估指標(biāo)來評估和收集。

然后,我們可以使用這些收集到的性能指標(biāo)來創(chuàng)建線圖,并進(jìn)一步了解模型在訓(xùn)練時(shí)期在訓(xùn)練和測試數(shù)據(jù)集上的表現(xiàn)。

下面是完整的代碼示例,顯示了如何在折線圖上可視化收集的結(jié)果。

運(yùn)行此代碼會(huì)報(bào)告每個(gè)時(shí)期訓(xùn)練和測試數(shù)據(jù)集上的分類錯(cuò)誤。我們可以通過在調(diào)用fit()函數(shù)時(shí)設(shè)置verbose=False(默認(rèn)值)來關(guān)閉它。

注意:您的結(jié)果可能會(huì)因算法或評估程序的隨機(jī)性或數(shù)值精度的差異而有所不同??紤]多次運(yùn)行該示例并比較平均結(jié)果。

創(chuàng)建了兩個(gè)圖。第一個(gè)顯示了 XGBoost 模型在訓(xùn)練和測試數(shù)據(jù)集上每個(gè)時(shí)期的對數(shù)損失。

圖片

XGBoost 學(xué)習(xí)曲線對數(shù)損失

第二個(gè)圖顯示了 XGBoost 模型在訓(xùn)練和測試數(shù)據(jù)集上每個(gè) epoch 的分類誤差。

圖片

XGBoost 學(xué)習(xí)曲線分類錯(cuò)誤

從查看 logloss 圖來看,似乎有機(jī)會(huì)提前停止學(xué)習(xí),可能在 20 到 40 紀(jì)元左右。

我們看到了類似的分類錯(cuò)誤故事,其中錯(cuò)誤似乎在第 40 輪左右回升。

使用 XGBoost 提前停止

XGBoost 支持在固定次數(shù)的迭代后提前停止。

除了指定用于評估每個(gè) epoch 的度量和測試數(shù)據(jù)集之外,您還必須指定一個(gè)窗口,其中包含沒有觀察到改進(jìn)的 epoch 數(shù)。這是在early_stopping_rounds?參數(shù)中指定的。

例如,我們可以檢查 10 個(gè)時(shí)期的對數(shù)損失沒有改善,如下所示:

如果提供了多個(gè)評估數(shù)據(jù)集或多個(gè)評估指標(biāo),則提前停止將使用列表中的最后一個(gè)。

下面提供了一個(gè)完整的例子,說明提前停止的完整性。

注意:您的結(jié)果可能會(huì)因算法或評估程序的隨機(jī)性或數(shù)值精度的差異而有所不同??紤]多次運(yùn)行該示例并比較平均結(jié)果。

運(yùn)行該示例提供以下輸出,為簡潔起見被截?cái)唷?/p>

我們可以看到模型在 epoch 42 停止訓(xùn)練(接近我們手動(dòng)判斷學(xué)習(xí)曲線的預(yù)期),并且在 epoch 32 觀察到損失最好的模型。

通常選擇early_stopping_rounds作為訓(xùn)練時(shí)期總數(shù)的合理函數(shù)(在這種情況下為 10%)或嘗試對應(yīng)于可能在學(xué)習(xí)曲線圖上觀察到的拐點(diǎn)周期是一個(gè)好主意。

總結(jié)

在這篇文章中,我們了解到了:

  • 關(guān)于在模型過度擬合訓(xùn)練數(shù)據(jù)之前停止模型訓(xùn)練的提前停止技術(shù)。

  • 如何在訓(xùn)練期間監(jiān)控 XGBoost 模型的性能并繪制學(xué)習(xí)曲線。

  • 如何在訓(xùn)練 XGBoost 模型時(shí)配置提前停止。

xgboost過度擬合知識(shí)就為大家介紹到這里了,歡迎各位同學(xué)學(xué)習(xí)<python風(fēng)控建模實(shí)戰(zhàn)lendingclub>,更多集成樹算法相關(guān)知識(shí)

版權(quán)聲明:文章來自公眾號(python風(fēng)控模型),未經(jīng)許可,不得抄襲。遵循CC 4.0 BY-SA版權(quán)協(xié)議,轉(zhuǎn)載請附上原文出處鏈接及本聲明。



Python降低XGBoost 過度擬合的多種方法的評論 (共 條)

分享到微博請遵守國家法律
交口县| 长宁县| 贵溪市| 外汇| 维西| 尉犁县| 宜川县| 和林格尔县| 怀安县| 布尔津县| 固阳县| 康平县| 甘南县| 柘城县| 宽甸| 宜兰县| 改则县| 江油市| 鲁山县| 集贤县| 武义县| 杭州市| 启东市| 长宁区| 双辽市| 迭部县| 宁陵县| 安泽县| 苗栗县| 垣曲县| 毕节市| 扶余县| 扶风县| 龙游县| 文昌市| 邢台市| 定陶县| 乌鲁木齐市| 孝感市| 克拉玛依市| 黔西|