機器學習之決策樹和隨機森林

一、決策樹

決策樹學習是機器學習中一類常用的算法。在決策樹中,根節點包含樣本全集。每個非葉子節點表示一種對樣本的分割,通常對應一個劃分屬性,其將樣本分散到不同的子節點中。每個葉子節點對應於決策的結果。因此從根節點到每個葉子節點的路徑對應了一個判定序列。

可與下圖做比對:

這裏寫圖片描述

在上圖的決策樹中,劃分屬性有年齡、是否爲學生、信用率。

劃分屬性一般採用樣本的某個特徵或多個特徵的組合。

決策樹學習是一種有監督學習,根據樣本爲基礎,自頂向下通過遞歸的方法來對樣本進行劃分屬性。其基本思想是以 信息熵 爲度量來構造一棵熵值下降最快的樹,直到葉子節點處的熵值爲0。

二、信息熵

“信息熵”是度量樣本集合純度最常用的一種指標。假定在當前樣本集合D中有k類樣本(樣本的標籤有k類),其中第i類樣本所佔樣本集合的比例爲pi(i = 1,2,…..,k),則樣本集合D的信息熵定義爲

這裏寫圖片描述

由信息熵的公式,我們可以看出,當樣本集合中只存在一類樣本時,k=1,p1=1,這時候 信息熵Ent(D)的值爲0;而當樣本集合存在2類樣本時,假定每類樣本的概率爲1/2,這時信息熵Ent(D)的值爲1……當信息熵Ent(D)的值越小,則樣本集合D的純度越高。

而我們需要的決策樹是以 信息熵 爲度量來構造一棵熵值下降最快的,結點純度越來越高的樹。那我們怎麼對樣本集合分割,分類效果纔會更好呢?如何選擇我們的最優劃分屬性(特徵)來作爲我們分割樣本集合時的非葉子節點?

於此,我們需要對樣本的各個特徵(屬性)進行度量,選出當前最好的劃分屬性,使得我們的分類最純。

通常的度量方法有如下方法:

  • 信息增益(ID3)

  • 信息增益率(C4.5)

  • 基尼係數(CART)

三、信息增益

對於樣本中的某一個離散特徵(屬性) 這裏寫圖片描述 ,其有k個可能的取值 這裏寫圖片描述。若我們使用特徵 這裏寫圖片描述 對樣本集合D進行劃分,則會產生 k 個分支子節點。

在這些分支節點中,第 i 個分支節點中包含着樣本集合D中所有在屬性 這裏寫圖片描述 上取值爲 這裏寫圖片描述 的樣本。我們將第 i 個分支節點的樣本集記作 這裏寫圖片描述 。

我們可以根據 信息熵 的公式計算出 這裏寫圖片描述 的信息熵 這裏寫圖片描述

那我們可以得到,根據屬性 這裏寫圖片描述 劃分後所有分支的樣本集合的信息熵的 加權爲 這裏寫圖片描述 。其中 |D| 表示樣本集合D中的樣本個數,|Di| 表示 第 i 個分支的樣本集合中的樣本個數。

由上我們得到了未劃分前的樣本集合D的信息熵 這裏寫圖片描述 和 根據樣本特徵 這裏寫圖片描述 所劃分後的分支樣本集合的信息熵的加權爲 這裏寫圖片描述 。

我們將劃分前後的信息熵之差作爲我們所說的“信息增益”,因此其公式爲 這裏寫圖片描述。其中 這裏寫圖片描述 爲對樣本集合劃分的某個屬性(特徵)。

又因爲我們的決策樹需要熵值下降最快,因此我們要選擇的最優劃分屬性爲 這裏寫圖片描述,其中 ai爲用於劃分樣本集合D的第i個特徵(屬性)。

一般而言,信息增益越大,則意味着信息熵下降越快,分支的樣本集合純度越高。但我們會發現,當某個屬性的分支較多(屬性值分得較細)時,分支節點的純度會很大,分支的樣本集合的信息熵的權重和爲 這裏寫圖片描述 會變得很小,導致信息增益會變得很大。因此 信息增益 對分支比較多的屬性 有所偏愛。

四、信息增益率

爲減少信息增益的偏好可能帶來的不好影響,我們可以使用“信息增益率”來選擇最優劃分屬性(特徵)。

採用上面相同的符號,信息增益率的定義爲 這裏寫圖片描述

其中 這裏寫圖片描述 稱爲屬性 這裏寫圖片描述 的“固有值”(intrinsic value)。屬性的固有值定義爲: 這裏寫圖片描述 。其中 k 爲屬性 這裏寫圖片描述 的可能取值數目,即可將樣本集合D劃分爲k個分支節點。其中 |D| 表示樣本集合D中的樣本個數,|Di| 表示 第 i 個分支的樣本集合中的樣本個數。

當屬性 這裏寫圖片描述 可能的取值越多時,其屬性“固有值”通常會很大,導致信息增益率會變小,在一定程度上解決了信息增益偏好帶來的問題。但需注意的是,信息增益率在某種程序上可能對可取值數目較少的屬性有所偏好。

五、基尼指數

