5-4 决策树 C4.5决策树的生成算法

Posted windmissing

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了5-4 决策树 C4.5决策树的生成算法相关的知识,希望对你有一定的参考价值。

C4.5的生成算法

C4.5算法对ID3做了改进,使用信息增益比来选择特征

信息增益比计算公式:
g R ( D , A ) = g ( D , A ) H ( D ) g_R(D, A) = \\fracg(D, A)H(D) gR(D,A)=H(D)g(D,A)

输入

训练数据集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

以上是关于5-4 决策树 C4.5决策树的生成算法的主要内容,如果未能解决你的问题,请参考以下文章

决策树ID3决策树C4.5决策树CARTCART树的生成树的剪枝从ID3到CART从决策树生成规则决策树优缺点

决策树算法 CART和C4.5决策树有啥区别?各用于啥领域?

决策树的几种类型差异及Spark 2.0-MLlibScikit代码分析

决策树的剪枝

决策树分类算法小结

weka 代码 算法 j48 决策树 c4.5