樹模型總結

1. 決策樹

1.0 問題彙總

  1. 如果決策樹是二叉樹,那麼決策樹是滿二叉樹嘛?
  2. 決策樹生長的過程的終止條件是哪些?
  3. C4.5相比於ID3做了哪些改進?解決了什麼問題?

1.1 原理

  決策樹是通過單顆樹來表示決策的過程和結果。這課樹可以是二叉樹(CART只能是二叉樹),也可以是多叉樹(原生的ID3樹和C4.5樹是多叉樹,但sklearn中有二叉的ID3樹)。

  根節點包含所有數據集,每個內部節點對應一次決策過程
,每個葉節點對應一個決策結果(不同葉節點可能對應同一個決策結果),

  每個葉節點都對應一個決策結果(注意,不同的葉節點可能對應同一個決策結果),每一個內部節點都對應一次決策過程。從根節點到每個葉節點的路徑對應一個完整的決策過程。

  決策樹的生成就是不斷的選擇最優的特徵對訓練集進行劃分,是一個遞歸的過程。遞歸返回的條件有三種:

(1)當前節點包含的樣本屬於同一類別,無需劃分(熵爲0,純度最高)。

(2)當前屬性集爲空,或所有樣本在所有屬性上取值相同,類別標記爲當前節點中樣本數最多的類別。

(3)當前節點包含樣本集合爲空,類別標記爲當前節點中樣本數最多的類別。

1.2 ID3、C4.5、CART

  ID3使用信息增益作爲選擇特徵的準則;C4.5使用信息增益率作爲選擇特徵的準則;CART(分類樹)使用Gini index作爲選擇特徵的準則。

1.2.1 ID3

  熵表示的是數據中包含的信息量大小。熵越小,數據的純度越高,也就是說數據越趨於一致,這是我們希望的劃分之後每個子節點的樣子。

  信息增益 = 劃分前熵 - 劃分後熵=劃分後純度-劃分前純度。信息增益越大,則意味着使用屬性a來進行劃分所獲得的“純度提升”越大。也就是說,用屬性a來劃分訓練集,得到的結果中純度比較高。

  ID3僅僅適用於二分類問題。ID3僅僅能夠處理離散屬性。

1.2.2 C4.5

  C4.5克服了ID3僅僅能夠處理離散屬性的問題,以及信息增益偏向選擇取值較多特徵的問題,使用信息增益比來選擇特徵。信息增益比 = 信息增益 /劃分前熵選擇信息增益比最大的作爲最優特徵。

  C4.5處理連續特徵是先將特徵取值排序,以連續兩個值中間值作爲劃分標準。嘗試每一種劃分,並計算修正後的信息增益,選擇信息增益最大的分裂點作爲該屬性的分裂點。

1.2.3 CART

  CART與ID3,C4.5不同之處在於CART生成的樹必須是二叉樹。也就是說,無論是迴歸還是分類問題,無論特徵是離散的還是連續的,無論屬性取值有多個還是兩個,內部節點只能根據屬性值進行二分。

  CART的全稱是分類與迴歸樹。從這個名字中就應該知道,CART既可以用於分類問題,也可以用於迴歸問題。

  迴歸樹中,使用平方誤差最小化準則來選擇特徵並進行劃分。每一個葉子節點給出的預測值,是劃分到該葉子節點的所有樣本目標值的均值,這樣只是在給定劃分的情況下最小化了平方誤差。要確定最優化分,還需要遍歷所有屬性,以及其所有的取值來分別嘗試劃分並計算在此種劃分情況下的最小平方誤差,選取最小的作爲此次劃分的依據。由於迴歸樹生成使用平方誤差最小化準則,所以又叫做最小二乘迴歸樹。

  分類樹種,使用Gini指數最小化準則來選擇特徵並進行劃分;

  Gini指數表示集合的不確定性,或者是不純度。基尼指數越大,集合不確定性越高,不純度也越大。這一點和熵類似。另一種理解基尼指數的思路是,基尼指數是爲了最小化誤分類的概率。

