A同學(xué):曦曦,,我只會R語言,,有沒有一種看上去很高大上的模型而且可以只基于R,而且還要性能優(yōu)秀,,最最重點(diǎn)的是我可以學(xué)會 晨曦:那么XGboost應(yīng)該可以滿足你的要求 作為機(jī)器學(xué)習(xí)領(lǐng)域的愛好者,,越學(xué)習(xí)越發(fā)現(xiàn),一個工具的局限性在一開始就已經(jīng)注定,,盡管我們現(xiàn)在擁有mlr3包和tidymodels包這兩個劃時代的體系,,但是作為R語言的愛好者也不得不承認(rèn)在某一方面,從深度學(xué)習(xí)來講,,還是Python更加的方便,,因?yàn)椴还苁莐eras包還是新出現(xiàn)的tyorch包,,前者依舊是基于python,只不過換了一個前端,,而后者雖然完全基于R語言,,但是代碼卻沒有那么的簡單,下面是晨曦的粗淺理解,,絕非引戰(zhàn),,歡迎各位小伙伴在評論區(qū)留言 在R語言進(jìn)行統(tǒng)計(jì)以及除了神經(jīng)網(wǎng)絡(luò)以外的機(jī)器學(xué)習(xí)還有生信分析是完全沒有問題的,Python在深度學(xué)習(xí)和單細(xì)胞高階分析中有著一定的優(yōu)勢 那么接下來我們就來看一下可以被稱為R語言中模型構(gòu)建的偽天花板,,集成學(xué)習(xí)的一大代表——XGboost算法 背景知識 其實(shí)如果說要理解XGboost的整個來龍去脈,,晨曦建議各位小伙伴去閱讀陳天奇老師的原始文獻(xiàn),但是我們作為使用者,,往往并不需要太多復(fù)雜的數(shù)學(xué)知識,,所以這里晨曦將用自己的理解為各位小伙伴串講XGboost 所謂的集成學(xué)習(xí)其實(shí)是為了解決一個問題,,就是單獨(dú)學(xué)習(xí)器并不能很好的去完成我們的任務(wù),,舉個例子,決策樹算法基于貪婪原則容易過擬合,,我們通過集成學(xué)習(xí)中的bagging技術(shù)就可以構(gòu)建隨機(jī)森林,,其基學(xué)習(xí)器依舊是一個個決策樹,目前來說集成學(xué)習(xí)包括三大技術(shù):bagging,、boosting以及stacking,,bagging技術(shù)中最具代表的就是隨機(jī)森林,而boosting中具有代表的就是XGboost,,簡單理解就是通過匯集多個同質(zhì)弱學(xué)習(xí)器達(dá)到增強(qiáng)模型性能減少偏差的作用 XGBoost的基礎(chǔ)是梯度提升算法。梯度提升(Gradient boosting)是構(gòu)建預(yù)測模型的最強(qiáng)大技術(shù)之一,,它是集成算法中提升(Boosting)的代表算法。集成算法通過在數(shù)據(jù)上構(gòu)建多個弱 評估器,,匯總所有弱評估器的建模結(jié)果,,以獲取比單個模型更好的回歸或分類表現(xiàn)。弱評估器被定義為是表現(xiàn)至少比隨機(jī)猜測更好的模型,,即預(yù)測準(zhǔn)確率不低于50%的任意模型 接下來,,我們再來多說一些XGboost的推導(dǎo),當(dāng)然因?yàn)槌筷乇救说臄?shù)學(xué)基礎(chǔ)并不是十分的扎實(shí),,所以這里僅僅從臨床工作者的角度出發(fā),,理解占大多數(shù),推導(dǎo)很少,,不感興趣的小伙伴可以直接跳到代碼實(shí)戰(zhàn)部分 在訓(xùn)練XGboost模型之前我們需要有一個目標(biāo)函數(shù),,也就是說有一個初始的模型基礎(chǔ),,我們可以簡單把目標(biāo)函數(shù)定義為: 這個數(shù)學(xué)公式有兩部分組成,第一部分為損失函數(shù),,其目的是為了防止模型欠擬合(評估預(yù)測值和實(shí)際值之間的情況),,第二部分為正則化函數(shù),其目的是為了防止模型過擬合(對損失函數(shù)的參數(shù)進(jìn)行懲罰,,防止模型過擬合) 目標(biāo)函數(shù)可以解釋為對新一輪模型和上一輪模型的預(yù)測的“殘差”進(jìn)行學(xué)習(xí)的過程,,那么實(shí)際上我們的優(yōu)化目標(biāo)就是找到最優(yōu)的f(x)使得目標(biāo)函數(shù)最小 后續(xù)就可以通過一系列數(shù)學(xué)計(jì)算得到這個最小的目標(biāo)函數(shù),完成整個模型的構(gòu)建,,但是對于我們使用來說,,其實(shí)只需要了解XGboost的使用條件、超參數(shù)配置,、以及一些淺淺的理論即可 代碼實(shí)戰(zhàn)
工欲善其事必先利其器
這里需要我們注意的是Xgboost算法需要預(yù)測變量為數(shù)值型變量,,所以我們需要進(jìn)行轉(zhuǎn)化,但是對于離散型變量,,如果盲目轉(zhuǎn)換可能會出現(xiàn)問題,,因?yàn)閷τ陔x散型變臉之間距離的定性是機(jī)器學(xué)習(xí)中很看重的一點(diǎn),所以如果對于離散型變量可以采用獨(dú)熱編碼的方式,,而且機(jī)器學(xué)習(xí)可以很好的處理多重共線性的問題
XGboost的超參數(shù)有很多,但是我們并不是需要全部掌握,,而且調(diào)節(jié)超參數(shù)并沒有一個統(tǒng)一的定性,,憑借的更多的是經(jīng)驗(yàn)而不是邏輯
下面則是基于嵌套驗(yàn)證的思想獲得模型的最真實(shí)評價以及通過得到at變量后擬合任務(wù)一步獲得模型最佳超參數(shù)配置的模型
注意:我們這里把調(diào)優(yōu)停止閾值設(shè)置在了1000,,也就是說原則上模型會進(jìn)行最多1000次迭代。
這里我們需要注意,,XGboost最后相對黑盒模型,,本身并不具有太好的解釋性,所以想要像線性回歸那樣進(jìn)行解釋并不是一個很好的想法,,我們更關(guān)注模型的性能而非可解釋性,,那么這里又會引入一個問題,模型的可解釋性究竟什么時候是必須的,? 1. 在進(jìn)行基于重要決策的時候,,模型的可解釋性可以幫助我們了解這個模型是否具有“偏見” 2. 機(jī)器學(xué)習(xí)模型只有在可以解釋時才能進(jìn)?調(diào)試和審核 3. 當(dāng)然如果我們的模型沒有重大的作用其實(shí)并不需要其具有可解釋性 4. 當(dāng)問題被研究得很深入時,就不需要解釋性了 所以綜上所示我們不光了解了XGboost的常規(guī)實(shí)現(xiàn)邏輯以及相關(guān)的代碼操作,,更重要的是在機(jī)器學(xué)習(xí)的性能和可解釋性上我們應(yīng)該懂得如何進(jìn)行取舍,相對來說,,機(jī)器學(xué)習(xí)算法除了單純的樹模型以外,,其解釋性都不是特別優(yōu)秀,但是在犧牲解釋性的前提下獲得了相對卓越的性能,這也是一種平衡的操作 那么,,本期推文到這里就結(jié)束了,,基于R來說XGboost可以說是構(gòu)建模型中比較高級的操作了,各位小伙伴可以學(xué)習(xí)起來運(yùn)用在自己的課題設(shè)計(jì)中,,相信會給各位小伙伴帶來一定的幫助 我是晨曦,,我們下期再見~ 參考教程 |
|