Xgboost原理及使用


集成學習

集成學習(ensemble learning)通過構建並結合多個學習器來完成學習任務,有時也被稱爲多分類器系統(multi-classifier system)、基於委員會的學習(committee-based learning)等。如下圖所示,集成學習的一般構造:先產生一組“個體學習器”(individual learner),再用某種策略將它們結合起來。

集成學習示意圖

個體學習器通常由一個現有的學習算法從訓練數據中產生。例如C4.5決策樹算法、BP神經網絡算法等,此時集成中只包含同種類型的個體學習器,例如“決策樹集成”中全是決策樹,“神經網絡集成”中全是神經網絡,這樣的集成是“同質”的(homogeneous)。同質集成中的個體學習器亦稱爲“基學習器”(base learner),相應的學習算法稱爲“基學習算法”(base learning algorithm)。集成也可包含不同類型的個體學習器,例如同時包含決策樹和神經網絡,這樣的集成是“異質”的(heterogeneous)。
異質集成中的個體學習器由不同的學習算法生成,這時就不再有基學習算法;相應的,個體學習器一般不稱爲基學習器,常稱爲“組件學習器”(component learner)或直接稱爲個體學習器。
常見的集成學習方法有:袋裝組合法(Bagging)、自適應提升(AdaBoost)、隨機森林(Random Forest)和旋轉森林(Rotation Forest)等。

【詳情解釋請參考 《機器學習》 周志華 清華大學出版社】

監督學習

監督學習是從標記的訓練數據來推斷一個功能的機器學習任務。訓練數據包括一套訓練示例。在監督學習中,每個實例都是由一個輸入對象(通常爲矢量)和一個期望的輸出值(也稱爲監督信號)組成。監督學習算法是分析該訓練數據,併產生一個推斷的功能,其可以用於映射出新的實例。

有監督學習大致可以粗略分爲模型、參數、目標函數三部分。

Model:how to make prediction Yi given Xi ,常見模型如:線性模型(include 線性迴歸、邏輯迴歸)

參數:需要從數據中學習的東西。

目標函數:按照我的理解,每一個算法都有一個目標函數(objective function),算法就是讓這個目標函數達到最優。

Objective Function

關於目標函數的詳細說明,我看過一篇知乎上的討論,解釋得挺詳細。
機器學習中的目標函數、損失函數、代價函數有什麼區別?

在這裏,目標函數=訓練誤差項+正則項

樹模型

迴歸樹( Regression Tree CART),像決策樹一樣,有着決策條件,而且Regression Tree的每個葉子節點都有一個分數(Score)。

CART

關於迴歸樹的概概念,之前一直留着兩張圖,可以快速理解一下回歸樹是什麼。


補充說明了I()

在這裏得提到一下,
ID3算法採用信息增益,C4.5算法採用信息增益比,CART採用Gini係數。
它們結構是差不多的,唯一不同的就是目標函數的構建不一樣。

樹模型的組合集成(ensemble)

單棵樹過於簡單而無法有效預測,所以需要更強力的模型:樹的集成。

樹的集成

假設我們有K trees,

Model: assuming we have K trees
迴歸樹(CART)的集合空間
q表示每棵樹的結構映射到樣本所對應的葉子的索引。T指的是樹的葉子數量。每個fk對應於一個獨立樹結構q和葉子權重w。

目標函數是,

Objective

其中,Complexity of the Trees 後面再來,先進行提升樹。

梯度樹提升(Gradient Tree Boosting)

因爲它們都是樹而不是數字向量,我們沒辦法使用像SGD等方法去找到f。所以使用Additive Training的方式
Tree learning,Additive Training (Boosting)
Start from constant prediction, add a new function each time.

Additive Learning

第t輪預測是:

這裏寫圖片描述

第i個樣本在第t輪的模型預測值,保留t-1輪的模型預測值後,加入一個新的函數。選擇在每一輪加入新函數是爲了儘可能的讓目標函數最大程度的降低。於是,改寫目標函數爲:

改寫目標函數

找到 ft 來優化這個目標函數。當誤差函數L是平方誤差的情況下,目標函數可以寫成:

平方誤差下細化函數

採用泰勒展開來近似定義目標函數,方便進一步的計算。

Goal

用泰勒二階展開來近似原來的目標後:
泰勒展開公式:

泰勒公式

定義:

gi和hi

展開:

把常數項移除後,獲得了相對統一的目標函數。只依賴每個數據點在誤差函數上的一階和二階導是這個目標函數的明顯特點。

這樣的形式包含所有可求導的目標函數。也就是說,用於實現的代碼可求解包括迴歸、分類和排序的各種問題。

上面還沒說到的樹的複雜度

上述公式中,

樹的複雜度
樹的複雜度

用來定義樹的複雜度。每棵樹分成結構部分q和葉子權重部分w。複雜度包括:每棵樹中的節點個數,及每棵樹中葉子節點上的權重的L2模平方。雖然定義方式不唯一,但是這種定義下學習出的樹的效果較好。

用這種新的定義將目標函數進行改寫:

加上複雜度並展開

再定義 Gi Hi

Gi Hi

則目標函數爲

假設樹的結構q(x)已知,通過目標函數計算葉子j最優的權重值:

葉子權重

以及計算對應的最優目標函數值:

目標函數

上述公式可以被作爲一個對於樹結構q進行打分的函數,類似gini係數。可以把它叫做結構分數(structure score),這個分數越小樹結構越好。
算法重複地利用打分函數不斷枚舉不同的樹結構來尋找一個最優結構的樹,加入到模型中。
一般情況下,無法枚舉所有的樹結構q,所以採用貪心算法從一個單葉子節點開始迭代來給樹添加分支這種方法進行代替。

最後使用原作者的對此算法的總結就是:

這個過程的總結

【未完待續……】

發佈了16 篇原創文章 · 獲贊 56 · 訪問量 13萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章