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

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

2萬字闡述-Python 用 XGBoost 進(jìn)行梯度提升的數(shù)據(jù)準(zhǔn)備(收藏)

2021-09-16 14:00 作者:python風(fēng)控模型  | 我要投稿

XGBoost 是一種流行的梯度提升實(shí)現(xiàn),因?yàn)樗乃俣群托阅堋?/p>

在內(nèi)部,XGBoost 模型將所有問題表示為僅將數(shù)值作為輸入的回歸預(yù)測(cè)建模問題。如果您的數(shù)據(jù)采用不同的形式,則必須將其準(zhǔn)備為預(yù)期的格式。

今天講解如何使用 Python 中的 XGBoost 庫準(zhǔn)備用于梯度提升的數(shù)據(jù)。

看完這篇文章你們會(huì)學(xué)習(xí):

  • 如何編碼字符串輸出變量以進(jìn)行分類。

  • 如何使用一種熱編碼準(zhǔn)備分類輸入變量。

  • 如何使用 XGBoost 自動(dòng)處理缺失數(shù)據(jù)。

標(biāo)簽編碼字符串類值

鳶尾花分類問題是具有字符串類值的問題的一個(gè)示例。

這是一個(gè)預(yù)測(cè)問題,其中給定鳶尾花的厘米測(cè)量值,任務(wù)是預(yù)測(cè)給定的花屬于哪個(gè)物種。

下載數(shù)據(jù)集并將其放置在您當(dāng)前的工作目錄中,文件名為“?iris.csv?”。

  • 鳶尾花數(shù)據(jù)集

  • 鳶尾花數(shù)據(jù)集描述

XGBoost 不能按原樣本對(duì)這個(gè)問題進(jìn)行建模,因?yàn)樗筝敵鲎兞渴菙?shù)字變量。

我們可以使用LabelEncoder輕松地將字符串值轉(zhuǎn)換為整數(shù)值。三個(gè)類值(Iris-setosa、Iris-versicolor、Iris-virginica)被映射到整數(shù)值(0、1、2)。

我們將標(biāo)簽編碼器保存為一個(gè)單獨(dú)的對(duì)象,以便我們可以使用相同的編碼方案轉(zhuǎn)換訓(xùn)練數(shù)據(jù)集以及隨后的測(cè)試和驗(yàn)證數(shù)據(jù)集。

下面是一個(gè)完整的示例,演示如何加載 iris 數(shù)據(jù)集。請(qǐng)注意,Pandas 用于加載數(shù)據(jù)以處理字符串類值。

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

運(yùn)行該示例會(huì)產(chǎn)生以下輸出

請(qǐng)注意 XGBoost 模型如何配置為使用multi:softprob目標(biāo)自動(dòng)對(duì)多類分類問題進(jìn)行建模,該目標(biāo)是對(duì)類概率建模的 softmax 損失函數(shù)的變體。這表明在內(nèi)部,輸出類會(huì)自動(dòng)轉(zhuǎn)換為單熱類型編碼。

一種熱編碼分類數(shù)據(jù)

某些數(shù)據(jù)集僅包含分類數(shù)據(jù),例如乳腺癌數(shù)據(jù)集。

該數(shù)據(jù)集描述了乳腺癌活檢的技術(shù)細(xì)節(jié),預(yù)測(cè)任務(wù)是預(yù)測(cè)患者是否有癌癥復(fù)發(fā)。

下載數(shù)據(jù)集并將其放置在您當(dāng)前的工作目錄中,文件名為“?breast-cancer.csv?”。

  • 乳腺癌數(shù)據(jù)集

  • 乳腺癌數(shù)據(jù)集描述

以下是原始數(shù)據(jù)集的示例。

我們可以看到所有 9 個(gè)輸入變量都是分類的并以字符串格式描述。該問題是一個(gè)二元分類預(yù)測(cè)問題,輸出類值也以字符串格式描述。

