1. 程式人生 > >《機器學習實戰》第三章----決策樹

《機器學習實戰》第三章----決策樹

什麼是決策樹

決策樹的概念很好理解,因為它更類似人的思維進行分類,視覺化分類規則,如下圖所示,就是一個簡單的決策樹:
這裡寫圖片描述
我們根據禮物的不同的特徵來進行劃分,最終可預測出我們是否喜歡這個禮物.樹模型的優點是顯而易見的:計算複雜度不高,輸出結果易於理解,對中間缺失值不敏感,可用於非線性的預測.當然,樹模型由於過度依賴特徵來進行劃分,所以也很可能產生過度匹配的問題.

決策樹的ID3演算法

《機器學習實戰》的第三章只介紹和使用了ID3演算法,CART,C4.5等演算法會在後面的章節進行介紹.我們知道決策樹是通過特徵進行構建的,所以特徵的選擇就顯得尤為重要.這裡就涉及到了資訊熵和資訊增益.

資訊熵和條件熵

在資訊理論與概率統計中,熵(entropy)是表示隨機變數不確定性的度量,設X是一個取有限個值的離散隨機變數,其概率分佈為:

P(X=Xi)=pi,i=1,2,,n
則隨機變數X的熵定義為:
H(X)=i=1npilog2pi
pi=0,則定義0log20=0,熵越大,隨機變數的不確定性就越大.
條件熵H(Y|X)表示在已知隨機變數X的條件下隨機變數Y的不確定性.隨機變數X給定的條件下隨機變數Y的條件熵(conditional entropy)H(Y|X),定義為X給定條件下Y的條件概率分佈的熵對X的數學期望H(Y|X)=i=1npiH(Y|X=xi)
這裡,pi=P(X=xi),i=1,2,,n
當熵和條件熵中的概率由資料估計(特別是極大似然估計)得到時,所對應的熵與條件熵分別稱為經驗熵(empirical entropy)和經驗條件熵(empirical conditional entropy)

資訊增益

特徵A對訓練資料集D的資訊增益g(D,A),定義為集合D的經驗熵H(D)與特徵A給定條件下D的經驗條件熵

H(D|A)之差,即:

g(D,A)=H(D)H(D|A)
我們選擇資訊增益最大的特徵作為我們的最後特徵,這個很好理解,資訊增益越大,則根據所選特徵劃分後,我們的資料集的資訊熵更小了,隨機變數的不確定降低了,我們的資料也越來越規則了,這正是我們想要的.程式碼中資訊增益的計算部分如下:
計算資訊熵
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:決策樹