xgboost 正则项_XGBoos算法背后的数学:尽可能简单地解释XGBoost算法背后的机制
如果你想很好地理解某些內(nèi)容,請(qǐng)嘗試簡(jiǎn)單地給別人解釋出來(lái)。 ——費(fèi)曼
XGBoost是一個(gè)很優(yōu)美的算法,它的過(guò)程不乏啟發(fā)性。這些通常簡(jiǎn)單而美麗的概念在數(shù)學(xué)術(shù)語(yǔ)中消失了。我在理解數(shù)學(xué)的過(guò)程中也遇到過(guò)同樣的挑戰(zhàn),所以我寫(xiě)這篇文章的目的是鞏固我的理解,同時(shí)幫助其他人完成類似的過(guò)程。
為了解XGBoost是什么,我們首先要了解什么是梯度提升機(jī)Gradient Boosting,以及梯度提升機(jī)背后的數(shù)學(xué)概念。請(qǐng)注意,這篇文章假設(shè)你對(duì)梯度提升機(jī)非常熟悉,并試圖觸及梯度提升機(jī)和XGBoost背后的直覺(jué)和數(shù)學(xué)。現(xiàn)在我們開(kāi)始吧。
理解梯度提升機(jī)
第一步 - 初始函數(shù)
與往常一樣,讓我們從粗略的初始函數(shù)
開(kāi)始,類似于回歸時(shí)所有值的平均值。 它將為我們提供一些輸出,無(wú)論效果如何。
第二步 - 損失函數(shù)
下面我們計(jì)算損失函數(shù)
那么什么是損失函數(shù)?它是一種度量預(yù)測(cè)值與真實(shí)值之間差異的算式,這里有幾個(gè)例子:
從下表可以理解為什么對(duì)異常值的魯棒性很重要:
其思想是,損失函數(shù)的值越低,我們的預(yù)測(cè)就越準(zhǔn)確,所以獲取最佳的預(yù)測(cè)值等價(jià)為損失函數(shù)的最小化問(wèn)題。
第三步 - 新的目標(biāo)
到目前為止,我們已經(jīng)建立了我們的初始模型,并進(jìn)行了預(yù)測(cè)。接下來(lái),我們應(yīng)該在損失函數(shù)給出的殘差上擬合一個(gè)新模型,但有一個(gè)微妙的轉(zhuǎn)折:我們將擬合損失函數(shù)的負(fù)梯度,下面給出我們?yōu)槭裁催@樣做以及為什么它們相似的直覺(jué):
梯度可以解釋為函數(shù)的“最快增加的方向和速率”,因此負(fù)梯度告訴我們函數(shù)最小值的方向,在這種情況下為損失函數(shù)的最小值。
我們將遵循梯度下降法,逐步逼近損失函數(shù)的極小值,算法的學(xué)習(xí)速率將給出每一次更新的步長(zhǎng)。在損失函數(shù)最小的情況下,我們的錯(cuò)誤率也最低。
因此,我們將在損失函數(shù)的
梯度處建立新模型
第四步 - 累加
在
梯度上迭代擬合模型的過(guò)程將繼續(xù)進(jìn)行,直到我們達(dá)到給定的弱學(xué)習(xí)器數(shù)量的最小值或極限T為止,這稱為累加。
回想一下,在Adaboost中,模型的“缺點(diǎn)”是由高權(quán)重?cái)?shù)據(jù)點(diǎn)確定的。在梯度提升機(jī)中,“缺點(diǎn)”是通過(guò)梯度來(lái)識(shí)別的。
簡(jiǎn)單來(lái)說(shuō),這就是梯度提升機(jī)的工作機(jī)制。在回歸和分類任務(wù)中,唯一不同的是所使用的損失函數(shù)。
XGBoost
XGBoost和梯度提升機(jī)都遵循梯度提升決策樹(shù)的原理,但是XGBoost使用更加正則化的模型公式來(lái)控制擬合,這使它具有更好的性能,這就是為什么它也被稱為“正則提升”技術(shù)。
牛頓法
那么什么是牛頓法呢?在隨機(jī)梯度下降中,我們用更少的數(shù)據(jù)點(diǎn)來(lái)計(jì)算梯度更新的方向,耗時(shí)也相對(duì)更少,但如果我們想要加速更新,就需要更多的數(shù)據(jù)點(diǎn)。而在牛頓法中,我們用來(lái)計(jì)算梯度更新的方向的耗時(shí)更多,但是需要的計(jì)算點(diǎn)也更少。
需要注意的重要一點(diǎn)是,即使梯度提升機(jī)在解決回歸問(wèn)題時(shí)使用梯度下降法進(jìn)行優(yōu)化,在解決分類問(wèn)題仍然使用牛頓方法來(lái)解決優(yōu)化問(wèn)題。 而XGBoost在分類和回歸的情況下都使用此方法。
牛頓法試圖通過(guò)構(gòu)造一個(gè)序列
來(lái)解決最小化問(wèn)題,該序列從隨機(jī)起點(diǎn)
開(kāi)始,通過(guò)
的二階泰勒展開(kāi)序列收斂到
的最小值
在
附近的二階泰勒展開(kāi)式是
二階導(dǎo)數(shù)對(duì)于加快梯度下降非常重要,因?yàn)樵谝粋€(gè)損失函數(shù)的山谷里,如果算法的修正方向是鋸齒狀的下降,那么您在沿著山谷的實(shí)際梯度上的進(jìn)展就非常緩慢, 通過(guò)二階導(dǎo)數(shù)調(diào)整方向?qū)⑹鼓南陆捣较虺焦鹊膶?shí)際梯度方向傾斜,從而將緩慢的下降轉(zhuǎn)換為更快的下降。
損失函數(shù)
我們已經(jīng)看到了平方損失函數(shù)在梯度提升機(jī)中的行為,讓我們快速看一下XGBoost中平方損失函數(shù)的作用:
均方誤差損失函數(shù)的形式是非常友好的,有一個(gè)一次項(xiàng)(通常稱為剩余項(xiàng))和一個(gè)二次項(xiàng)。對(duì)于其他值得注意的損失函數(shù)(例如logistic損失),要得到這樣一個(gè)好的形式并不容易。所以在一般情況下,我們把損失函數(shù)的泰勒展開(kāi)式推廣到二階
這就成了我們對(duì)新樹(shù)的優(yōu)化目標(biāo)。該定義的一個(gè)重要優(yōu)點(diǎn)是,目標(biāo)函數(shù)的值僅依賴于
和
。這就是XGBoost支持自定義損失的方式。我們可以使用完全相同的以
和
作為輸入的求解器來(lái)優(yōu)化每個(gè)損失函數(shù),包括邏輯回歸和成對(duì)排序
正則化
接下來(lái),我們將處理正則化項(xiàng),但在此之前,我們需要了解如何以數(shù)學(xué)方式定義決策樹(shù)。 直觀來(lái)說(shuō),決策樹(shù)主要是葉節(jié)點(diǎn)、數(shù)據(jù)點(diǎn)和將數(shù)據(jù)點(diǎn)分配給這些葉節(jié)點(diǎn)的函數(shù)的組合。 數(shù)學(xué)上它寫(xiě)為:
其中JT是葉數(shù)。此定義將樹(shù)上的預(yù)測(cè)過(guò)程描述為:
1. 將數(shù)據(jù)點(diǎn)
給一片葉子
2. 將相應(yīng)分?jǐn)?shù)
配給第
數(shù)據(jù)點(diǎn)
在XGBoost中,復(fù)雜度定義為:
XGBoost中的超參數(shù)描述如下:
當(dāng)然,定義復(fù)雜度的方法不止一種,但這一種方法在實(shí)踐中效果很好。正則化是大多數(shù)基于樹(shù)的方法處理得不太仔細(xì)或忽略掉的一部分。這是因?yàn)閭鹘y(tǒng)的樹(shù)學(xué)習(xí)方法只強(qiáng)調(diào)提升純度,而復(fù)雜度的控制則只能基于試探。通過(guò)正式定義它,我們可以更好地了解我們的模型正在學(xué)習(xí)的內(nèi)容,并獲得泛化能力良好的模型
最后一個(gè)方程衡量的是樹(shù)的結(jié)構(gòu)的優(yōu)劣。
如果聽(tīng)起來(lái)有些復(fù)雜,讓我們看一下圖片,看看如何計(jì)算分?jǐn)?shù)。
基本上,對(duì)于給定的樹(shù)結(jié)構(gòu),我們將統(tǒng)計(jì)信息
和
推入它們所屬的葉節(jié)點(diǎn),將統(tǒng)計(jì)信息求和,然后使用這一公式計(jì)算樹(shù)的質(zhì)量。 該分?jǐn)?shù)類似于決策樹(shù)中的純度度量,不同之處在于它還考慮了模型的復(fù)雜性
學(xué)習(xí)樹(shù)的結(jié)構(gòu)
現(xiàn)在,我們有了一種方法來(lái)衡量一棵樹(shù)的質(zhì)量。理想情況下,我們將枚舉所有可能的樹(shù)并選擇最佳的樹(shù),但實(shí)際上這是非常棘手的,因此我們將嘗試一次優(yōu)化一個(gè)樹(shù)的部分。 具體來(lái)說(shuō),我們嘗試將一片葉子分成兩片葉子,其得分為
該公式可分解為: 1)新左葉上的分?jǐn)?shù);2)新右葉上的分?jǐn)?shù);3)原始葉上的分?jǐn)?shù);4)附加葉上的正則化。 我們?cè)谶@里可以看到一個(gè)重要的事實(shí):如果增益小于
,我們最好不要添加該分支,這正是基于樹(shù)的模型中的修剪技術(shù)! 通過(guò)使用監(jiān)督學(xué)習(xí)的原理,我們自然可以得出這些技術(shù)起作用的原因
很好,現(xiàn)在希望我們對(duì)XGBoost有一個(gè)初步的了解,以及為什么它會(huì)這樣工作。下次見(jiàn)!
作者:Dip Ranjan Chatterjee
deephub翻譯組:Alexander Zhao
總結(jié)
以上是生活随笔為你收集整理的xgboost 正则项_XGBoos算法背后的数学:尽可能简单地解释XGBoost算法背后的机制的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: mysql主从复制深入研究_mysql主
- 下一篇: rocketmq怎么保证数据不会重复_r