如果你想很好地理解某些內容,請嘗試簡單地給別人解釋出來。 ——費曼
XGBoost是一個很優美的算法,它的過程不乏啓發性。這些通常簡單而美麗的概念在數學術語中消失了。我在理解數學的過程中也遇到過同樣的挑戰,所以我寫這篇文章的目的是鞏固我的理解,同時幫助其他人完成類似的過程。
爲了解XGBoost是什麼,我們首先要了解什麼是梯度提升機Gradient Boosting,以及梯度提升機背後的數學概念。請注意,這篇文章假設你對梯度提升機非常熟悉,並試圖觸及梯度提升機和XGBoost背後的直覺和數學。現在我們開始吧。
理解梯度提升機
第一步 - 初始函數
與往常一樣,讓我們從粗略的初始函數Fo
開始,類似於迴歸時所有值的平均值。 它將爲我們提供一些輸出,無論效果如何。
第二步 - 損失函數
下面我們計算損失函數L(yi,Ft(xi))
那麼什麼是損失函數?它是一種度量預測值與真實值之間差異的算式,這裏有幾個例子:
從下表可以理解爲什麼對異常值的魯棒性很重要:
其思想是,損失函數的值越低,我們的預測就越準確,所以獲取最佳的預測值等價爲損失函數的最小化問題。
第三步 - 新的目標
到目前爲止,我們已經建立了我們的初始模型,並進行了預測。接下來,我們應該在損失函數給出的殘差上擬合一個新模型,但有一個微妙的轉折:我們將擬合損失函數的負梯度,下面給出我們爲什麼這樣做以及爲什麼它們相似的直覺:
梯度可以解釋爲函數的“最快增加的方向和速率”,因此負梯度告訴我們函數最小值的方向,在這種情況下爲損失函數的最小值。
我們將遵循梯度下降法,逐步逼近損失函數的極小值,算法的學習速率將給出每一次更新的步長。在損失函數最小的情況下,我們的錯誤率也最低。
因此,我們將在損失函數的-ve梯度處建立新模型ht+1
第四步 - 累加
在-ve梯度上迭代擬合模型的過程將繼續進行,直到我們達到給定的弱學習器數量的最小值或極限T爲止,這稱爲累加。
回想一下,在Adaboost中,模型的“缺點”是由高權重數據點確定的。在梯度提升機中,“缺點”是通過梯度來識別的。
簡單來說,這就是梯度提升機的工作機制。在迴歸和分類任務中,唯一不同的是所使用的損失函數。
XGBoost
XGBoost和梯度提升機都遵循梯度提升決策樹的原理,但是XGBoost使用更加正則化的模型公式來控制擬合,這使它具有更好的性能,這就是爲什麼它也被稱爲“正則提升”技術。
牛頓法
那麼什麼是牛頓法呢?在隨機梯度下降中,我們用更少的數據點來計算梯度更新的方向,耗時也相對更少,但如果我們想要加速更新,就需要更多的數據點。而在牛頓法中,我們用來計算梯度更新的方向的耗時更多,但是需要的計算點也更少。
需要注意的重要一點是,即使梯度提升機在解決迴歸問題時使用梯度下降法進行優化,在解決分類問題仍然使用牛頓方法來解決優化問題。 而XGBoost在分類和迴歸的情況下都使用此方法。
牛頓法試圖通過構造一個序列{xk}來解決最小化問題,該序列從隨機起點x0∈R開始,通過f的二階泰勒展開序列收斂到f的最小值x*。f在{xk}附近的二階泰勒展開式是
二階導數對於加快梯度下降非常重要,因爲在一個損失函數的山谷裏,如果算法的修正方向是鋸齒狀的下降,那麼您在沿着山谷的實際梯度上的進展就非常緩慢, 通過二階導數調整方向將使您的下降方向朝山谷的實際梯度方向傾斜,從而將緩慢的下降轉換爲更快的下降。
損失函數
我們已經看到了平方損失函數在梯度提升機中的行爲,讓我們快速看一下XGBoost中平方損失函數的作用:
均方誤差損失函數的形式是非常友好的,有一個一次項(通常稱爲剩餘項)和一個二次項。對於其他值得注意的損失函數(例如logistic損失),要得到這樣一個好的形式並不容易。所以在一般情況下,我們把損失函數的泰勒展開式推廣到二階
這就成了我們對新樹的優化目標。該定義的一個重要優點是,目標函數的值僅依賴於pi和qi。這就是XGBoost支持自定義損失的方式。我們可以使用完全相同的以pi和qi作爲輸入的求解器來優化每個損失函數,包括邏輯迴歸和成對排序
正則化
接下來,我們將處理正則化項,但在此之前,我們需要了解如何以數學方式定義決策樹。 直觀來說,決策樹主要是葉節點、數據點和將數據點分配給這些葉節點的函數的組合。 數學上它寫爲:
其中JT是葉數。此定義將樹上的預測過程描述爲:
- 將數據點x賦給一片葉子m
- 、將相應分數wm(x)分配給第m(x)個數據點
在XGBoost中,複雜度定義爲:
XGBoost中的超參數描述如下:
當然,定義複雜度的方法不止一種,但這一種方法在實踐中效果很好。正則化是大多數基於樹的方法處理得不太仔細或忽略掉的一部分。這是因爲傳統的樹學習方法只強調提升純度,而複雜度的控制則只能基於試探。通過正式定義它,我們可以更好地瞭解我們的模型正在學習的內容,並獲得泛化能力良好的模型
最後一個方程衡量的是樹的結構的優劣。
如果聽起來有些複雜,讓我們看一下圖片,看看如何計算分數。
基本上,對於給定的樹結構,我們將統計信息gi和hi推入它們所屬的葉節點,將統計信息求和,然後使用這一公式計算樹的質量。 該分數類似於決策樹中的純度度量,不同之處在於它還考慮了模型的複雜性
學習樹的結構
現在,我們有了一種方法來衡量一棵樹的質量。理想情況下,我們將枚舉所有可能的樹並選擇最佳的樹,但實際上這是非常棘手的,因此我們將嘗試一次優化一個樹的部分。 具體來說,我們嘗試將一片葉子分成兩片葉子,其得分爲
該公式可分解爲: 1)新左葉上的分數;2)新右葉上的分數;3)原始葉上的分數;4)附加葉上的正則化。 我們在這裏可以看到一個重要的事實:如果增益小於γ,我們最好不要添加該分支,這正是基於樹的模型中的修剪技術! 通過使用監督學習的原理,我們自然可以得出這些技術起作用的原因
很好,現在希望我們對XGBoost有一個初步的瞭解,以及爲什麼它會這樣工作。下次見!
作者:Dip Ranjan Chatterjee
deephub翻譯組:Alexander Zhao