1.3 信息增益 vs 信息增益比

  之所以引入了信息增益比,是由於信息增益的一個缺點。那就是:信息增益總是偏向於選擇取值較多的屬性(尤其是ID類的屬性)。信息增益比在此基礎上增加了一個罰項,解決了這個問題。

1.4 Gini指數 vs 熵

  既然這兩個都可以表示數據的不確定性,不純度。那麼這兩個有什麼區別那?

  • Gini指數的計算不需要對數運算,更加高效
  • Gini指數更偏向於連續屬性,熵更偏向於離散屬性

  信息熵的計算公式爲:
H(X)=i=1npilog(pi)H(X)=-\sum \limits _{i=1}^n p_i log(p_i)
  Gini index的計算公式爲:
Gini(X)=i=1npi(1pi)=1i=1n(pi)2Gini(X)=\sum \limits _{i=1}^n p_i(1-p_i)=1-\sum \limits _{i=1}^n (p_i)^2
  基尼係數的取值是在0~0.5之間,信息熵的取值是在0~1之間,所以在某些情況下,信息增益會比基尼係數變化更大。基於信息增益的樹會比基於Gini指數的樹生長的更精細。

1.5 剪枝

  決策樹算法很容易過擬合(overfitting),剪枝算法就是用來防止決策樹過擬合,提高泛華性能的方法。

  剪枝分爲預剪枝與後剪枝。

  預剪枝是指在決策樹的生成過程中,對每個節點在劃分前先進行評估,若當前的劃分不能帶來泛化性能的提升,則停止劃分,並將當前節點標記爲葉節點。

  後剪枝是指先從訓練集生成一顆完整的決策樹,然後自底向上對非葉節點進行考察,若將該節點對應的子樹替換爲葉節點,能帶來泛化性能的提升,則將該子樹替換爲葉節點。

  那麼怎麼來判斷是否帶來泛化性能的提升那?最簡單的就是留出法,即預留一部分數據作爲驗證集來進行性能評估。

1.6 總結

  決策樹算法主要包括三個部分:特徵選擇、樹的生成、樹的剪枝。常用算法有ID3、C4.5、CART。

  特徵選擇。特徵選擇的目的是選取能夠對訓練集分類的特徵。特徵選擇的關鍵是準則:信息增益、信息增益比、Gini指數。

  決策樹的生成。通常是利用信息增益最大、信息增益比最大、Gini指數最小作爲特徵選擇的準則。從根節點開始,遞歸的生成決策樹。相當於是不斷選取局部最優特徵,或將訓練集分割爲基本能夠正確分類的子集。

  決策樹的剪枝。決策樹的剪枝是爲了防止樹的過擬合,增強其泛化能力。包括預剪枝和後剪枝。

2. 隨機森林(Random Forest)

  要說隨機森林就要先說Bagging,要說Bagging就要先說集成學習。

2.1 集成學習方法

  集成學習(ensemble learning)通過構建並組合多個學習器來完成學習任務。集成學習通過將多個學習器進行結合,常獲得比單一學習器顯著優越的泛化性能。

  根據個體學習器是否是同類型的學習器(由同一個算法生成,比如C4.5,BP等),分爲同質和異質。同質的個體學習器又叫做基學習器,而異質的個體學習器則直接成爲個體學習器。

  原則:要獲得比單一學習器更好的性能,個體學習器應該好而不同。即個體學習器應該具有一定的準確性,不能差於弱學習器,並且具有多樣性,即學習器之間有差異

  根據個體學習器的生成方式,目前集成學習分爲兩大類:

  個體學習器之間存在強依賴關係、必須串行生成的序列化方法。代表是Boosting。

  個體學習器之間不存在強依賴關係、可同時生成的並行化方法。代表是Bagging和隨機森林(Random Forest).。

