5-4 決策樹 C4.5決策樹的生成算法

C4.5的生成算法

C4.5算法對ID3做了改進,使用信息增益比來選擇特徵

信息增益比計算公式:
gR(D,A)=g(D,A)H(D) g_R(D, A) = \frac{g(D, A)}{H(D)}

輸入

訓練數據集D
特徵集A
閾值ϵ\epsilon

輸出

決策樹T

過程

過程與ID3決策樹的生成算法完全相同。
除了在第3步中使用信息增益比來選擇特徵。

代碼

def gRDA(X, y, feature):
    # 計算X的每個特徵可取到的值
    a = set(X[:,feature])
    # 計算數據集的經驗熵
    HD = H(y)
    # 計算特徵A對數據集D的經驗條件熵H(D|A)
    HDA = 0
    for value in a:
        yDi = y[X[:,feature]==value]
        HDA += yDi.shape[0]/y.shape[0] * H(yDi)
    return (HD - HDA)/HD

def C45(X, y, epsilon):
    # 若D中所有實例屬於同一類
    if len(set(y))==1:
        # 將類$$C_k$$作爲該結點的類標記
        return y[0]
    # 若$$A=\emptyset$$
    if X.shape[1] == 0:
        # 實例數最大的類$$C_k$$作爲該結點的類標記
        return multi(y)
    bestInfo = 0
    # 計算A中各個特徵對D的信息增益
    for feature in range(X.shape[1]):
        info = gRDA(X, y, feature)
        # 選擇信息特徵最大的Ag
        if svm(X, y, feature) > bestInfo:
            bestInfo = info
            bestfeature = feature
    # 如果Ag的信息增益小於閾值$$\epsilon$$
    if bestInfo < epsilon:
        # 將D中實例數最大的類$$C_k$$作爲該結點的類標記
        return multi(y)
    feature = bestfeature
    ret = {'feature':feature}
    # 對Ag的每一個可能的值ai
    a = set(X[:, feature])
    for ai in a:
        yai = y[X[:,feature] == ai]
        Xai = X[X[:,feature] == ai]
        ret[ai] = C45(Xai, yai, epsilon)
    return ret
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章