決策樹算法

引、

    最近老師佈置了課堂展示的作業,主題是決策樹,老師還舉了買西瓜的決策例子,感覺貼近生活也很有意思。在這之前沒有了解過這個概念,通過幾個禮拜的學習收穫不少。


一、

    首先,什麼是決策樹?

    百度百科:決策樹(Decision Tree)是在已知各種情況發生概率的基礎上,通過構成決策樹來求取淨現值的期望值大於等於零的概率,評價項目風險,判斷其可行性的決策分析方法,是直觀運用概率分析的一種圖解法。由於這種決策分支畫成圖形很像一棵樹的枝幹,故稱決策樹。

        個人而言,決策樹就是將人在做決策時的思維脈絡以樹的形式展示出來的產物,即決策的過程模型

        這是一棵去不去打高爾夫球的決策樹:

                wKiom1dSgEyyIGW7AABy7Qfe_20996.png

    有Outlool、Humidity、Windy三個屬性,每條路徑代表不同的情況。Outlook下面的Sunny、Overcast和Rainy就是Outlook的三個分支。

    在這棵決策樹裏,我們首先考慮天氣,如果是Overcast,就選擇Yes。如果是Sunny,就在看看humidity然後根據其是否<=75決定Yes or No。是Rainy的話就考慮Windy。

    最後就得到了,打不打高爾夫球的決策結果。

 

    這時就要先說明一下,其實上面的決策樹是通過一個數據集生成的,給出數據集:

    wKioL1dShHLQIW_OAAFaOUm8vxA597.png

   


二、

    那麼問題來了,爲什麼我們要首先考慮天氣情況而不是考慮溼度或者風力情況呢?

     

    接下來就引入一個概念,屬性選擇度量---意思是說如何選擇哪個屬性做爲首先考慮。目前比較流行的三個指標是信息增益,信息增益比還有Gini指數。他們分別對應了三種算法。

    

     信息增益對應了ID3算法,是J.Ross.Quinlan提出的。

    (1)信息增益:

            計算對結果中分類的期望,也稱爲熵。對“Play Golf?”這一欄的計算。

            wKioL1dShPWy1YqhAAAhzqU9hVc040.png


            然後是按某個屬性分類所需要的信息量:分別計算Outlook、Humidity和Windy三列。

            wKiom1dSg_KRVizeAAAjbCxXew8609.png


            兩個相減就是信息增益:

            wKiom1dSg_OCGTZiAAAdOZEOHFk708.png

        選擇信息增益最高的一個屬性進行分裂。


    下面我們用SNS社區中不真實賬號檢測的例子(例子轉自EricZhang's Tech Blog)說明如何使用ID3算法構造決策樹。爲了簡單起見,我們假設訓練集合包含10個元素:

wKioL1dSiAzBv1RFAABpQdHY4tE646.png


 設L、F、H和R表示日誌密度、好友密度、是否使用真實頭像和賬號是否真實,下面計算各屬性的信息增益。

    Info(D)=-0.7log0.7-0.3log0.3=0.879

    infoL(D)=0.3(-0/3log0/3-3/3log3/3)+0.4*(-1/4log1/4-3/4log3/4)+0.3*(-1/3log1/3-2/3log2/3)=0.603

    Gain(L)=info(D)-infoL(D)=0.276u因此日誌密度的信息增益是0.276。

    用同樣方法得到H和F的信息增益分別爲0.033和0.553。


    在上圖的基礎上,再遞歸使用這個方法計算子節點的分裂屬性,最終就可以得到整個決策樹。上面爲了簡便,將特徵屬性離散化了,其實日誌密度和好友密度都是連續的屬性。



    wKiom1dShwrDCFQ9AAE0pVYwtuc148.png



    但是ID3算法有缺陷,就是對算法傾向於選擇分支情況多的屬性作爲分裂,但是這樣的分類可能毫無意義。比如增加一個ID欄,值從1到10,那麼計算結果信息增益是最高的,但是這樣的分類毫無實際用處。   

 

    爲此,Quinlan提出了升級版算法C4.5。對應的屬性選擇度量是信息增益比。

 

    (2)信息增益比:

      信息增益率使用“分裂信息”值將信息增益規範化。分類信息類似於Info(D):

        wKioL1dShs-BA3i5AAAxbGDBfO0391.png

        這個值表示通過將訓練數據集D劃分成對應於屬性A測試的v個輸出的v個劃分產生的信息。


      信息增益率定義:

        wKioL1dShtDAPfHZAAAq_cjaV5g625.png


        選擇信息增益比最大的屬性作爲分裂。


  上面去不去打高爾夫的決策樹,就是通過C4.5算法來生成的。


    (3)

    由於作者比較懶,就不寫上Gini指標的相關資料了。但是原理是一樣的,只是計算的指標不同。



三、

    提到決策樹,就不得不提到剪枝

簡單介紹一下:

    當我們生成一棵決策樹時,我們是通過給定的訓練集來生成的,但是生成之後給了新的數據集之後,這棵決策樹可能就會犯錯。爲什麼呢,因爲我們給的訓練集不能完全包括所有情況,是片面的。而算法對每個屬性都進行了計算,那麼就會導致決策樹考慮了一下沒那麼重要的屬性,就會導致“過度擬合”。於是我們既要給決策樹“剪枝”。

    顧名思義,剪枝就是對決策樹進行修改,改變它的結構或高度。方法有兩種:

   1、 預先剪枝。也就是預先規定一個標準,讓決策樹生成到這個標準的時候就不再繼續生長了。但是這樣也可能會導致遇到更好的屬性卻不能歸到決策樹中。標準有很多,比如複雜度,高度等等。

   2、後剪枝。在決策樹生成之後,對其結點進行評估,若刪掉這個結點決策樹的準確率高了,那麼就可以剪掉。


最後:

    由於學習的時間不長,也沒有深入探究。有很多地方說的不夠清楚和全面。若有不對或建議,歡迎指正和提出。



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