假定在當前樣本集合D中有k類樣本(樣本的標籤有k類),其中第 i 類樣本所佔樣本集合的比例爲pi(i = 1,2,…..,k),則樣本集合D的純度除了使用使用信息熵來定義,也可以使用基尼值來度量。

樣本集合D的純度可用基尼值來度量:這裏寫圖片描述。從公式可以看出,這裏寫圖片描述 反映了從樣本集合D中隨機抽取兩個樣本,其類別標記不一致的概率。

因此,這裏寫圖片描述 越小,則樣本集合D的純度越高。

同理,對於樣本中的某一個離散特徵(屬性) 這裏寫圖片描述 ,其有k個可能的取值 這裏寫圖片描述。若我們使用特徵 這裏寫圖片描述 對樣本集合D進行劃分,則會產生 k 個分支子節點。

那我們可以得到,由樣本特徵(屬性) 這裏寫圖片描述 所劃分後的分支樣本集合的基尼值的加權爲 這裏寫圖片描述 。其中 k 爲屬性 這裏寫圖片描述的可能取值數目,即可將樣本集合D劃分爲k個分支節點。其中 |D| 表示樣本集合D中的樣本個數,|Di| 表示 第 i 個分支的樣本集合中的樣本個數。

爲使生成的決策樹分類最純,因此我們根據 基尼指數 的方法要選擇的最優劃分屬性爲 這裏寫圖片描述 ,其中 ai爲用於劃分樣本集合D的第i個特徵(屬性)。

六、過擬合和剪枝

決策樹對訓練樣本具有很好的分類能力。而一棵對樣本完全分類的決策樹(完整樹),對未知的測試數據未必有很好的預測能力,泛化能力較差,容易出現過擬合現象。

完整樹:決策樹T的每個葉子節點的樣本集合中的樣本都爲同一類型。

過擬合會導致構建出過於複雜的決策樹,爲解決這個問題,我們可以通過剪枝的方法來簡化已生成的決策樹,即將某個劃分屬性的節點的分支減掉,並將該節點作爲一個對應某個決策結果的葉子節點(對應的決策結果可採用佔多數的樣本標記)。那怎麼判斷某個劃分屬性的節點是否需要剪枝呢?

因而,我們需要設計一個分類誤差評估函數,然後通過極小化決策樹整體的損失函數實現剪枝。

設決策樹 T 有 n 個葉子節點,設第t個葉子節點的樣本集合Dt有Nt個樣本,這些樣本的標記類別不一定相同,假設樣本集合Dt中的樣本有k種標記類別,第i種類別的樣本有Nti個。

那麼,第t個葉子節點的樣本集合的經驗熵 這裏寫圖片描述定義爲:這裏寫圖片描述 。可以看出,當第t個葉子節點的樣本集合只有一種標記類型時,經驗熵爲0。

下面給出我們的決策樹 T 的損失函數的定義:這裏寫圖片描述。其中n爲葉子節點數,也可以用|T|來表示,經驗值參數α≥0。

C(T)表示決策樹對訓練數據的預測誤差,參數α控制兩者之間的影響,α越大,要求模型越簡單,α=0表示不考慮模型的複雜度(即可以產生較多的葉子節點)。

剪枝的過程,就是當α確定時,選擇損失函數最小的模型。分類越細,葉子節點的經驗熵就越小,C(T)越小,但是由於分類越細會導致葉子節點的數目會很多,α|T|(或αn)越大。損失函數反映的是兩者的平衡。

決策樹的生成過程只考慮了樣本集合分類的純度,只考慮更好地擬合訓練數據,而剪枝過程在於減小整體的複雜度。

樹的剪枝算法:固定某個經驗值α,對劃分屬性的結點進行剪枝預估,若剪枝後,決策樹損失函數減小了,則減掉該結點的葉節點,將該結點作爲新的葉節點,該結點對應的決策結果可以爲其樣本集合中佔多數的樣本標記。(或構造不同的α值得到一些備選樹,通過交叉驗證的方法得到最優樹)

七、隨機森林

Bootstraping:一種有放回的抽樣方法。

Bagging( bootstrap aggregation)的策略:從樣本集中進行有放回地選出n個樣本;在所有屬性上,對這n個樣本建立分類器;重複上述兩步m次,獲得m個樣本分類器;將數據都放在這m個樣本分類器上,最終得到m個分類結果,再從這m個分類結果中決定數據屬於哪一類。

隨機森林採用了Bagging策略,且在其基礎上進行了一些修改,採用了兩個隨機:

  • 從樣本集中使用Bootstrap採樣(有放回地採樣)選出n個樣本

  • 從所有屬性(特徵)中隨機選擇k個部分屬性(特徵),選擇最優劃分屬性作爲節點來劃分樣本集合,建立CART決策樹(不對樹進行剪枝)

  • 重複以上兩步m次,建立m棵CART決策樹

  • 這m棵決策樹形成了森林,可通過簡單多數投票法(或其他投票機制)來決定森林的輸出,決定屬於哪一類型。(針對解決迴歸問題,可以採用單棵樹輸出結果總和的平均值)

隨機森林在一定程序上提高了泛化能力,且可以並行地生成單棵樹。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章