决策树面试知识点最全总结(二)

决策树面试知识点最全总结(二)

决策树的生成 ID3和C4.5

1 .ID3算法:
ID3算法的核心是在决策树各个节点上应用信息增益准则选择特征,递归的构建决策树。
具体的方法是:从根节点开始,对结点计算所有可能的特征的信息增益,选择信息增益最大的特征作为该结点的特征,由该特征的不同取值建立子节点;再对子节点递归的调用以上方法,构建决策树;直到所有特征的信息增益均很小或者没有特征可以选择为止(递归终止条件)。最后得到一个决策树。
ID3算法步骤:
输入:训练数据集D,特征集A,阀值ε;
输出:决策树T
1)若D中所有实例属于同一类 Ck C k ,则T是单节点树,并将类 Ck C k 作为该结点的类标记,返回T
2)若A=∅,则T为单节点树,并将D中实例树最多的类 Ck C k 作为该结点的类标记,返回T
3)否则,按照信息增益的计算方法计算特征集A中的各个特征对D的信息增益,选择信息增益最大的特征 Ag A g
4)如果 Ag A g 的信息增益小于阀值ε,则T是单节点树,并将D中实例数量最大的类 Ck C k 作为该结点的类标记,返回T
5)否则,对 Ag A g 的每一个可能值 ai a i ,依据 Ag=ai A g = a i 将D分割为若干非空子集 Di D i ,将 Di D i 中实例数最大的作为标记,构建子节点,由结点和子节点构成树T,返回T
6 )对第i个子结点,以 Di D i 为训练集,以A - Ag A g 为特征集,递归的调用步(1-5),得到子树 Ti T i ,返回 Ti T i

# 输入是各个样本的类别列表
#输出是样本数量最多的样本的类别
def majorityCnt(classList):
    classCount={}
    for vote in classList:
        if vote not in classCount.keys():
            classCount[vote]=0
        calssCount[vote]+=1
    sortedClassCount=sorted(classCount.iteritems(),key=operator.itemgetter(1),reverse=True)
    return sortedClassCount[0][0]
# 创建决策树
#输入参数数据集dataSet 阀值ε
def createTree(dataSet,ε):
    classList=[example[-1] for example in dataSet]
    #对应1) 类别完全相同
    if classList.count(classList[0])== len(classList):
        return classList[0]
    #对应2)特征用完了
    if len(dataSet[0])==1:
        return majorityCnt(classList)
    #对应3) 选择最优特征
    bestFeature,bestInfoGain = chooseBestFeatureToSplit(dataSet)
    MyTree={dataSet[bestFeature][-1]:{}}
    #对应4)最优特征的信息增益都小于阀值,那不用继续划分了
    if bestInfoGain < ε:
        return majorityCnt(classList)
    #对应5)获取最优特征的所有特征值,根据特征值,把训练集划分到各个子训练集
    bestFeatValues = [example[bestFeature] for example in dataSet]
    uniqueFeatValues= set(bestFeatValues)
    # 对应6)在各个子集上重复1-5
    for value in uniqueFeatValues:
        MyTree[dataSet[bestFeature][-1]][value]=createTree(splitDataSet(dataSet,bestFeature,value),ε)
    return MyTree

利用构建好的决策树进行预测时,决策树的每个结点都在内部维护了特征及其相应的特征值,只需将待测样本的相应特征与该结点的特征值进行比较,决定样本是到那个子结点去继续比较,递归的执行这个过程知道叶子结点,待测样本的类型也就知道了。

C4.5算法
C4.5算法与ID3相似,局部进行 了改进,C4.5算法在决策树生成的过程中,用信息增益比来选择特征。
输入:训练数据集D,特征集A,阀值ε
输出:决策树T
1)若D中所有实例属于同一类 Ck C k ,则T是单节点树,并将类 Ck C k 作为该结点的类标记,返回T
2)若A=∅,则T为单节点树,并将D中实例树最多的类 Ck C k 作为该结点的类标记,返回T
3)否则,按照信息增益比的计算方法计算特征集A中的各个特征对D的信息增益比,选择信息增益比最大的特征 Ag A g
4)如果 Ag A g 的信息增益比小于阀值ε,则T是单节点树,并将D中实例数量最大的类 Ck C k 作为该结点的类标记,返回T
5)否则,对 Ag A g 的每一个可能值 ai a i ,依据 Ag=ai A g = a i 将D分割为若干非空子集 Di D i ,将 Di D i 中实例数最大的作为标记,构建子节点,由结点和子节点构成树T,返回T
6 )对第i个子结点,以 Di D i 为训练集,以A - Ag A g 为特征集,递归的调用步(1-5),得到子树 Ti T i ,返回 Ti T i

**注:ID3算法利用信息增益进行特征的选择,存在优先选择取值较多的特征的趋势,
C4.5算法利用信息增益比进行特征的选择,存在优先选择取值较少的特征的趋势。
实际中多采用一个启发式方法,向从所有特征选择出高于平均信息增益的特征,在从这些特征里选出信息增益率最高的特征。**

你可能感兴趣的:(机器学习)