我們可以重用上一節(jié)中的相同方法,并將字符串類值轉(zhuǎn)換為整數(shù)值,以使用 LabelEncoder 對(duì)預(yù)測(cè)進(jìn)行建模。例如:

我們可以對(duì) X 中的每個(gè)輸入特征使用相同的方法,但這只是一個(gè)起點(diǎn)。

XGBoost 可以假設(shè)每個(gè)輸入變量的編碼整數(shù)值具有序數(shù)關(guān)系。例如,對(duì)于乳房四邊形變量,編碼為 0 的 'left-up' 和編碼為 1 的 'left-low' 具有作為整數(shù)的有意義的關(guān)系。在這種情況下,這個(gè)假設(shè)是不正確的。

相反,我們必須將這些整數(shù)值映射到新的二進(jìn)制變量上,每個(gè)分類值對(duì)應(yīng)一個(gè)新變量。

例如,乳房四邊形變量具有以下值:

我們可以將其建模為 5 個(gè)二元變量,如下所示:

這稱為一種熱編碼。我們可以使用scikit-learn 中的OneHotEncoder類對(duì)所有分類輸入變量進(jìn)行熱編碼。

我們可以在對(duì)每個(gè)特征進(jìn)行標(biāo)簽編碼后對(duì)其進(jìn)行熱編碼。首先,我們必須將特征數(shù)組轉(zhuǎn)換為二維 NumPy 數(shù)組,其中每個(gè)整數(shù)值都是一個(gè)長(zhǎng)度為 1 的特征向量。

然后我們可以創(chuàng)建 OneHotEncoder 并對(duì)特征數(shù)組進(jìn)行編碼

最后,我們可以通過將一個(gè)熱編碼特征一個(gè)一個(gè)地連接起來,將它們添加為新列(軸 = 2)來構(gòu)建輸入數(shù)據(jù)集。我們最終得到一個(gè)由 43 個(gè)二進(jìn)制輸入變量組成的輸入向量

理想情況下,我們可以嘗試不對(duì)某些輸入屬性進(jìn)行熱編碼,因?yàn)槲覀兛梢允褂妹鞔_的序數(shù)關(guān)系對(duì)它們進(jìn)行編碼,例如,第一列年齡的值類似于 '40-49' 和 '50-59'。如果您有興趣擴(kuò)展此示例,則將其留作練習(xí)。

下面是帶有標(biāo)簽和一個(gè)熱編碼輸入變量和標(biāo)簽編碼輸出變量的完整示例。

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

運(yùn)行這個(gè)例子,我們得到以下輸出。

我們?cè)俅慰梢钥吹?XGBoost 框架自動(dòng)選擇了 '?binary:logistic?' 目標(biāo),這是這個(gè)二元分類問題的正確目標(biāo)。

支持缺失數(shù)據(jù)

XGBoost 可以自動(dòng)學(xué)習(xí)如何最好地處理丟失的數(shù)據(jù)。

事實(shí)上,XGBoost 旨在處理稀疏數(shù)據(jù),就像上一節(jié)中的一個(gè)熱編碼數(shù)據(jù)一樣,通過最小化損失函數(shù),處理缺失數(shù)據(jù)的方式與處理稀疏或零值的方式相同。

有關(guān)如何在 XGBoost 中處理缺失值的技術(shù)細(xì)節(jié)的更多信息,請(qǐng)參閱論文XGBoost:A Scalable Tree Boosting System 中的第 3.4 節(jié)“稀疏感知拆分查找” 。

Horse Colic 數(shù)據(jù)集是展示這種能力的一個(gè)很好的例子,因?yàn)樗艽蟊壤娜笔?shù)據(jù),大約 30%。

下載數(shù)據(jù)集并將其放置在您當(dāng)前的工作目錄中,文件名為“?horse-colic.csv?”。

  • 馬絞痛數(shù)據(jù)集

  • 馬絞痛數(shù)據(jù)集描述

以下是原始數(shù)據(jù)集的示例。

這些值由空格分隔,我們可以使用 Pandas 函數(shù)read_csv輕松加載它。

