人工智慧演算法通俗講解系列(四):xgboost

  • 2019 年 10 月 6 日
  • 筆記

今天,我們介紹的機器學習演算法叫xgboost。

不要被這個名字嚇唬到,其實它的基本原理並不複雜。要理解xgboost,需要首先理解決策樹。還沒有接觸過決策樹的同學可以看一下《人工智慧演算法通俗講解系列(三):決策樹 》這塊內容。

假如我們現在有下面兩棵決策樹,左側是tree1,右側tree2。這些樹都是用來判斷用戶是否喜歡玩遊戲的。跟我們之前的案例是類似的。

先看右側這個簡單的樹。橢圓是用戶特徵:是否每天用電腦。左邊是「是」,右邊是「否」。通過數據,他們發現,每天玩電腦的人裡面,玩遊戲的人佔比高。不怎麼玩電腦的人裡面,玩遊戲的佔比低。我們給佔比高的這一邊設置一個大一點的權重,比如0.9,佔比低的一邊設置低一點的權重。不用管0.9的計算細節,只要知道佔比(概率)高權重大就OK。

假設我們只有右側這一棵樹。當來一個新用戶時,我們就可以用它來判斷它玩遊戲的偏好。比如某個新用戶每天玩電腦,我們就直接判斷「他喜歡玩遊戲」。這雖然不會特別準確,但也比瞎蒙要更好一些。

不過我們還要追求更好。因為我們不止有一棵樹,還有另一棵決策樹可以使用。

現在,讓我們看一下左邊這棵決策樹。它的第一個判斷條件是:「年齡是否小於15」。 從已有的數據發現,「否」的這一側,也就是15歲以上的人里,玩遊戲的人佔比比較低,於是設置低權重,比如設置為-1。15歲以下的人群里,再分男女。發現男性用戶玩遊戲的比例明顯高於女性。於是,給男性設置高一些的權重,比如2,女性低一點,比如0.1。不過這裡的女性權重,要比15歲以上的那個分支權重大一些。

然後,當一個新的數據過來的時候,我們組合兩個樹,進行綜合判斷。比如一個新用戶年齡小於15,男性,每天玩電腦。 預測他是否喜歡玩遊戲的方法就是:找到他在每一顆樹中的權重,然後相加。他在第一棵樹中的位置為左下角的葉子,權重為2;同時,他在第二棵樹的位置也是左下角的葉子,權重為0.9。然後,我們把他在兩棵樹中的權重相加,得出最終權重,即2.9。

這樣,就等於把三個特徵:年齡、性別、和玩電腦時長總和考慮進來了,這種判斷比單棵決策樹更準確。

同樣方法,一個年齡大於15,且不怎麼玩電腦的人,組合計算後,得分很低。年齡因素減了1分,不玩電腦又減了0.9,所以得分特別低,最終為-1.9。於是,我們就預測他不大可能喜歡遊戲。

實際使用時,特徵庫裡面可能不止三個特徵,而是幾十個或者上百個特徵。那怎麼辦呢?

比如我們有100個特徵,同時有100萬條數據。我們可以隨機選10個特徵、隨機選10萬條數據,生成一顆樹。然後,再隨機選10個特徵,隨機選10萬條數據,生成第二棵樹。同樣的方法生成第三棵樹,第四棵樹…

最後我們可以生成幾十個樹,比如生成了50個。具體幾棵我們自己定。這些樹就組成了一個森林。因為是隨機生成的,所以叫隨機森林。

當我們對一個新用戶做判斷對時候,就把這個用戶往每一棵樹上套,這樣就得出50個權重。然後把這50個權重相加,得出最終的權重。比較不同的用戶的最終權重,就能判斷他們所屬的分類。

把森林中的所有樹組合起來形成的策略,綜合了所有特徵以及多種組合情況的邏輯。用這個策略判斷每一個新數據,準確率會大大提高。所以,xgboost在很多大賽中的表現都很好。