決策樹筆記
前言
什麼是決策樹
我並不想直接回答這個問題,自己看圖,一目瞭然:
一個白富美在相親的時候 是通過如下的決策樹,來決定一個邀約的男子是否值得去見
決策樹的前世今生
要講決策樹(Decision Tree) 有一個大牛不可不提:Ross Quinlan(注意發音 Quinlan:昆蘭)
https://en.wikipedia.org/wiki/Ross_Quinlan
ID3、C4.5以及C4.5的升級版C5.0的發明者。
這三個名字稀奇古怪的算法都是什麼東東?
ID3算法(全名 Iterative Dichotomiser3 (ID3) algorithm中文名迭代二叉樹3代)。這個算法的基本思想是依據奧卡姆剃刀原理(Occam's Razor, Ockham's Razor)構造最小的決策樹。提出時間:1986年
C4.5算法是基於ID3算法的原則又進行了擴展和改進,採用GainRatio來加以改進方法,選取有最大GainRatio的分割變量作爲準則,避免ID3算法過度配適的問題。提出時間:1993年
然後呢,這個C5.0是對C4.5的改進,主要爲了處理大數據的需要,在執行效率和內存使用方面進行了改進。提出時間:1998年。
當然 C5.0和C4.5還有一個本質區別 C5.0是商用版本,不再是開源免費版本。
咱們這個牛教授昆蘭(Ross Quinlan)研究決策樹研究了十幾年,而在本文中,我們將通過非常有限的時間,將昆蘭的思想精髓一一吸收。
理論基礎
----------------------------------------------------------------------------
克勞德•香農被公認爲是二十世紀最聰明的人之一,威廉•龐德斯通在其2005年出版的《財富公式》一書中是這樣描寫克勞德.香農:貝
爾實驗室和MIT有很多人將香農和愛因斯坦相提並論,而其他人則認爲這種對比是不公平的——對香農是不公平
----------------------------------------------------------------------------
信息論之父 香農 在 1948年發表的論文“通信的數學理論(A Mathematical Theory of Communication 推薦中文版鏈接:http://wenku.baidu.com/link?url=M76O27JPJgrTpbc92Fu1AumkSAXcnEQ7t9UPPZGRHypZgKI_1keIkaDL9E55OHyeLoUpK6KeRUsEWkNRsIrBkAnARNQAF37QuWkU6cHbLEO )”中指出,任何信息都存在冗餘,冗餘大小與信息中每個符號(數字、字母或單詞)的出現概率或者說不確定性有關。
Shannon 借鑑了熱力學的概念,把信息中排除了冗餘後的平均信息量稱爲“信息熵”,並給出了計算信息熵的數學表達式。
熵(entropy)
from math import log
def createDataSet():
dataSet = [[1, 1, 'yes'],
[1, 1, 'yes'],
[1, 0, 'no'],
[0, 1, 'no'],
[0, 1, 'no']]
labels = ['no surfacing','flippers']
return dataSet, labels
def calcShannonEnt(dataSet):
numEntries = len(dataSet)
labelCounts = {}
for featVec in dataSet: #the the number of unique elements and their occurance
currentLabel = featVec[-1]
if currentLabel not in labelCounts.keys(): labelCounts[currentLabel] = 0
labelCounts[currentLabel] += 1
shannonEnt = 0.0
for key in labelCounts:
prob = float(labelCounts[key])/numEntries
shannonEnt -= prob * log(prob,2) #log base 2
return shannonEnt
信息增益(information gain)