2.2 Bagging

  前面提到,想要集成算法獲得性能的提升,個體學習器應該具有獨立性。雖然“獨立”在現實生活中往往無法做到,但是可以設法讓基學習器儘可能的有較大的差異。Bagging給出的做法就是對訓練集進行採樣,產生出若干個不同的子集,再從每個訓練子集中訓練一個基學習器。由於訓練數據不同,我們的基學習器可望具有較大的差異。

  Bagging是並行式集成學習方法的代表,採樣方法是自助採樣法,用的是有放回的採樣。初始訓練集中大約有63.2%的數據出現在採樣集中。

  Bagging在預測輸出進行結合時,對於分類問題,採用簡單投票法;對於迴歸問題,採用簡單平均法。

  Bagging優點:

  • 高效。Bagging集成與直接訓練基學習器的複雜度同階。
  • Bagging能不經修改的適用於多分類、迴歸任務。
  • 包外估計。使用剩下的樣本作爲驗證集進行包外估計(out-of-bag estimate)

2.3 隨機森林(Random Forest)

2.3.1 原理

  隨機森林(Random Forest)是Bagging的一個變體。Ramdon Forest在以決策樹爲基學習器構建Bagging集成的基礎上,進一步在決策樹的訓練過程中引入隨機屬性選擇。

  原來決策樹從所有屬性中,選擇最優屬性。Ramdom Forest的每一顆決策樹中的每一個節點,先從該節點的屬性集中隨機選擇K個屬性的子集,然後從這個屬性子集中選擇最優屬性進行劃分。K控制了隨機性的引入程度,是一個重要的超參數。

  預測:

  • 分類:簡單投票法
  • 迴歸:簡單平均法

2.3.2 優缺點

優點:

  • 由於每次不再考慮全部的屬性,而是一個屬性子集,所以相比於Bagging計算開銷更小,訓練效率更高。

  • 由於增加了屬性的擾動,隨機森林中基學習器的性能降低,使得在隨機森林在起始時候性能較差,但是隨着基學習器的增多,隨機森林通常會收斂於更低的泛化誤差,相比於Bagging。

  • 兩個隨機性的引入,使得隨機森林不容易陷入過擬合,具有很好的抗噪聲能力

  • 對數據的適應能力強,可以處理離散和連續的,無需要規範化

  • 可以得到變量的重要性, 基於oob誤分類率和基於Gini係數的變化

缺點:

  • 在噪聲較大的時候容易過擬合

3. AdaBoost

  AdaBoost是Boosting的代表,前面我們提到Boosting是集成學習中非常重要的一類串行化學習方法。

3.1 Boosting

  Boosting是指個體學習器之間存在強依賴關係,必須串行序列化生成的集成學習方法。他的思想來源是三個臭皮匠頂個諸葛亮。Boosting意爲提升,意思是希望將每個弱學習器提升爲強學習器。

  工作機制如下:

  • 先從初始訓練集中學習一個基學習器

  • 根據基學習器的表現對訓練樣本分佈進行調整,使得先前基學習器做錯的訓練樣本在後續收到更多關注

  • 基於調整後的樣本分佈來訓練下一個基學習器

  • 如此反覆,直到基學習器數目達到T,最終將這T個基學習器進行加權結合

  對訓練樣本分佈調整,主要是通過增加誤分類樣本的權重,降低正確分類樣本的權重。

3.2 AdaBoost原理

  面臨兩個問題:

(1)在每一輪,如何改變訓練數據的概率分佈或者權值分佈。(也可以重採樣,但是AdaBoost沒這麼做)

(2)如何將弱分類器組合成強分類器

  AdaBoost的做法:

(1)提高那些被前一輪弱分類器錯誤分類樣本的權值,降低那些被正確分類的樣本的權值。這樣一來,那些沒有得到正確分類的數據,由於其權值的加大而受到後一輪弱分類器的關注。

(2)採用加權多數表決。具體的,加大分類錯誤率低的分類器的權值,使其在表決中起較大作用,減少分類誤差率大的弱分類器的權值,使其在表決中起較小作用。

弱分類器被線性組合成爲一個強分類器。

訓練目標:

  • 最小化指數損失函數。

三部分組成:

(1)分類器權重更新公式

(2)樣本分佈(也就是樣本權重)更新公式

(3)加性模型。 最小化指數損失函數

3.3 AdaBoost優缺點

