《機器學習實戰》第三章----決策樹
阿新 • • 發佈:2019-02-04
什麼是決策樹
決策樹的概念很好理解,因為它更類似人的思維進行分類,視覺化分類規則,如下圖所示,就是一個簡單的決策樹:
我們根據禮物的不同的特徵來進行劃分,最終可預測出我們是否喜歡這個禮物.樹模型的優點是顯而易見的:計算複雜度不高,輸出結果易於理解,對中間缺失值不敏感,可用於非線性的預測.當然,樹模型由於過度依賴特徵來進行劃分,所以也很可能產生過度匹配的問題.
決策樹的ID3演算法
《機器學習實戰》的第三章只介紹和使用了ID3演算法,CART,C4.5等演算法會在後面的章節進行介紹.我們知道決策樹是通過特徵進行構建的,所以特徵的選擇就顯得尤為重要.這裡就涉及到了資訊熵和資訊增益.
資訊熵和條件熵
在資訊理論與概率統計中,熵(entropy)是表示隨機變數不確定性的度量,設是一個取有限個值的離散隨機變數,其概率分佈為:
則隨機變數的熵定義為:
若,則定義,熵越大,隨機變數的不確定性就越大.
條件熵表示在已知隨機變數X的條件下隨機變數Y的不確定性.隨機變數X給定的條件下隨機變數Y的條件熵(conditional entropy),定義為X給定條件下Y的條件概率分佈的熵對X的數學期望
這裡,
當熵和條件熵中的概率由資料估計(特別是極大似然估計)得到時,所對應的熵與條件熵分別稱為經驗熵(empirical entropy)和經驗條件熵(empirical conditional entropy)
資訊增益
特徵A對訓練資料集D的資訊增益,定義為集合D的經驗熵H(D)與特徵A給定條件下D的經驗條件熵之差,即:
我們選擇資訊增益最大的特徵作為我們的最後特徵,這個很好理解,資訊增益越大,則根據所選特徵劃分後,我們的資料集的資訊熵更小了,隨機變數的不確定降低了,我們的資料也越來越規則了,這正是我們想要的.程式碼中資訊增益的計算部分如下:
計算資訊熵
def calcShannonEnt(dataSet):
numEntries = len(dataSet) #返回的是陣列的行數,len(dataSet[0,:])返回陣列的列數,這裡得到資料的總數量
labelCounts = {}
for featVec in dataSet:
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*math.log(prob,2)
return shannonEnt
書中給了一個關於隱形眼睛預測的例子,最後構建的決策樹如下:
完整的決策樹程式碼參見我的Github:決策樹