引、
最近老師佈置了課堂展示的作業,主題是決策樹,老師還舉了買西瓜的決策例子,感覺貼近生活也很有意思。在這之前沒有了解過這個概念,通過幾個禮拜的學習收穫不少。
一、
首先,什麼是決策樹?
百度百科:決策樹(Decision Tree)是在已知各種情況發生概率的基礎上,通過構成決策樹來求取淨現值的期望值大於等於零的概率,評價項目風險,判斷其可行性的決策分析方法,是直觀運用概率分析的一種圖解法。由於這種決策分支畫成圖形很像一棵樹的枝幹,故稱決策樹。
個人而言,決策樹就是將人在做決策時的思維脈絡以樹的形式展示出來的產物,即決策的過程模型。
這是一棵去不去打高爾夫球的決策樹:
有Outlool、Humidity、Windy三個屬性,每條路徑代表不同的情況。Outlook下面的Sunny、Overcast和Rainy就是Outlook的三個分支。
在這棵決策樹裏,我們首先考慮天氣,如果是Overcast,就選擇Yes。如果是Sunny,就在看看humidity然後根據其是否<=75決定Yes or No。是Rainy的話就考慮Windy。
最後就得到了,打不打高爾夫球的決策結果。
這時就要先說明一下,其實上面的決策樹是通過一個數據集生成的,給出數據集:
二、
那麼問題來了,爲什麼我們要首先考慮天氣情況而不是考慮溼度或者風力情況呢?
接下來就引入一個概念,屬性選擇度量---意思是說如何選擇哪個屬性做爲首先考慮。目前比較流行的三個指標是信息增益,信息增益比還有Gini指數。他們分別對應了三種算法。
信息增益對應了ID3算法,是J.Ross.Quinlan提出的。
(1)信息增益:
計算對結果中分類的期望,也稱爲熵。對“Play Golf?”這一欄的計算。
然後是按某個屬性分類所需要的信息量:分別計算Outlook、Humidity和Windy三列。
兩個相減就是信息增益:
選擇信息增益最高的一個屬性進行分裂。
下面我們用SNS社區中不真實賬號檢測的例子(例子轉自EricZhang's Tech Blog)說明如何使用ID3算法構造決策樹。爲了簡單起見,我們假設訓練集合包含10個元素:
設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。
在上圖的基礎上,再遞歸使用這個方法計算子節點的分裂屬性,最終就可以得到整個決策樹。上面爲了簡便,將特徵屬性離散化了,其實日誌密度和好友密度都是連續的屬性。
但是ID3算法有缺陷,就是對算法傾向於選擇分支情況多的屬性作爲分裂,但是這樣的分類可能毫無意義。比如增加一個ID欄,值從1到10,那麼計算結果信息增益是最高的,但是這樣的分類毫無實際用處。
爲此,Quinlan提出了升級版算法C4.5。對應的屬性選擇度量是信息增益比。
(2)信息增益比:
信息增益率使用“分裂信息”值將信息增益規範化。分類信息類似於Info(D):
這個值表示通過將訓練數據集D劃分成對應於屬性A測試的v個輸出的v個劃分產生的信息。
信息增益率定義:
選擇信息增益比最大的屬性作爲分裂。
上面去不去打高爾夫的決策樹,就是通過C4.5算法來生成的。
(3)
由於作者比較懶,就不寫上Gini指標的相關資料了。但是原理是一樣的,只是計算的指標不同。
三、
提到決策樹,就不得不提到剪枝。
簡單介紹一下:
當我們生成一棵決策樹時,我們是通過給定的訓練集來生成的,但是生成之後給了新的數據集之後,這棵決策樹可能就會犯錯。爲什麼呢,因爲我們給的訓練集不能完全包括所有情況,是片面的。而算法對每個屬性都進行了計算,那麼就會導致決策樹考慮了一下沒那麼重要的屬性,就會導致“過度擬合”。於是我們既要給決策樹“剪枝”。
顧名思義,剪枝就是對決策樹進行修改,改變它的結構或高度。方法有兩種:
1、 預先剪枝。也就是預先規定一個標準,讓決策樹生成到這個標準的時候就不再繼續生長了。但是這樣也可能會導致遇到更好的屬性卻不能歸到決策樹中。標準有很多,比如複雜度,高度等等。
2、後剪枝。在決策樹生成之後,對其結點進行評估,若刪掉這個結點決策樹的準確率高了,那麼就可以剪掉。
最後:
由於學習的時間不長,也沒有深入探究。有很多地方說的不夠清楚和全面。若有不對或建議,歡迎指正和提出。