加載后,我們可以看到缺失的數(shù)據(jù)用問號(hào)字符 ('?') 標(biāo)記。我們可以將這些缺失值更改為 XGBoost 期望的稀疏值,即值零 (0)。

因?yàn)槿笔?shù)據(jù)被標(biāo)記為字符串,所以那些缺失數(shù)據(jù)的列都被加載為字符串?dāng)?shù)據(jù)類型。我們現(xiàn)在可以將整個(gè)輸入數(shù)據(jù)集轉(zhuǎn)換為數(shù)值。

最后,盡管類值用整數(shù) 1 和 2 標(biāo)記,但這是一個(gè)二元分類問題。我們?cè)?XGBoost 中將二元分類問題建模為邏輯 0 和 1 值。我們可以使用 LabelEncoder 輕松地將 Y 數(shù)據(jù)集轉(zhuǎn)換為 0 和 1 整數(shù),就像我們?cè)邙S尾花示例中所做的那樣。

為了完整起見,下面提供了完整的代碼清單。

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

運(yùn)行此示例會(huì)產(chǎn)生以下輸出。

我們可以通過將缺失值標(biāo)記為非零值(例如 1)來梳理 XGBoost 自動(dòng)處理缺失值的效果。

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

重新運(yùn)行示例表明模型的準(zhǔn)確度下降。

我們也可以用一個(gè)特定的值來估算缺失的數(shù)據(jù)。

通常對(duì)列使用平均值或中位數(shù)。我們可以使用 scikit-learn SimpleImputer 類輕松估算缺失的數(shù)據(jù)。

下面是完整示例,其中缺失數(shù)據(jù)使用每列的平均值進(jìn)行插補(bǔ)。

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

運(yùn)行此示例,我們看到的結(jié)果相當(dāng)于將值固定為一 (1)。這表明,至少在這種情況下,我們最好用零 (0) 的不同值而不是有效值 (1) 或估算值標(biāo)記缺失值。

當(dāng)您有缺失值時(shí),對(duì)您的數(shù)據(jù)嘗試這兩種方法(自動(dòng)處理和插補(bǔ))是一個(gè)很好的教訓(xùn)。

概括

在這篇博文中,您了解了如何使用 Python 中的 XGBoost 準(zhǔn)備用于梯度提升的機(jī)器學(xué)習(xí)數(shù)據(jù)。

具體來說,你學(xué)到了:

  • 如何使用標(biāo)簽編碼為二進(jìn)制分類準(zhǔn)備字符串類值。

  • 如何使用單熱編碼準(zhǔn)備分類輸入變量以將它們建模為二進(jìn)制變量。

  • XGBoost 如何自動(dòng)處理缺失數(shù)據(jù)以及如何標(biāo)記和估算缺失值。


Python 用 XGBoost 進(jìn)行梯度提升的數(shù)據(jù)準(zhǔn)備就為大家介紹到這里了,歡迎各位同學(xué)報(bào)名<python數(shù)據(jù)分析和機(jī)器學(xué)習(xí)項(xiàng)目實(shí)戰(zhàn)>微專業(yè)課,學(xué)習(xí)更多相關(guān)知識(shí)


2萬字闡述-Python 用 XGBoost 進(jìn)行梯度提升的數(shù)據(jù)準(zhǔn)備(收藏)的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國家法律
新竹县| 夏河县| 方正县| 敦化市| 仁布县| 五寨县| 顺义区| 鄂托克旗| 嘉祥县| 赤壁市| 玉门市| 黄陵县| 游戏| 辽宁省| 岳阳市| 集贤县| 鄄城县| 铜山县| 通辽市| 新龙县| 晋中市| 家居| 常州市| 淮北市| 临沭县| 长葛市| 伽师县| 章丘市| 文水县| 衡东县| 鲁甸县| 措美县| 黔西| 济宁市| 博罗县| 柳河县| 灵山县| 长岭县| 巫溪县| 云和县| 桐梓县|