優點:

  • 不改變所給的訓練數據,而不斷改變訓練數據的權值分佈,使得訓練數據在基本分類器的學習中起不同的作用。這是AdaBoost的一個特點。
  • 利用基本分類器的加權線性組合構建最終分類器,是AdaBoost的另一個特點。
  • AdaBoost被實踐證明是一種很好的防止過擬合的方法,但至今爲什麼至今沒從理論上證明。
    缺點:
  • AdaBoost只適用於二分類問題。

4. GBDT

4.1 DT:迴歸樹 Regression Decision Tree

  GDBT中的樹全部都是迴歸樹,核心就是累加所有樹的結果作爲最終結果。只有迴歸樹的結果累加起來纔是有意義的,分類的結果加是沒有意義的。

  GDBT調整之後可以用於分類問題,但是內部還是迴歸樹。

  這部分和決策樹中的是一樣的,無非就是特徵選擇。迴歸樹用的是最小化均方誤差,分類樹是用的是最小化基尼指數(CART)

4.2 GB:梯度迭代 Gradient Boosting

  首先Boosting是一種集成方法。通過對弱分類器的組合得到強分類器,他是串行的,幾個弱分類器之間是依次訓練的。GBDT的核心就在於,每一顆樹學習的是之前所有樹結論和的殘差。

  Gradient體現在:無論前面一顆樹的cost function是什麼,是均方差還是均差,只要它以誤差作爲衡量標準,那麼殘差向量都是它的全局最優方向,這就是Gradient。

4.3 Shrinkage

  Shrinkage(縮減)是GBDT算法的一個重要演進分支,目前大部分的源碼都是基於這個版本的。

  核心思想在於:Shrinkage認爲每次走一小步來逼近結果的效果,要比每次邁一大步很快逼近結果的方式更容易防止過擬合。也就是說,它不信任每次學習到的殘差,它認爲每棵樹只學習到了真理的一小部分,累加的時候只累加一小部分,通過多學習幾棵樹來彌補不足。

  具體的做法就是:仍然以殘差作爲學習目標,但是對於殘差學習出來的結果,只累加一小部分(step*殘差)逐步逼近目標,step一般都比較小0.01-0.001,導致各個樹的殘差是漸變而不是陡變的。

  本質上,Shrinkage爲每一顆樹設置了一個weight,累加時要乘以這個weight,但和Gradient沒有關係。這個weight就是step。跟AdaBoost一樣,Shrinkage能減少過擬合也是經驗證明的,目前還沒有理論證明。

4.5 GBDT和隨機森林

GBDT和隨機森林的相同點:

  • 都是由多棵樹組成

  • 最終的結果都由多棵樹共同決定

GBDT和隨機森林的不同點:

  • 組成隨機森林的可以是分類樹、迴歸樹;組成GBDT只能是迴歸樹

  • 組成隨機森林的樹可以並行生成(Bagging);GBDT只能串行生成(Boosting)

  • 對於最終的輸出結果而言,隨機森林使用多數投票或者簡單平均;而GBDT則是將所有結果累加起來,或者加權累加起來

  • 隨機森林對異常值不敏感,GBDT對異常值非常敏感

  • 隨機森林對訓練集一視同仁權值一樣,GBDT是基於權值的弱分類器的集成

  • 隨機森林通過減小模型的方差提高性能,GBDT通過減少模型偏差提高性能

TIP

  1. GBDT相比於決策樹有什麼優點

  泛化性能更好!GBDT的最大好處在於,每一步的殘差計算其實變相的增大了分錯樣本的權重,而已經分對的樣本則都趨向於0。這樣後面就更加專注於那些分錯的樣本。

  1. Gradient體現在哪裏?

  可以理解爲殘差是全局最優的絕對方向,類似於求梯度。

  1. re-sample

  GBDT也可以在使用殘差的同時引入Bootstrap re-sampling,GBDT多數實現版本中引入了這個選項,但是是否一定使用有不同的看法。原因在於re-sample導致的隨機性,使得模型不可復現,對於評估提出一定的挑戰,比如很難確定性能的提升是由於feature的原因還是sample的隨機因素。

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