天天看點

機器學習中的算法-Xgboost算法

原創文章,如需轉載請保留出處
本部落格為唐宇迪老師python資料分析與機器學習實戰課程學習筆記
           

一.內建算法思想

1.1 內建算法

将多個分類器內建起來而形成的新的分類算法。這類算法又稱元算法(meta-algorithm)。最常見的內建思想有兩種bagging和boosting。

1.2 舉例

機器學習中的算法-Xgboost算法

(1)看上面一個圖例左邊:有5個樣本,現在想看下這5個人願不願意去玩遊戲,這5個人現在都分到了葉子結點裡面,對不同的葉子結點配置設定不同的權重項,正數代表這個人願意去玩遊戲,負數代表這個人不願意去玩遊戲。是以我們可以通過葉子結點和權值的結合,來綜合的評判目前這個人到底是願意還是不願意去玩遊戲。上面「tree1」那個小男孩它所處的葉子結點的權值是+2(可以了解為得分)。

(2)用單個決策樹好像效果一般來說不是太好,或者說可能會太絕對。通常我們會用一種內建的方法,就是一棵樹效果可能不太好,用兩棵樹呢?

(3)看圖例右邊的「tree2」,它和左邊的不同在于它使用了另外的名額,出了年齡和性别,還可以考慮使用電腦頻率這個劃分屬性。通過這兩棵樹共同幫我們決策目前這個人願不願意玩遊戲,小男孩在「tree1」的權值是+2,在「tree2」的權值是+0.9, 是以小男孩最終的權值是+2.9(可以了解為得分是+2.9)。老爺爺最終的權值也是通過一樣的過程得到的。

1.3 總結

是以說,我們通常在做分類或者回歸任務的時候,需要想一想一旦選擇用一個分類器可能表達效果并不是很好,那麼就要考慮用這樣一個內建的思想。上面的圖例隻是舉了兩個分類器,其實還可以有更多更複雜的弱分類器,一起組合成一個強分類器。

二.XgBoost基本原理

XgBoost是boosting算法的其中一種。Boosting算法的思想是将許多弱分類器內建在一起形成一個強分類器。因為XgBoost是一種提升樹模型,是以它是将許多樹模型內建在一起,形成一個很強的分類器。

2.1 基本思想

機器學習中的算法-Xgboost算法

在XGBoost裡,每棵樹是一個一個往裡面加的,每加一個都是希望效果能夠提升,下圖就是XGBoost這個內建的表示(核心)。

機器學習中的算法-Xgboost算法

一開始樹是0,然後往裡面加樹,相當于多了一個函數,再加第二棵樹,相當于又多了一個函數…等等,這裡需要保證加入新的函數能夠提升整體對表達效果。提升表達效果的意思就是說加上新的樹之後,目标函數(就是損失)的值會下降。

如果葉子結點的個數太多,那麼過拟合的風險會越大,是以這裡要限制葉子結點的個數,是以在原來目标函數裡要加上一個懲罰項「omega(ft)」。

機器學習中的算法-Xgboost算法

2.2 如何計算懲罰項「omega(ft)」

機器學習中的算法-Xgboost算法

一共3個葉子結點,權重分别是2,0.1,-1,帶入「omega(ft)」中就得到上面圖例的式子,懲罰力度和「lambda」的值人為給定。

XGBoost算法完整的目标函數見下面這個公式,它由自身的損失函數和正則化懲罰項「omega(ft)」相加而成。

機器學習中的算法-Xgboost算法

關于目标函數的推導本文章不作詳細介紹。過程就是:給目标函數對權重求偏導,得到一個能夠使目标函數最小的權重,把這個權重代回到目标函數中,這個回代結果就是求解後的最小目标函數值,如下:

機器學習中的算法-Xgboost算法
機器學習中的算法-Xgboost算法
機器學習中的算法-Xgboost算法

其中第三個式子中的一階導二階導的梯度資料都是可以算出來的,隻要指定了主函數中的兩個參數,這就是一個确定的值。下面給出一個直覺的例子來看下這個過程。

2.3 XgBoost求解過程

機器學習中的算法-Xgboost算法
機器學習中的算法-Xgboost算法
機器學習中的算法-Xgboost算法

這裡多說一句:Obj代表了當我們指定一個樹的結構的時候,在目标上最多會減少多少,我們可以把它叫做結構分數,這個分數越小越好。

對于每次擴充,我們依舊要枚舉所有可能的方案。對于某個特定的分割,我們要計算出這個分割的左子樹的導數和和右子數導數和之和(就是下圖中的第一個紅色方框),然後和劃分前的進行比較(基于損失,看分割後的損失和分割前的損失有沒有發生變化,變化了多少)。周遊所有分割,選擇變化最大的作為最合适的分割。

機器學習中的算法-Xgboost算法

繼續閱讀