C4.5的生成算法
C4.5算法對ID3做了改進,使用信息增益比來選擇特徵
信息增益比計算公式:
輸入
訓練數據集D
特徵集A
閾值
輸出
決策樹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